Pular para o conteúdo

O aparelho

Compartilhar, ligar, abrir no mapa e a localização — pelo navegador, com a permissão do usuário.

O aplicativo alcança o aparelho pelo navegador, com as APIs da web e a permissão do usuário. Nada disso é nativo, e cada recurso diz o que acontece onde ele não existe.

ChamadaNo celularOnde não há
Br.compartilhar(texto)a folha do sistema (WhatsApp, e-mail…)copia para a área de transferência e diz "Copiado"
Br.ligar(numero)abre o discadoro computador pergunta que aplicativo usar
Br.mapa(lat, lon)abre o aplicativo de mapasabre o mapa no navegador
Br.localizacao()pede a posição ao usuárioexige HTTPS — sem ele, o botão diz isso
dataforge
adopt Arcane.Brasa as Br
adopt Arcane.Vitrine as V

app := Br.app("Entregas")

action tela():
    Br.topo("Entrega 42")
    Br.ligar("+55 11 99999-0000", "Ligar para o cliente")
    Br.mapa(-23.5505, -46.6333, "Ver o endereço")
    Br.compartilhar("Entrega 42 a caminho")
    onde := Br.localizacao("Registrar minha posição")
    given onde isnt void:
        V.texto($"posição: {onde["lat"]}, {onde["lon"]} (±{onde["precisao"]} m)")

Br.tela("/", tela)

s := Br.testar(app)
assert not s.tem("posição:")
s.localizacao(-23.5505, -46.6333, 12)      // o que o navegador responderia
assert s.tem("posição: -23.5505, -46.6333 (±12.0 m)")

Como a localização chega#

O botão pede a posição ao navegador, que pergunta ao usuário. A resposta volta como parâmetro, a tela roda de novo com ela, e ela fica na sessão — a próxima tela não pede outra vez. Br.localizacao() devolve {lat, lon, precisao} ou void, e na Sonda s.localizacao(lat, lon) faz o papel do navegador.

A câmera#

É o V.camera da Vitrine: o navegador do celular abre a câmera traseira, e a foto chega à tela como arquivo. Ver Vitrine.