Widget Customizado com Oninit

Criando um widget customizado com onInit

Atualmente no Beagle, os componentes Container e ListView possuem o comportamento de executar uma lista de ações assim que são renderizados. Para isso, eles expõe a propriedade onInit, a qual recebe a lista de ações que serão disparadas.

Para criar um widget customizado com o comportamento de disparar uma lista de ações assim que for renderizado, o Beagle fornece uma forma fácil de fazer utilizando o pattern delegate através da implementação da interface OnInitiableComponent.

Passo 1: Vincular OnInitiableComponent

Com o widget customizável criado, adicione a interface OninitiableComponent.

@RegisterWidget
class CustomInitiableWidget(
    val name: String,
    val phone: String,
    val age: Int
): WidgetView(), OnInitiableComponent {
    override fun buildView(rootView: RootView): View {
        TODO("Not yet implemented")
    }
}

Passo 2: Implementar propriedade onInit

Após adicionar a interface OnInitiableComponent ao widget, sobrescreva a propriedade onInit.

@RegisterWidget
class CustomInitiableWidget(
    val name: String,
    val phone: String,
    val age: Int,
    override val onInit: List<Action>?
): WidgetView(), OnInitiableComponent {
    override fun buildView(rootView: RootView): View {
        TODO("Not yet implemented")
    }
}

Passo 3: Delegar implementação

Além da propriedade onInit, a interface OnInitiableComponent precisa da implementação dos métodos handleOnInit e markToRerunOnInit. Para facilitar e manter o padrão de comportamento do componente, o Beagle já fornece uma implementação pronta e recomendamos o seu uso, bastando somente delegar OnInitiableComponentImpl.

@RegisterWidget
class CustomInitiableWidget(
    val name: String,
    val phone: String,
    val age: Int,
    override val onInit: List<Action>?
): WidgetView(), OnInitiableComponent by OnInitiableComponentImpl(onInit) {
    override fun buildView(rootView: RootView): View {
        TODO("Not yet implemented")
    }
}

Passo 4: Executar handleOnInit

Por fim, com toda a configuração feita no widget, falta somente a execução do método handleOnInit para que a lista de ações onInit sejam executadas assim que a view for renderizada.

@RegisterWidget
class CustomInitiableWidget(
    val name: String,
    val phone: String,
    val age: Int,
    override val onInit: List<Action>?
): WidgetView(), OnInitiableComponent by OnInitiableComponentImpl(onInit) {
    override fun buildView(rootView: RootView): View {
        handleOnInit(rootView, view)
    }
}

Pronto! Seu componente agora executa uma lista de ações sempre que for renderizado!


Última modificação 11/02/2021: create content (#298) (43225e15)