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, é recomendado o seu uso, basta 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 17/09/2021: Reviewed Android section (#773) (e4c75e98)