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
.
OnInitiableComponent
ao widget customizável, já que a criação dele em detalhes já foi mostrada no exemplo anterior.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")
}
}
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")
}
}
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")
}
}
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!
OnInitiableCompoent
para todo widget customizado que for inserido dentro do componente ListView.Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.