Control Refs
Flet controls are objects and to access their properties we need to keep references (variables) to those objects.
Consider the following example:
import flet as ft
def main(page):
first_name = ft.TextField(label="First name", autofocus=True)
last_name = ft.TextField(label="Last name")
greetings = ft.Column()
def btn_click(e):
greetings.controls.append(ft.Text(f"Hello, {first_name.value} {last_name.value}!"))
first_name.value = ""
last_name.value = ""
page.update()
first_name.focus()
page.add(
first_name,
last_name,
ft.ElevatedButton("Say hello!", on_click=btn_click),
greetings,
)
ft.app(target=main)
In the very beginning of main()
method we create three controls which we are going to use in button's on_click
handler: two TextField
for first and last names and a Column
- container for greeting messages. We create controls with all their properties set and in the end of main()
method, in page.add()
call, we use their references (variables).
When more and mode controls and event handlers added it becomes challenging to keep all control definitions in one place, so they become scattered across main()
body. Glancing at page.add()
parameters it's hard to imagine (without constant jumping to variable definitions in IDE) what would the end form look like:
page.add(
first_name,
last_name,
ft.ElevatedButton("Say hello!", on_click=btn_click),
greetings,
)
Is first_name
a TextField, does it have autofocus set? Is greetings a Row
or a Column
?