Telas e navegação
Registrar telas, a barra de abas, o topo com voltar, e passar parâmetros de uma tela a outra.
Br.tela(caminho, acao, titulo, icone, aba) registra uma tela. As que têm aba := yes aparecem na barra de baixo — até cinco: acima disso o rótulo não cabe numa tela de celular, e o Material e a Apple param em cinco. As outras são telas de detalhe, abertas por uma lista ou um botão.
adopt Arcane.Brasa as Br
adopt Arcane.Vitrine as V
app := Br.app("Clube", cor := "#2F6FED")
action inicio():
Br.topo("Início")
V.texto("bem-vindo")
action agenda():
Br.topo("Agenda")
Br.lista([{"id": 7, "nome": "Treino"}], destino := "/evento?id={id}")
action evento():
Br.topo($"Evento {V.parametro("id")}", voltar := yes)
Br.tela("/", inicio, titulo := "Início", icone := "casa", aba := yes)
Br.tela("/agenda", agenda, titulo := "Agenda", icone := "calendario", aba := yes)
Br.tela("/evento", evento)
s := Br.testar(app)
assert s.abas() is [{"titulo": "Início", "ativa": yes}, {"titulo": "Agenda", "ativa": no}]
s.tocar("Agenda")
s.tocar("Treino")
assert s.titulo() is "Evento 7"
assert [a["ativa"] cycle a in s.abas()] is [no, no] // no detalhe, nenhuma acesa
s.voltar()
assert s.titulo() is "Agenda"O topo e o voltar#
Br.topo(titulo, voltar := yes) desenha a seta. Ela usa o histórico do navegador — é o que o gesto de voltar do Android faz — e cai em destino_voltar (padrão /) quando não há para onde voltar: o aplicativo foi aberto direto naquela tela, por um link compartilhado.
Parâmetros#
O destino de uma lista leva os campos do item — "/produto?id={id}" —, e a tela de destino os lê com V.parametro("id"). Cada valor é codificado na URL: um id com & dentro não vira um segundo parâmetro.
Os ícones#
adopt Arcane.Vitrine as V
out len(V.icones()), "ícones"
out V.icones()[0:8]O ícone da aba é o nome de um dos ícones da Vitrine (SVG escrito na página, sem CDN) ou um emoji. Um nome que não existe é recusado na linha que registra a tela, com sugestão — nao ha icone 'caixa', você quis dizer: baixar, casa, faisca —, em vez de desenhar a palavra na barra.