My last project in Flet required the implementation of DatePicker. Let's look at the example provided by the official Flet documentation.
import datetime import flet as ft def main(page: ft.Page): page.horizontal_alignment = ft.CrossAxisAlignment.CENTER def handle_change(e): page.add(ft.Text(f"Date changed: {e.control.value.strftime('%Y-%m-%d')}")) def handle_dismissal(e): page.add(ft.Text(f"DatePicker dismissed")) page.add( ft.ElevatedButton( "Pick date", icon=ft.icons.CALENDAR_MONTH, on_click=lambda e: page.open( ft.DatePicker( first_date=datetime.datetime(year=2023, month=10, day=1), last_date=datetime.datetime(year=2024, month=10, day=1), on_change=handle_change, on_dismiss=handle_dismissal, ) ), ) ) ft.app(main)
The documentation does not clarify whether the first_date and last_date properties are updated by default with each execution of the application. Let's assume that we compile an app and the first_date and last_date parameters are kept as in the previous code, could this generate errors when selecting valid dates in the future?
My app is intended to scrape X (Twitter) between two specific dates. When looking to make it intuitive and easy to use (as an app already compiled and executable), reviewing the code I asked myself what would happen if the parameters first_date and last_date maintained the values assigned at the time of writing the app. If in a year, someone wanted to scrape until yesterday, could they do it? How could we ensure that the parameters are dynamic so that the timing is calculated from the time of execution?
When in doubt, I solved it this way:
import datetime import flet as ft # Crear una variable para la fecha actual de la ejecución today = datetime.datetime.now() def main(page: ft.Page): page.horizontal_alignment = ft.CrossAxisAlignment.CENTER def handle_change(e): page.add(ft.Text(f"Date changed: {e.control.value.strftime('%Y-%m-%d')}")) def handle_dismissal(e): page.add(ft.Text(f"DatePicker dismissed")) page.add( ft.ElevatedButton( "Pick date", icon=ft.icons.CALENDAR_MONTH, on_click=lambda e: page.open( ft.DatePicker( # Configuramos las variables para que un calendario válido desde hace un año a hoy y durante un año a futuro first_date=datetime.datetime(year=today.year - 1, month=today.month, day=today.day), last_date=datetime.datetime(year=today.year + 1, month=today.month, day=today.day), on_change=handle_change, on_dismiss=handle_dismissal, ) ), ) ) ft.app(main)
In this way, we ensure that regardless of the moment in which the application is executed (compiled or not), the selectable dates in the calendar will have a configurable temporal record taking the execution itself as the initial parameter.
This approach is also useful for implementing specific features that require limitations on selectable dates, such as only allowing to be selected , since it would make no sense to choose dates in the future.
For example, in my scraping app, what sense would it make to allow configurable dates in the future when the task is to collect information from the past?
The above is the detailed content of Handling DatePicker in Flet. For more information, please follow other related articles on the PHP Chinese website!