Estados de Interface
Neste tutorial, iremos aprender como utilizar estados de interface, também chamados de UI States.
Introdução
Enquanto alguns dados devem ser persistidos em tabelas, como informações de usuários, produtos, etc., outros dados, como indicadores de carregamento (loading), são temporários e devem ser mantidos apenas enquanto o usuário interage com a aplicação. Esses dados temporários são chamados de estados de interface, ou UI States.
Criando um UI State
Os UI States são definidos no parâmetro State Definitions dos Blocks. Para criar um novo estado:
- Clique em State Definitions.
- Clique em + Add Item.
- Clique no estado que foi adicionado para editá-lo.
- Em Key, digite o nome do estado.
- Em Component, selecione o tipo desse estado. Por exemplo,data2-core-primitives@Booleanpara um estado que pode sertrueoufalse.
- Em Initial Value, coloque o valor inicial do estado.
Para acessar um UIState, utilizamos o componente data2-core-types@Getter com Module como UIState e Prop como o Block que contém o estado, e State Prop como o nome do estado.
Para alterar um UIState, utilizamos o componente data2-core-types@Setter com Module como UIState, Prop como o Block que contém o estado, State Prop como o nome do estado e Value como o novo valor.
Exemplo: Botão com estado Loading
Neste exemplo, criaremos um botão com estado de loading. O botão terá um UI State chamado loading de valor false e tipo data2-core-primitives@Boolean. No On Click desse botão, mudaremos o estado loading para true e, após 2 segundos, voltaremos o estado para false.
Passo a Passo
- Crie um Artboarde desenhe umBlockque servirá botão.
- Selecione o Blockque foi desenhado.
- Clique em State Definitions. Adicione umState Definitionse crie um estado chamadoloadingcom tipodata2-core-primitives@Booleane valorfalse.
- Volte ao início do Inspectorclicando em< Inspector.
- Em On Click, clique nof()e selecioneSeries.
O Series é um componente que executa uma lista de ações em sequência. Cada ação é executada após a anterior ser concluída.
- Clique no On Clicke emActionspara navegar para a lista de ações.
- Clique em + Add Item. Mude o tipo dela paraSetterclicando emf()e selecionandosetter.
- Clique para navegar para a primeira ação. Em Module, selecioneUIState.
- Em Prop, clique emPick Componente selecione oBlockque contém o estadoloading. Se você não conseguir clicar no nome do estado, não se preocupe, depois de selecionar oBlock, é possível selecionar o estado que você deseja adicionar através da lista emState Prop.
- Em Value, clique nof(), selecioneBooleane coloque o valor comotrue(habilite o controle).
- Volte para a lista de ações.
- Clique em + Add Itempara adicionar outra ação.
- Mude o tipo dela para Delayclicando emf()e selecionandoDelay.
- Clique para editar a ação. Em Delay, coloque2000(2 segundos).
- Volte para a lista de ações.
- Adicione outra ação.
- Agora podemos copiar a primeira ação que adicionamos. Passe o mouse em cima da ação e aperte Ctrl + C(ouCMD + Cno Mac) para copiar.
- Coloque o mouse em cima da última ação e aperte Ctrl + V(ouCMD + Vno Mac) para colar.
- Clique nessa ação e altere o Valuedetrueparafalse.
Agora, iremos utilizar o valor de loading para mostrar um texto diferente no botão. Para isso, vamos adicionar um Text ao Block e mudar o texto de acordo com o valor de loading.
- Volte para a raiz do Inspector.
- Mude o tipo de TextparaIf.
- Clique no Ifpara editar. EmCompare, clique emf()e clique emuiao lado dogetter. Isso fará com que oGetterveio pré-preenchido com oUIState.
- Clique no Comparepara editar oGetter, e selecione oBlockque contém o estadoloading. EmState Prop, não esqueça de selecionarloading.
- Agora, volte para o If. NoThen, teremos o texto quando oloadingfortrue, portanto, coloqueCarregando....
- No Else, coloqueClique aqui.
- Salve o Blockclicando no botão deSavedoInspectorou desselecionando oBlock.
- Clique no botão PreviewdoArtboardpara ver o resultado.