GoSurface — a casca
Popups, folhas e listas suspensas usam todos este mesmo widget. Ele cuida da área segura, do teclado virtual, do cabeçalho e do rodapé fixos, de um corpo rolável, de qual janela está mais acima, da restauração do foco, de quem é dono do botão Voltar e do redimensionamento por arraste.
| Posicionamento | Como aparece | Serve para |
|---|---|---|
CENTER | Um cartão no meio da tela | Confirmações, configurações |
BOTTOM | Uma folha que sobe de baixo | Listas, páginas de gerenciamento |
ANCHOR | Um cartão fixado ao lado de um controle | Listas suspensas, menus de contexto |
close_requested — esconder ou liberar — é tarefa da
tela que é dona dele, porque a casca não tem como saber por que está fechando (salvar e fechar, ou descartar).
GoSheet — uma página vinda de baixo
var sheet := GoSheet.new()
add_child(sheet)
sheet.open("Inventário")
sheet.toolbar().add_child(GoStyle.line_edit("Buscar…"))
sheet.toolbar().visible = true
sheet.footer().add_child(GoStyle.button("Fechar", sheet.close, GoStyle.Tone.PRIMARY))
sheet.footer().visible = true
Ele é dono de um CanvasLayer, então fica acima do HUD de forma confiável. O open() limpa
o corpo e desliga o botão de voltar e as linhas fixas — um botão morto em uma tela que não tem para onde
voltar passa a impressão de coisa quebrada.
GoDialogs — confirmações que você aguarda com await
if await dialogs.confirm("Apagar o save", "Isso não pode ser desfeito."):
delete_save()
confirm(title, body, ok_text, cancel_text, extra, args, destructive) — tudo depois do corpo é
opcional, e o alert() funciona do mesmo jeito, com um botão só. Defina destructive para
algo que não pode ser desfeito: o botão de confirmação vira o botão preenchido GoStyle.Tone.DANGER_SOLID.
Em um tema claro, um rótulo de perigo apenas tonalizado precisa escurecer até parecer texto preto; o botão
preenchido mantém texto branco sobre vermelho. O tom é reaplicado a cada chamada porque uma mesma janela é
reaproveitada, e um segundo confirm() enquanto um já está aberto devolve false na hora.
O confirm_key() aceita chaves de tradução.
Arranjo dos botões. O action_layout é VERTICAL por padrão (seguro para traduções
longas), HORIZONTAL para uma linha só com metade da largura para cada um, ou AUTO, que usa
uma linha só quando os dois rótulos cabem em metade do cartão em uma única linha e os empilha nos demais casos. O
action_gap é o espaço entre os botões e o body_gap o espaço acima deles — deixe-o maior
que o espaço entre os botões para que a pergunta e a escolha se leiam como duas partes. Para um diálogo só, chame
set_next_action_layout() antes de abri-lo. A linha é montada quando um diálogo abre pela primeira vez,
então um GoDialogs em autoload não acrescenta nada na inicialização.
GoForm — um formulário com largura máxima
GoScroll — rolagem por toque
Coloque uma coisa dentro dele. Cabeçalhos e linhas de botões ficam fora — uma lista longa não pode
empurrá-los para fora da tela. O use_panel_edge() leva a barra de rolagem para dentro do respiro
que o cartão já tem, enquanto o conteúdo mantém o recuo.