Pular para o conteúdo

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.

dataforge
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#

dataforge
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.