Layout
Controle CupertinoListTile
CupertinoListTile é um controle similar ao ListTile mas seguindo a estilização do iOS. O controle possui a propriedade notched que, se marcada como False (default) renderiza o controle no modo padrão do iOS, ou, se marcada como True gera o controle na aparência de “Inset Grouped”, o mesmo usado em iOS Notes ou Reminders.
Ele exibe uma linha de altura fixa com controles internos, geralmente imagens, ícones, textos e menus. Ele admite ícones à direita ou à esquerda do título, podendo seus objetos interiores responder a certos eventos.
Um exemplo mínimo de código aparece listado abaixo, com a ilustração de seu resultado ao ser executado.
import flet as ft def main(page: ft.Page): page.bgcolor="#ABE6DB" cuperLT_1=ft.CupertinoListTile( title=ft.Text("Patches de recuperação do Windows 12", color="BLACK"), subtitle=ft.Text("Equipe Mostarda", color="#333355"), additional_info=ft.Text("Completar tarefa até 21:45H", color="#333355"), leading=ft.Icon(name=ft.cupertino_icons.CHAT_BUBBLE), trailing=ft.Icon(name=ft.cupertino_icons.BELL_CIRCLE_FILL), bgcolor="#BDAB8D" ) cuperLT_2= ft.CupertinoListTile( title=ft.Text("Patches de recuperação do iOS 17", color="BLACK"), subtitle=ft.Text("Equipe Catchup", color="#333355"), additional_info=ft.Text("Completar tarefa até 09:15H", color="#333355"), leading=ft.Icon(name=ft.cupertino_icons.CHAT_BUBBLE_2), trailing=ft.Icon(name=ft.cupertino_icons.BELL_CIRCLE, color="RED"), bgcolor="#AD9B7D" ) page.add(cuperLT_1, cuperLT_2) ft.app(target=main)
Propriedades de CupertinoListTile
Propriedade | Descrição |
---|---|
additional_info | controle a ser exibido à direita do título mas antes do controle ao final da linha. Com frequência é usado um texto, seguido por um ícone, embora isso não seja obrigatório. |
bgcolor_activated | cor de fundo do controle após ter sido clicado ou tocado. |
leading | A Control para exibir antes do title. |
leading_size | restringe largura e altura do controle. Default é 28.0. |
leading_to_title | espaço horizontal entre leading e title. Default é 16.0. |
notched | booleano. Se notched=True o controle será criado com a forma de um “Inset Grouped”, usado em aplicativos do iOS como Notes ou Reminders. Default é False. |
padding | espaçamento interno no controle CupertinoListTile, descrevendo distância entre os controles internos: title, subtitle, additional_info e trailing.* Veja a propriedade Container.padding para mais informações e possíveis valores. |
subtitle | conteúdo adicional exibido abaixo do título. Em geral é usado um controle de texto. |
title | usado para exibir o conteúdo principal no controle CupertinoListTile. Em geral é usado um controle de texto. |
toggle_inputs | booleano. Se toggle_inputs=True um clique na lista de altera o estado dos controles internos Radio, Checkbox ou Switch. Default é False. |
trailing | controle a ser exibido após o título. Normalmente é usado um controle de ícone. |
url | URL usada para localizar um recurso quando a lista recebe um clique. Se o evento on_click estiver registrado (se houver uma função a ele associada), o evento é disparado. |
url_target | como abrir URL no modo web. Pode ser:
|
Evento de CupertinoListTile
on_click | dispara quando o usuário clica ou toca na lista. |
Apesar de não encontrar documentação a respeito, na minha experiência os nomes dos ícones podem ser idênticos aos nomes do flutter, mas escritas em maiúsculas. Exemplos são:
- ft.cupertino_icons.FOLDER,
- ft.cupertino_icons.FUNCTION,
- ft.cupertino_icons.HAMMER
Um aplicativo que busca ícones cupertino pode ser encontrada em Cupertino Icons.
Exemplo de uso de CupertinoListTile
import flet as ft def main(page: ft.Page): page.bgcolor="#ABE6DB" def click(e): if e.control.notched: clt2.data +=1 txt = f"Esse controle foi clicado {clt2.data} vez{'es' if clt2.data>1 else ''}." clt2.subtitle=ft.Text(txt, color="#333355") else: clt1.data +=1 txt = f"Esse controle foi clicado {clt1.data} vez{'es' if clt1.data>1 else ''}." clt1.subtitle=ft.Text(txt, color="#333355") titulo.value =f"Os controles foram clicados {clt1.data+clt2.data} vezes." page.update() clt1=ft.CupertinoListTile( title=ft.Text("Patches de recuperação do Windows 12", color="BLACK"), subtitle=ft.Text( "Esse controle ainda não foi clicado.", color="#333355" ), additional_info=ft.Text("Completar tarefa até 21:45H", color="#333355"), leading=ft.Icon(name=ft.cupertino_icons.CAR_DETAILED, color="BLACK"), trailing=ft.Icon(name=ft.cupertino_icons.WRENCH, color="RED", size=30), padding=ft.padding.only(15, 20, 30, 40), bgcolor="#BDAB8D", bgcolor_activated=ft.colors.AMBER_600, data=0, on_click=click, ) clt2=ft.CupertinoListTile( title=ft.Text("Patches de recuperação do iOS 17", color="BLACK"), subtitle=ft.Text( "Esse controle ainda não foi clicado.", color="#333355" ), additional_info=ft.Text("Completar tarefa até 09:15H", color="#333355"), leading=ft.Icon( name=ft.cupertino_icons.CAR_DETAILED, color="BLUE", size=30, ), trailing=ft.Icon( name=ft.cupertino_icons.GAUGE, color="RED", size=30, ), padding=20, bgcolor="#CDBB9D", bgcolor_activated=ft.colors.AMBER_100, notched=True, data=0, on_click=click, ) titulo=ft.Text( "Nenhum controle foi clicado até agora", color="#0b4b8f", size=30, weight=ft.FontWeight.BOLD, ) ct=ft.Container( content=titulo, margin=5, padding=5, alignment=ft.alignment.center, bgcolor="#95d3c8", width=850, height=50, border_radius=10, ) page.add(ct, clt1, clt2) ft.app(target=main)
Valem as observações: um container é inserido na cabeçalho, contendo um título que usa titulo=ft.Text(...)
. A variável titulo foi definida separadamente para estar disponível para alterações na função click()
.
As duas tiles foram definidas com a propriedade data em clt=ft.CupertinoListTile(..., data=0)
, usada para contar quantos cliques foram aplicados sobre o controle. Essa mesma propriedade é usada para construir a propriedade clt.subtitle, também atualizada a cada clique.
A função click()
distingue entre os dois controles através da propriedade e.control.notched
, que só é verdadeira no segundo controle. Desta forma não é necessário criar uma função para cada controle.