From b32d40d19628b4199a585efa15ceabfd769da51a Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Mon, 23 Feb 2026 23:00:54 +0100 Subject: [PATCH 01/71] `OAuthProvider.authorization_params` --- .../src/flet/auth/authorization_service.py | 16 ++++++++-- .../flet/src/flet/auth/oauth_provider.py | 31 +++++++++++++++++-- 2 files changed, 41 insertions(+), 6 deletions(-) diff --git a/sdk/python/packages/flet/src/flet/auth/authorization_service.py b/sdk/python/packages/flet/src/flet/auth/authorization_service.py index b636a935c3..2881a789fc 100644 --- a/sdk/python/packages/flet/src/flet/auth/authorization_service.py +++ b/sdk/python/packages/flet/src/flet/auth/authorization_service.py @@ -21,6 +21,15 @@ class AuthorizationService(Authorization): The service coordinates authorization URL generation, token exchange, token refresh, and optional user/group resolution using the configured [`OAuthProvider`][flet.auth.oauth_provider.]. + + Args: + provider: Configured [`OAuthProvider`][flet.auth.oauth_provider.] + describing OAuth endpoints, credentials, and optional user/group APIs. + fetch_user: Whether to request provider user profile information. + fetch_groups: Whether to request user groups/roles. + scope: Initial OAuth scopes. The service augments this list + with provider defaults (`provider.scopes`) and, when enabled, + provider user/group scopes. """ def __init__( @@ -93,6 +102,7 @@ def get_authorization_data(self) -> tuple[str, str]: state=self.state, code_challenge=self.provider.code_challenge, code_challenge_method=self.provider.code_challenge_method, + **self.provider.authorization_params, ) return authorization_url, self.state @@ -175,13 +185,13 @@ def __convert_token(self, t: OAuth2Token): async def __refresh_token(self): """ - Refresh access token when it is expired and refresh token is available. + Refresh the access token when it is expired and a refresh token is available. The method is a no-op when token is missing, non-expiring, not expired, or does not include a refresh token. Raises: - httpx.HTTPStatusError: If refresh request fails. + httpx.HTTPStatusError: If the refresh request fails. """ if ( @@ -221,7 +231,7 @@ async def __get_user(self): Fetch user profile from provider `user_endpoint`. Returns: - A [`User`][flet.auth.user.User] built from response payload and + A [`User`][flet.auth.user.] built from response payload and `provider.user_id_fn`. Raises: diff --git a/sdk/python/packages/flet/src/flet/auth/oauth_provider.py b/sdk/python/packages/flet/src/flet/auth/oauth_provider.py index 14cfd3df72..3ceecb9fa5 100644 --- a/sdk/python/packages/flet/src/flet/auth/oauth_provider.py +++ b/sdk/python/packages/flet/src/flet/auth/oauth_provider.py @@ -10,7 +10,29 @@ class OAuthProvider: Instances describe OAuth endpoints, client credentials, optional PKCE parameters, and optional user/group retrieval behavior used by - `AuthorizationService`. + [`AuthorizationService`][flet.auth.authorization_service.]. + + Args: + client_id: OAuth client/application ID issued by the provider. + client_secret: OAuth client secret issued by the provider. + authorization_endpoint: Authorization endpoint URL used to build the + login redirect URL. + token_endpoint: Token endpoint URL used for authorization-code and + refresh-token exchange. + redirect_url: Redirect/callback URL registered with the provider. + scopes: Base OAuth scopes always requested during login. + user_scopes: Additional scopes requested when user profile loading + is enabled. + user_endpoint: Endpoint used to fetch raw user profile + data after login. + user_id_fn: Function extracting a stable user id from + `user_endpoint` response data. + group_scopes: Additional scopes requested when group loading is enabled. + code_challenge: PKCE code challenge. + code_challenge_method: PKCE challenge method. For example, `S256`. + code_verifier: PKCE code verifier used during token exchange. + authorization_params: Extra query parameters appended to authorization + URL generation in `AuthorizationService.get_authorization_data()`. """ def __init__( @@ -28,6 +50,7 @@ def __init__( code_challenge: Optional[str] = None, code_challenge_method: Optional[str] = None, code_verifier: Optional[str] = None, + authorization_params: Optional[dict[str, str]] = None, ) -> None: self.client_id = client_id self.client_secret = client_secret @@ -39,6 +62,9 @@ def __init__( self.user_endpoint = user_endpoint self.user_id_fn = user_id_fn self.group_scopes = group_scopes if group_scopes is not None else [] + self.authorization_params = ( + authorization_params if authorization_params is not None else {} + ) self.code_challenge = code_challenge self.code_challenge_method = code_challenge_method self.code_verifier = code_verifier @@ -59,8 +85,7 @@ async def _fetch_groups(self, access_token: str) -> list[Group]: access_token: OAuth access token. Returns: - A list of [`Group`][(p).]. The base implementation returns - an empty list. + A list of [`Group`][(p).]. The base implementation returns an empty list. """ return [] From 7812fb86c1f8233715fdea8d8ed12c3555db857e Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Mon, 23 Feb 2026 23:02:05 +0100 Subject: [PATCH 02/71] `Auth0OAuthProvider.audience` --- .../auth/providers/auth0_oauth_provider.py | 31 ++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/sdk/python/packages/flet/src/flet/auth/providers/auth0_oauth_provider.py b/sdk/python/packages/flet/src/flet/auth/providers/auth0_oauth_provider.py index 5244c742b1..b82936fe40 100644 --- a/sdk/python/packages/flet/src/flet/auth/providers/auth0_oauth_provider.py +++ b/sdk/python/packages/flet/src/flet/auth/providers/auth0_oauth_provider.py @@ -1,3 +1,5 @@ +from typing import Optional + from flet.auth.oauth_provider import OAuthProvider @@ -7,11 +9,34 @@ class Auth0OAuthProvider(OAuthProvider): Configures Auth0 authorization/token endpoints and user-info retrieval via `/userinfo`, using the `sub` claim as the user id. + + Attributes: + domain: Auth0 tenant domain (without protocol), for example + `example.us.auth0.com`. + audience: Optional API identifier passed as `audience` authorization + query parameter. """ def __init__( - self, domain: str, client_id: str, client_secret: str, redirect_url: str + self, + domain: str, + client_id: str, + client_secret: str, + redirect_url: str, + audience: Optional[str] = None, ) -> None: + """ + Initialize Auth0 OAuth provider configuration. + + Args: + domain: Auth0 tenant domain (without protocol), for example, + `example.us.auth0.com`. + client_id: Auth0 application client ID. + client_secret: Auth0 application client secret. + redirect_url: Redirect/callback URL registered in Auth0. + audience: Auth0 API identifier used to request an access + token targeted for a specific API resource server. + """ super().__init__( client_id=client_id, client_secret=client_secret, @@ -23,5 +48,9 @@ def __init__( user_endpoint=f"https://{domain}/userinfo", user_id_fn=lambda u: u["sub"], group_scopes=[], + authorization_params=( + {"audience": audience} if audience is not None else None + ), ) self.domain = domain + self.audience = audience From 3860a3387c48c9c18caafedfd35c2fd047c02e27 Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Tue, 24 Feb 2026 21:26:16 +0100 Subject: [PATCH 03/71] Update version.py to include tags in git describe command --- sdk/python/packages/flet/src/flet/version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/python/packages/flet/src/flet/version.py b/sdk/python/packages/flet/src/flet/version.py index 42454323e2..5e687b6c4a 100644 --- a/sdk/python/packages/flet/src/flet/version.py +++ b/sdk/python/packages/flet/src/flet/version.py @@ -55,7 +55,7 @@ def from_git() -> Optional[str]: try: result = sp.run( - [git_cmd, "describe", "--abbrev=0"], + [git_cmd, "describe", "--tags", "--abbrev=0"], cwd=repo_root, capture_output=True, text=True, From 69cc67df99330ea496e91f96003f71c90e5e3faa Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Wed, 25 Feb 2026 00:26:11 +0100 Subject: [PATCH 04/71] add mouse cursor example --- .../controls/types/mouse_cursor/showcase.py | 47 +++++++++++++++++++ .../flet/docs/extras/macros/__init__.py | 4 +- .../packages/flet/docs/types/mousecursor.md | 17 ++++++- .../flet/src/flet/controls/core/row.py | 4 +- 4 files changed, 67 insertions(+), 5 deletions(-) create mode 100644 sdk/python/examples/controls/types/mouse_cursor/showcase.py diff --git a/sdk/python/examples/controls/types/mouse_cursor/showcase.py b/sdk/python/examples/controls/types/mouse_cursor/showcase.py new file mode 100644 index 0000000000..404405e4bd --- /dev/null +++ b/sdk/python/examples/controls/types/mouse_cursor/showcase.py @@ -0,0 +1,47 @@ +import flet as ft + + +def cursor_card(cursor: ft.MouseCursor) -> ft.GestureDetector: + return ft.GestureDetector( + mouse_cursor=cursor, + content=ft.Container( + width=250, + height=100, + padding=12, + border=ft.Border.all(1, ft.Colors.ERROR), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=ft.Column( + spacing=4, + alignment=ft.MainAxisAlignment.CENTER, + horizontal_alignment=ft.CrossAxisAlignment.CENTER, + controls=[ + ft.Text(cursor.name, weight=ft.FontWeight.BOLD), + ], + ), + ), + ) + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + page.appbar = ft.AppBar(title="MouseCursor Showcase") + page.add( + ft.Text( + "Hover each card to compare cursor styles. " + "Cursor rendering can vary by OS and browser.", + ), + ft.Row( + wrap=True, + spacing=12, + expand=True, + scroll=ft.ScrollMode.AUTO, + alignment=ft.MainAxisAlignment.CENTER, + controls=[cursor_card(cursor) for cursor in ft.MouseCursor], + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/extras/macros/__init__.py b/sdk/python/packages/flet/docs/extras/macros/__init__.py index 600f4d6969..f1d85c376c 100644 --- a/sdk/python/packages/flet/docs/extras/macros/__init__.py +++ b/sdk/python/packages/flet/docs/extras/macros/__init__.py @@ -116,12 +116,14 @@ def class_summary( return "\n\n".join(blocks) + "\n" @env.macro - def class_members(class_name): + def class_members(class_name, **extra_options): options = { "extra": { "show_children": True, }, } + if extra_options: + options.update(extra_options) return render_directive(class_name, options) + "\n" @env.macro diff --git a/sdk/python/packages/flet/docs/types/mousecursor.md b/sdk/python/packages/flet/docs/types/mousecursor.md index 33fe257a06..377a886920 100644 --- a/sdk/python/packages/flet/docs/types/mousecursor.md +++ b/sdk/python/packages/flet/docs/types/mousecursor.md @@ -1 +1,16 @@ -{{ class_all_options("flet.MouseCursor", separate_signature=False) }} +--- +class_name: flet.MouseCursor +examples: ../../examples/controls/types/mouse_cursor +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} diff --git a/sdk/python/packages/flet/src/flet/controls/core/row.py b/sdk/python/packages/flet/src/flet/controls/core/row.py index e629db87a4..dacc85c6b4 100644 --- a/sdk/python/packages/flet/src/flet/controls/core/row.py +++ b/sdk/python/packages/flet/src/flet/controls/core/row.py @@ -20,7 +20,6 @@ class Row(LayoutControl, ScrollableControl, AdaptiveControl): Example: ```python - ( ft.Row( controls=[ ft.Card( @@ -34,8 +33,7 @@ class Row(LayoutControl, ScrollableControl, AdaptiveControl): ) for i in range(1, 6) ], - ), - ) + ) ``` """ From f84782429ca6aa3a8d43da507e6741dc6f7b151e Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Wed, 25 Feb 2026 00:40:13 +0100 Subject: [PATCH 05/71] Fix link to `FilePickerFile.path` in filepicker.md --- sdk/python/packages/flet/docs/services/filepicker.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/python/packages/flet/docs/services/filepicker.md b/sdk/python/packages/flet/docs/services/filepicker.md index d7af03068d..501401d93f 100644 --- a/sdk/python/packages/flet/docs/services/filepicker.md +++ b/sdk/python/packages/flet/docs/services/filepicker.md @@ -111,7 +111,7 @@ and [upload][flet.FilePicker.upload] app. Use [`pick_files()`][flet.FilePicker.pick_files] with `with_data=True` when you need file contents directly, such as in web apps where -[`FilePickerFile.path`][flet.FilePickerFile.] is not available. +[`FilePickerFile.path`][flet.FilePickerFile.path] is not available. ```python --8<-- "{{ examples }}/pick_and_save_text_content.py" From 1bea77bd34f2d47abff1ae054526a80622187da9 Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Wed, 25 Feb 2026 03:10:41 +0100 Subject: [PATCH 06/71] Improve Flutter dependency version handling in CI for best pub.dev compatibility --- .github/scripts/patch_pubspec_version.py | 33 ++++++++++++++++-------- .github/workflows/ci.yml | 21 +++++++++++++++ 2 files changed, 43 insertions(+), 11 deletions(-) diff --git a/.github/scripts/patch_pubspec_version.py b/.github/scripts/patch_pubspec_version.py index 4f1b08c8d1..8d3017b71a 100644 --- a/.github/scripts/patch_pubspec_version.py +++ b/.github/scripts/patch_pubspec_version.py @@ -4,20 +4,22 @@ """ Patches a Dart/Flutter `pubspec.yaml` file to: - - Set the `version:` field to a given value. + - Optionally set the `version:` field to a given value. - Pin selected dependencies in the `dependencies:` section to the same version. Dependencies patched: - flet Usage: - uv run patch_pubspec_version.py + uv run patch_pubspec_version.py [--dependencies-only] Arguments: - pubspec Path to the pubspec.yaml file to patch. - version Version string to set. + pubspec Path to the pubspec.yaml file to patch. + version Version string to set. + --dependencies-only Patch only dependencies without changing package `version:`. """ +import argparse import sys from pathlib import Path @@ -25,12 +27,20 @@ def main() -> None: - if not (len(sys.argv) >= 3): - print("Usage: uv run patch_pubspec_version.py ") - sys.exit(1) - - pubspec_path = Path(sys.argv[1]).resolve() - version = sys.argv[2] + parser = argparse.ArgumentParser( + description="Patch pubspec version and/or selected dependencies." + ) + parser.add_argument("pubspec", help="Path to pubspec.yaml") + parser.add_argument("version", help="Version string to apply") + parser.add_argument( + "--dependencies-only", + action="store_true", + help="Patch only dependencies without changing package version.", + ) + args = parser.parse_args() + + pubspec_path = Path(args.pubspec).resolve() + version = args.version if not pubspec_path.exists(): print(f"Error: File not found: {pubspec_path}") @@ -42,7 +52,8 @@ def main() -> None: data = yaml.safe_load(f) # patch version - data["version"] = version + if not args.dependencies_only: + data["version"] = version # patch dependencies for dep in ["flet"]: diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 00709bd817..d5545ba205 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -700,9 +700,13 @@ jobs: - build_flet_package env: PYPI_VER: ${{ needs.build_flet_package.outputs.PYPI_VER }} + PKG_VER: ${{ needs.build_flet_package.outputs.PKG_VER }} steps: - name: Checkout repository uses: actions/checkout@v4 + with: + fetch-depth: 0 + fetch-tags: true - name: Setup uv uses: astral-sh/setup-uv@v6 @@ -741,12 +745,29 @@ jobs: source "$SCRIPTS/common.sh" + # Keep Flutter extension dependencies resolvable on pub.dev: + # - tag build: use the just-released flet version for this release, PKG_VER + # - non-tag build: use latest released flet tag + if [[ "${GITHUB_REF_TYPE:-}" == "tag" ]]; then + FLET_PUB_VER="$PKG_VER" + else + LATEST_TAG="$(git tag --list 'v[0-9]*.[0-9]*.[0-9]*' --sort=-v:refname | head -n 1)" + if [[ -z "$LATEST_TAG" ]]; then + echo "ERROR: Could not determine latest release tag for flet." + exit 1 + fi + FLET_PUB_VER="${LATEST_TAG#v}" + fi + echo "Using flet Flutter dependency version: $FLET_PUB_VER" + for PACKAGE in "${PACKAGES[@]}"; do echo "::group::Processing ${PACKAGE}" FLUTTER_PACKAGE="${PACKAGE//-/_}" FLUTTER_DIR="${SDK_PYTHON}/packages/${PACKAGE}/src/flutter/${FLUTTER_PACKAGE}" pushd "$FLUTTER_DIR" + # Patch only the flet dependency; keep extension package version unchanged. + patch_pubspec_version "${FLUTTER_DIR}/pubspec.yaml" "$FLET_PUB_VER" --dependencies-only flutter pub get dart analyze popd From 939dc345849181555d4eb79e6a638cacb6870d0c Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Thu, 26 Feb 2026 10:17:05 +0100 Subject: [PATCH 07/71] Refactor video.dart to standardize property naming conventions and event handling --- .../src/flutter/flet_video/lib/src/video.dart | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/sdk/python/packages/flet-video/src/flutter/flet_video/lib/src/video.dart b/sdk/python/packages/flet-video/src/flutter/flet_video/lib/src/video.dart index fa8786d1bc..ad5a0a217e 100644 --- a/sdk/python/packages/flet-video/src/flutter/flet_video/lib/src/video.dart +++ b/sdk/python/packages/flet-video/src/flutter/flet_video/lib/src/video.dart @@ -50,8 +50,8 @@ class _VideoControlState extends State with FletStoreMixin { title: control.getString("title", "flet-video")!, muted: control.getBool("muted", false)!, pitch: control.getDouble("pitch") != null, - ready: control.getBool("on_loaded", false)! - ? () => control.triggerEvent("loaded") + ready: control.hasEventHandler("load") + ? () => control.triggerEvent("load") : null, ); @@ -232,7 +232,7 @@ class _VideoControlState extends State with FletStoreMixin { final prevShufflePlaylist = widget.control.getBool("_shuffle_playlist"); final PlaylistMode? prevPlaylistMode = widget.control.get("_playlist_mode"); final SubtitleTrack? prevSubtitleTrack = - widget.control.get("_subtitleTrack"); + widget.control.get("_subtitle_track"); final prevFullscreen = widget.control.getBool("_fullscreen", false)!; Video video = Video( @@ -273,13 +273,13 @@ class _VideoControlState extends State with FletStoreMixin { // playbackRate if (playbackRate != null && playbackRate != prevPlaybackRate) { widget.control - .updateProperties({"_playbackRate": playbackRate}, python: false); + .updateProperties({"_playback_rate": playbackRate}, python: false); await _player.setRate(playbackRate); } // shufflePlaylist if (shufflePlaylist != null && shufflePlaylist != prevShufflePlaylist) { - widget.control.updateProperties({"_shufflePlaylist": shufflePlaylist}, + widget.control.updateProperties({"_shuffle_playlist": shufflePlaylist}, python: false); await _player.setShuffle(shufflePlaylist); } @@ -287,14 +287,14 @@ class _VideoControlState extends State with FletStoreMixin { // playlistMode if (playlistMode != null && playlistMode != prevPlaylistMode) { widget.control - .updateProperties({"_playlistMode": playlistMode}, python: false); + .updateProperties({"_playlist_mode": playlistMode}, python: false); await _player.setPlaylistMode(playlistMode); } // subtitleTrack if (subtitleTrack != null && subtitleTrack != prevSubtitleTrack) { - widget.control - .updateProperties({"_subtitleTrack": subtitleTrack}, python: false); + widget.control.updateProperties({"_subtitle_track": subtitleTrack}, + python: false); await _player.setSubtitleTrack(subtitleTrack); } From ac9b99be95b833b2fb78b3c1302091f1601154ae Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Thu, 26 Feb 2026 10:59:55 +0100 Subject: [PATCH 08/71] move auth types in dedicated folder --- .../docs/types/auth/auth0oauthprovider.md | 1 + .../docs/types/{ => auth}/authorization.md | 0 .../docs/types/auth/authorizationservice.md | 1 + .../types/{ => auth}/azureoauthprovider.md | 0 .../types/{ => auth}/githuboauthprovider.md | 0 .../types/{ => auth}/googleoauthprovider.md | 0 .../flet/docs/types/{ => auth}/group.md | 0 .../oauthprovider/index.md} | 0 .../flet/docs/types/{ => auth}/oauthtoken.md | 0 .../flet/docs/types/{ => auth}/user.md | 0 .../flet/docs/types/auth0oauthprovider.md | 1 - sdk/python/packages/flet/mkdocs.yml | 23 ++++++++++--------- .../packages/flet/src/flet/auth/__init__.py | 20 +++++++++++++++- .../flet/src/flet/auth/authorization.py | 2 ++ .../src/flet/auth/authorization_service.py | 14 ++++++----- .../packages/flet/src/flet/auth/group.py | 2 ++ .../flet/src/flet/auth/oauth_provider.py | 4 ++-- .../flet/src/flet/auth/oauth_token.py | 2 ++ .../auth/providers/auth0_oauth_provider.py | 2 ++ .../auth/providers/azure_oauth_provider.py | 2 ++ .../auth/providers/github_oauth_provider.py | 2 ++ .../auth/providers/google_oauth_provider.py | 2 ++ .../packages/flet/src/flet/auth/user.py | 2 ++ 23 files changed, 59 insertions(+), 21 deletions(-) create mode 100644 sdk/python/packages/flet/docs/types/auth/auth0oauthprovider.md rename sdk/python/packages/flet/docs/types/{ => auth}/authorization.md (100%) create mode 100644 sdk/python/packages/flet/docs/types/auth/authorizationservice.md rename sdk/python/packages/flet/docs/types/{ => auth}/azureoauthprovider.md (100%) rename sdk/python/packages/flet/docs/types/{ => auth}/githuboauthprovider.md (100%) rename sdk/python/packages/flet/docs/types/{ => auth}/googleoauthprovider.md (100%) rename sdk/python/packages/flet/docs/types/{ => auth}/group.md (100%) rename sdk/python/packages/flet/docs/types/{oauthprovider.md => auth/oauthprovider/index.md} (100%) rename sdk/python/packages/flet/docs/types/{ => auth}/oauthtoken.md (100%) rename sdk/python/packages/flet/docs/types/{ => auth}/user.md (100%) delete mode 100644 sdk/python/packages/flet/docs/types/auth0oauthprovider.md diff --git a/sdk/python/packages/flet/docs/types/auth/auth0oauthprovider.md b/sdk/python/packages/flet/docs/types/auth/auth0oauthprovider.md new file mode 100644 index 0000000000..db6402ac2a --- /dev/null +++ b/sdk/python/packages/flet/docs/types/auth/auth0oauthprovider.md @@ -0,0 +1 @@ +{{ class_all_options("flet.auth.Auth0OAuthProvider") }} diff --git a/sdk/python/packages/flet/docs/types/authorization.md b/sdk/python/packages/flet/docs/types/auth/authorization.md similarity index 100% rename from sdk/python/packages/flet/docs/types/authorization.md rename to sdk/python/packages/flet/docs/types/auth/authorization.md diff --git a/sdk/python/packages/flet/docs/types/auth/authorizationservice.md b/sdk/python/packages/flet/docs/types/auth/authorizationservice.md new file mode 100644 index 0000000000..273bc7d069 --- /dev/null +++ b/sdk/python/packages/flet/docs/types/auth/authorizationservice.md @@ -0,0 +1 @@ +{{ class_all_options("flet.auth.AuthorizationService") }} diff --git a/sdk/python/packages/flet/docs/types/azureoauthprovider.md b/sdk/python/packages/flet/docs/types/auth/azureoauthprovider.md similarity index 100% rename from sdk/python/packages/flet/docs/types/azureoauthprovider.md rename to sdk/python/packages/flet/docs/types/auth/azureoauthprovider.md diff --git a/sdk/python/packages/flet/docs/types/githuboauthprovider.md b/sdk/python/packages/flet/docs/types/auth/githuboauthprovider.md similarity index 100% rename from sdk/python/packages/flet/docs/types/githuboauthprovider.md rename to sdk/python/packages/flet/docs/types/auth/githuboauthprovider.md diff --git a/sdk/python/packages/flet/docs/types/googleoauthprovider.md b/sdk/python/packages/flet/docs/types/auth/googleoauthprovider.md similarity index 100% rename from sdk/python/packages/flet/docs/types/googleoauthprovider.md rename to sdk/python/packages/flet/docs/types/auth/googleoauthprovider.md diff --git a/sdk/python/packages/flet/docs/types/group.md b/sdk/python/packages/flet/docs/types/auth/group.md similarity index 100% rename from sdk/python/packages/flet/docs/types/group.md rename to sdk/python/packages/flet/docs/types/auth/group.md diff --git a/sdk/python/packages/flet/docs/types/oauthprovider.md b/sdk/python/packages/flet/docs/types/auth/oauthprovider/index.md similarity index 100% rename from sdk/python/packages/flet/docs/types/oauthprovider.md rename to sdk/python/packages/flet/docs/types/auth/oauthprovider/index.md diff --git a/sdk/python/packages/flet/docs/types/oauthtoken.md b/sdk/python/packages/flet/docs/types/auth/oauthtoken.md similarity index 100% rename from sdk/python/packages/flet/docs/types/oauthtoken.md rename to sdk/python/packages/flet/docs/types/auth/oauthtoken.md diff --git a/sdk/python/packages/flet/docs/types/user.md b/sdk/python/packages/flet/docs/types/auth/user.md similarity index 100% rename from sdk/python/packages/flet/docs/types/user.md rename to sdk/python/packages/flet/docs/types/auth/user.md diff --git a/sdk/python/packages/flet/docs/types/auth0oauthprovider.md b/sdk/python/packages/flet/docs/types/auth0oauthprovider.md deleted file mode 100644 index df5a4931dd..0000000000 --- a/sdk/python/packages/flet/docs/types/auth0oauthprovider.md +++ /dev/null @@ -1 +0,0 @@ -{{ class_all_options("flet.auth.providers.Auth0OAuthProvider") }} diff --git a/sdk/python/packages/flet/mkdocs.yml b/sdk/python/packages/flet/mkdocs.yml index be2ea4e162..2fcf29aaba 100644 --- a/sdk/python/packages/flet/mkdocs.yml +++ b/sdk/python/packages/flet/mkdocs.yml @@ -511,6 +511,18 @@ nav: - Types: - Overview: types/index.md - Aliases: types/aliases.md + - Authentication: + - Authorization: types/auth/authorization.md + - AuthorizationService: types/auth/authorizationservice.md + - Group: types/auth/group.md + - OAuthToken: types/auth/oauthtoken.md + - OAuthProvider: + - OAuthProvider: types/auth/oauthprovider/index.md + - Auth0OAuthProvider: types/auth/auth0oauthprovider.md + - AzureOAuthProvider: types/auth/azureoauthprovider.md + - GitHubOAuthProvider: types/auth/githuboauthprovider.md + - GoogleOAuthProvider: types/auth/googleoauthprovider.md + - User: types/auth/user.md - Base Controls: - AdaptiveControl: controls/adaptivecontrol.md - BaseControl: controls/basecontrol.md @@ -525,17 +537,6 @@ nav: - Classes: - Ads: - AdRequest: ads/types/adrequest.md - - Authentication: - - Authorization: types/authorization.md - - OAuthProvider: types/oauthprovider.md - - OAuthToken: types/oauthtoken.md - - User: types/user.md - - Group: types/group.md - - Providers: - - Auth0OAuthProvider: types/auth0oauthprovider.md - - AzureOAuthProvider: types/azureoauthprovider.md - - GitHubOAuthProvider: types/githuboauthprovider.md - - GoogleOAuthProvider: types/googleoauthprovider.md - Alignment: types/alignment.md - AndroidBuildVersion: types/androidbuildversion.md - Animation: types/animation.md diff --git a/sdk/python/packages/flet/src/flet/auth/__init__.py b/sdk/python/packages/flet/src/flet/auth/__init__.py index e146fcbfff..ec47ca6835 100644 --- a/sdk/python/packages/flet/src/flet/auth/__init__.py +++ b/sdk/python/packages/flet/src/flet/auth/__init__.py @@ -1,7 +1,25 @@ from flet.auth.authorization import Authorization +from flet.auth.authorization_service import AuthorizationService from flet.auth.group import Group from flet.auth.oauth_provider import OAuthProvider from flet.auth.oauth_token import OAuthToken +from flet.auth.providers import ( + Auth0OAuthProvider, + AzureOAuthProvider, + GitHubOAuthProvider, + GoogleOAuthProvider, +) from flet.auth.user import User -__all__ = ["Authorization", "Group", "OAuthProvider", "OAuthToken", "User"] +__all__ = [ + "Auth0OAuthProvider", + "Authorization", + "AuthorizationService", + "AzureOAuthProvider", + "GitHubOAuthProvider", + "GoogleOAuthProvider", + "Group", + "OAuthProvider", + "OAuthToken", + "User", +] diff --git a/sdk/python/packages/flet/src/flet/auth/authorization.py b/sdk/python/packages/flet/src/flet/auth/authorization.py index 38f14e243f..e4e845418b 100644 --- a/sdk/python/packages/flet/src/flet/auth/authorization.py +++ b/sdk/python/packages/flet/src/flet/auth/authorization.py @@ -1,5 +1,7 @@ from typing import Any +__all__ = ["Authorization"] + class Authorization: """ diff --git a/sdk/python/packages/flet/src/flet/auth/authorization_service.py b/sdk/python/packages/flet/src/flet/auth/authorization_service.py index 2881a789fc..455da78a0b 100644 --- a/sdk/python/packages/flet/src/flet/auth/authorization_service.py +++ b/sdk/python/packages/flet/src/flet/auth/authorization_service.py @@ -13,6 +13,8 @@ from flet.auth.user import User from flet.version import flet_version +__all__ = ["AuthorizationService"] + class AuthorizationService(Authorization): """ @@ -20,10 +22,10 @@ class AuthorizationService(Authorization): The service coordinates authorization URL generation, token exchange, token refresh, and optional user/group resolution using the configured - [`OAuthProvider`][flet.auth.oauth_provider.]. + [`OAuthProvider`][(p).oauth_provider.]. Args: - provider: Configured [`OAuthProvider`][flet.auth.oauth_provider.] + provider: Configured [`OAuthProvider`][(p).oauth_provider.] describing OAuth endpoints, credentials, and optional user/group APIs. fetch_user: Whether to request provider user profile information. fetch_groups: Whether to request user groups/roles. @@ -66,7 +68,7 @@ async def dehydrate_token(self, saved_token: str): Args: saved_token: JSON-serialized token data produced by - [`OAuthToken.to_json()`][flet.auth.oauth_token.OAuthToken.to_json]. + [`OAuthToken.to_json()`][(p).oauth_token.OAuthToken.to_json]. """ self.__token = OAuthToken.from_json(saved_token) @@ -78,7 +80,7 @@ async def get_token(self): Return current token after applying refresh logic when required. Returns: - Current [`OAuthToken`][flet.auth.oauth_token.], or `None` + Current [`OAuthToken`][(p).oauth_token.], or `None` if no token is available yet. """ @@ -165,7 +167,7 @@ async def __fetch_user_and_groups(self): def __convert_token(self, t: OAuth2Token): """ - Convert oauthlib token mapping to [`OAuthToken`][flet.auth.oauth_token.]. + Convert oauthlib token mapping to [`OAuthToken`][(p).oauth_token.]. Args: t: Token dictionary returned by oauthlib client parsing. @@ -231,7 +233,7 @@ async def __get_user(self): Fetch user profile from provider `user_endpoint`. Returns: - A [`User`][flet.auth.user.] built from response payload and + A [`User`][(p).user.] built from response payload and `provider.user_id_fn`. Raises: diff --git a/sdk/python/packages/flet/src/flet/auth/group.py b/sdk/python/packages/flet/src/flet/auth/group.py index f18c3fb0be..5f7ac7ac17 100644 --- a/sdk/python/packages/flet/src/flet/auth/group.py +++ b/sdk/python/packages/flet/src/flet/auth/group.py @@ -1,5 +1,7 @@ from typing import Any +__all__ = ["Group"] + class Group(dict): """ diff --git a/sdk/python/packages/flet/src/flet/auth/oauth_provider.py b/sdk/python/packages/flet/src/flet/auth/oauth_provider.py index 3ceecb9fa5..81660c4a70 100644 --- a/sdk/python/packages/flet/src/flet/auth/oauth_provider.py +++ b/sdk/python/packages/flet/src/flet/auth/oauth_provider.py @@ -10,7 +10,7 @@ class OAuthProvider: Instances describe OAuth endpoints, client credentials, optional PKCE parameters, and optional user/group retrieval behavior used by - [`AuthorizationService`][flet.auth.authorization_service.]. + [`AuthorizationService`][(p).]. Args: client_id: OAuth client/application ID issued by the provider. @@ -32,7 +32,7 @@ class OAuthProvider: code_challenge_method: PKCE challenge method. For example, `S256`. code_verifier: PKCE code verifier used during token exchange. authorization_params: Extra query parameters appended to authorization - URL generation in `AuthorizationService.get_authorization_data()`. + URL generation by the OAuth authorization service. """ def __init__( diff --git a/sdk/python/packages/flet/src/flet/auth/oauth_token.py b/sdk/python/packages/flet/src/flet/auth/oauth_token.py index 28a2c37708..a7cd47e448 100644 --- a/sdk/python/packages/flet/src/flet/auth/oauth_token.py +++ b/sdk/python/packages/flet/src/flet/auth/oauth_token.py @@ -3,6 +3,8 @@ from flet.controls.embed_json_encoder import EmbedJsonEncoder +__all__ = ["OAuthToken"] + class OAuthToken: """ diff --git a/sdk/python/packages/flet/src/flet/auth/providers/auth0_oauth_provider.py b/sdk/python/packages/flet/src/flet/auth/providers/auth0_oauth_provider.py index b82936fe40..37a790f0d9 100644 --- a/sdk/python/packages/flet/src/flet/auth/providers/auth0_oauth_provider.py +++ b/sdk/python/packages/flet/src/flet/auth/providers/auth0_oauth_provider.py @@ -2,6 +2,8 @@ from flet.auth.oauth_provider import OAuthProvider +__all__ = ["Auth0OAuthProvider"] + class Auth0OAuthProvider(OAuthProvider): """ diff --git a/sdk/python/packages/flet/src/flet/auth/providers/azure_oauth_provider.py b/sdk/python/packages/flet/src/flet/auth/providers/azure_oauth_provider.py index e270391252..e83481fca4 100644 --- a/sdk/python/packages/flet/src/flet/auth/providers/azure_oauth_provider.py +++ b/sdk/python/packages/flet/src/flet/auth/providers/azure_oauth_provider.py @@ -2,6 +2,8 @@ from flet.auth.oauth_provider import OAuthProvider +__all__ = ["AzureOAuthProvider"] + class AzureOAuthProvider(OAuthProvider): """ diff --git a/sdk/python/packages/flet/src/flet/auth/providers/github_oauth_provider.py b/sdk/python/packages/flet/src/flet/auth/providers/github_oauth_provider.py index 59169d518a..b9f3f80fbb 100644 --- a/sdk/python/packages/flet/src/flet/auth/providers/github_oauth_provider.py +++ b/sdk/python/packages/flet/src/flet/auth/providers/github_oauth_provider.py @@ -8,6 +8,8 @@ from flet.auth.user import User from flet.version import flet_version +__all__ = ["GitHubOAuthProvider"] + class GitHubOAuthProvider(OAuthProvider): """ diff --git a/sdk/python/packages/flet/src/flet/auth/providers/google_oauth_provider.py b/sdk/python/packages/flet/src/flet/auth/providers/google_oauth_provider.py index e7ddf8f90e..d49af6e9bb 100644 --- a/sdk/python/packages/flet/src/flet/auth/providers/google_oauth_provider.py +++ b/sdk/python/packages/flet/src/flet/auth/providers/google_oauth_provider.py @@ -1,5 +1,7 @@ from flet.auth.oauth_provider import OAuthProvider +__all__ = ["GoogleOAuthProvider"] + class GoogleOAuthProvider(OAuthProvider): """ diff --git a/sdk/python/packages/flet/src/flet/auth/user.py b/sdk/python/packages/flet/src/flet/auth/user.py index 4590102be2..f10563db98 100644 --- a/sdk/python/packages/flet/src/flet/auth/user.py +++ b/sdk/python/packages/flet/src/flet/auth/user.py @@ -3,6 +3,8 @@ if TYPE_CHECKING: from flet.auth.group import Group +__all__ = ["User"] + class User(dict): """ From b93da0f7c9e9db91b1cc86e869742f2ad4f2c31a Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Thu, 26 Feb 2026 11:34:27 +0100 Subject: [PATCH 09/71] add ClipBehavior showcase example and update documentation --- .../controls/types/clip_behavior/showcase.py | 80 +++++++++++++++++++ .../packages/flet/docs/types/clipbehavior.md | 17 +++- 2 files changed, 96 insertions(+), 1 deletion(-) create mode 100644 sdk/python/examples/controls/types/clip_behavior/showcase.py diff --git a/sdk/python/examples/controls/types/clip_behavior/showcase.py b/sdk/python/examples/controls/types/clip_behavior/showcase.py new file mode 100644 index 0000000000..c84fb3dbc6 --- /dev/null +++ b/sdk/python/examples/controls/types/clip_behavior/showcase.py @@ -0,0 +1,80 @@ +import flet as ft + + +def clip_preview(clip_behavior: ft.ClipBehavior) -> ft.Container: + return ft.Container( + width=240, + height=130, + border=ft.Border.all(2, ft.Colors.OUTLINE), + border_radius=10, + bgcolor=ft.Colors.SURFACE, + content=ft.Stack( + clip_behavior=clip_behavior, + controls=[ + ft.Container( + width=160, + height=70, + left=-25, + top=30, + bgcolor=ft.Colors.PRIMARY_CONTAINER, + border_radius=16, + ), + ft.Container( + width=90, + height=90, + left=150, + top=-20, + bgcolor=ft.Colors.TERTIARY_CONTAINER, + border_radius=45, + ), + ft.Container( + width=90, + height=90, + left=70, + top=22, + bgcolor=ft.Colors.SECONDARY, + border_radius=45, + alignment=ft.Alignment.CENTER, + content=ft.Icon(ft.Icons.CROP, color=ft.Colors.WHITE), + ), + ], + ), + ) + + +def clip_card(clip_behavior: ft.ClipBehavior) -> ft.Container: + return ft.Container( + width=280, + padding=12, + border=ft.Border.all(1, ft.Colors.ERROR), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=ft.Column( + spacing=8, + controls=[ + ft.Text(clip_behavior.name, weight=ft.FontWeight.BOLD), + clip_preview(clip_behavior), + ], + ), + ) + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + page.appbar = ft.AppBar(title="ClipBehavior Showcase") + page.add( + ft.Text("Compare how overflow is clipped for each ClipBehavior value."), + ft.Row( + wrap=True, + spacing=12, + expand=True, + scroll=ft.ScrollMode.AUTO, + alignment=ft.MainAxisAlignment.CENTER, + controls=[clip_card(cb) for cb in ft.ClipBehavior], + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/clipbehavior.md b/sdk/python/packages/flet/docs/types/clipbehavior.md index 89a9f53d8b..4449b82a89 100644 --- a/sdk/python/packages/flet/docs/types/clipbehavior.md +++ b/sdk/python/packages/flet/docs/types/clipbehavior.md @@ -1 +1,16 @@ -{{ class_all_options("flet.ClipBehavior", separate_signature=False) }} +--- +class_name: flet.ClipBehavior +examples: ../../examples/controls/types/clip_behavior +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} From 01e064ca23df4ac5b975ff211d073c7435be8065 Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Thu, 26 Feb 2026 11:36:45 +0100 Subject: [PATCH 10/71] add TextAlign showcase example and update documentation --- .../controls/types/text_align/showcase.py | 50 +++++++++++++++++++ .../packages/flet/docs/types/textalign.md | 17 ++++++- 2 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 sdk/python/examples/controls/types/text_align/showcase.py diff --git a/sdk/python/examples/controls/types/text_align/showcase.py b/sdk/python/examples/controls/types/text_align/showcase.py new file mode 100644 index 0000000000..e528350f48 --- /dev/null +++ b/sdk/python/examples/controls/types/text_align/showcase.py @@ -0,0 +1,50 @@ +import flet as ft + + +def align_card(text_align: ft.TextAlign) -> ft.Container: + return ft.Container( + width=280, + padding=12, + border=ft.Border.all(1, ft.Colors.ERROR), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=ft.Column( + spacing=8, + controls=[ + ft.Text(text_align.name, weight=ft.FontWeight.BOLD), + ft.Container( + width=240, + height=130, + padding=10, + border=ft.Border.all(1, ft.Colors.OUTLINE), + border_radius=8, + bgcolor=ft.Colors.SURFACE, + content=ft.Text( + text_align=text_align, + value="Flet helps you build cross-platform Python apps from one codebase.", # noqa: E501 + ), + ), + ], + ), + ) + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + page.appbar = ft.AppBar(title="TextAlign Showcase") + page.add( + ft.Text("Compare horizontal text alignment modes in the same text block."), + ft.Row( + wrap=True, + spacing=12, + expand=True, + scroll=ft.ScrollMode.AUTO, + alignment=ft.MainAxisAlignment.CENTER, + controls=[align_card(text_align) for text_align in ft.TextAlign], + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/textalign.md b/sdk/python/packages/flet/docs/types/textalign.md index 6f7718f545..5d6f86a0a6 100644 --- a/sdk/python/packages/flet/docs/types/textalign.md +++ b/sdk/python/packages/flet/docs/types/textalign.md @@ -1 +1,16 @@ -{{ class_all_options("flet.TextAlign", separate_signature=False) }} +--- +class_name: flet.TextAlign +examples: ../../examples/controls/types/text_align +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} From 8d1debdf5be61de2b3ad955a0775cc3a30893433 Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Thu, 26 Feb 2026 11:37:43 +0100 Subject: [PATCH 11/71] add StrokeCap showcase example and update documentation --- .../controls/types/stroke_cap/showcase.py | 70 +++++++++++++++++++ .../packages/flet/docs/types/strokecap.md | 17 ++++- 2 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 sdk/python/examples/controls/types/stroke_cap/showcase.py diff --git a/sdk/python/examples/controls/types/stroke_cap/showcase.py b/sdk/python/examples/controls/types/stroke_cap/showcase.py new file mode 100644 index 0000000000..f17a7e452a --- /dev/null +++ b/sdk/python/examples/controls/types/stroke_cap/showcase.py @@ -0,0 +1,70 @@ +import flet as ft +import flet.canvas as cv + + +def cap_card(stroke_cap: ft.StrokeCap) -> ft.Container: + return ft.Container( + width=280, + padding=12, + border=ft.Border.all(1, ft.Colors.ERROR), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=ft.Column( + spacing=8, + controls=[ + ft.Text(stroke_cap.name, weight=ft.FontWeight.BOLD), + cv.Canvas( + width=240, + height=90, + shapes=[ + cv.Line( + x1=40, + y1=45, + x2=200, + y2=45, + paint=ft.Paint( + stroke_width=24, + color=ft.Colors.PRIMARY, + stroke_cap=stroke_cap, + ), + ), + cv.Line( + x1=40, + y1=16, + x2=40, + y2=74, + paint=ft.Paint(stroke_width=2, color=ft.Colors.ERROR), + ), + cv.Line( + x1=200, + y1=16, + x2=200, + y2=74, + paint=ft.Paint(stroke_width=2, color=ft.Colors.ERROR), + ), + ], + ), + ], + ), + ) + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + page.appbar = ft.AppBar(title="StrokeCap Showcase") + page.add( + ft.Text("Compare line endings for each StrokeCap value."), + ft.Row( + wrap=True, + spacing=12, + expand=True, + scroll=ft.ScrollMode.AUTO, + alignment=ft.MainAxisAlignment.CENTER, + controls=[cap_card(stroke_cap) for stroke_cap in ft.StrokeCap], + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/strokecap.md b/sdk/python/packages/flet/docs/types/strokecap.md index 217dbc312a..15e3f96c61 100644 --- a/sdk/python/packages/flet/docs/types/strokecap.md +++ b/sdk/python/packages/flet/docs/types/strokecap.md @@ -1 +1,16 @@ -{{ class_all_options("flet.StrokeCap", separate_signature=False) }} +--- +class_name: flet.StrokeCap +examples: ../../examples/controls/types/stroke_cap +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} From d7921827429948a3ccc677211c970101a19b32ce Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Thu, 26 Feb 2026 11:38:18 +0100 Subject: [PATCH 12/71] add StrokeJoin showcase example and update documentation --- .../controls/types/stroke_join/showcase.py | 59 +++++++++++++++++++ .../packages/flet/docs/types/strokejoin.md | 17 +++++- 2 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 sdk/python/examples/controls/types/stroke_join/showcase.py diff --git a/sdk/python/examples/controls/types/stroke_join/showcase.py b/sdk/python/examples/controls/types/stroke_join/showcase.py new file mode 100644 index 0000000000..340b56ee3b --- /dev/null +++ b/sdk/python/examples/controls/types/stroke_join/showcase.py @@ -0,0 +1,59 @@ +import flet as ft +import flet.canvas as cv + + +def join_card(stroke_join: ft.StrokeJoin) -> ft.Container: + return ft.Container( + width=280, + padding=12, + border=ft.Border.all(1, ft.Colors.ERROR), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=ft.Column( + spacing=8, + controls=[ + ft.Text(stroke_join.name, weight=ft.FontWeight.BOLD), + cv.Canvas( + width=240, + height=120, + shapes=[ + cv.Path( + elements=[ + cv.Path.MoveTo(40, 95), + cv.Path.LineTo(120, 25), + cv.Path.LineTo(200, 95), + ], + paint=ft.Paint( + style=ft.PaintingStyle.STROKE, + stroke_width=24, + color=ft.Colors.PRIMARY, + stroke_cap=ft.StrokeCap.BUTT, + stroke_join=stroke_join, + ), + ) + ], + ), + ], + ), + ) + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + page.appbar = ft.AppBar(title="StrokeJoin Showcase") + page.add( + ft.Text("Compare corner rendering for each StrokeJoin value."), + ft.Row( + wrap=True, + spacing=12, + expand=True, + scroll=ft.ScrollMode.AUTO, + alignment=ft.MainAxisAlignment.CENTER, + controls=[join_card(stroke_join) for stroke_join in ft.StrokeJoin], + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/strokejoin.md b/sdk/python/packages/flet/docs/types/strokejoin.md index b5a7804454..569f03b83f 100644 --- a/sdk/python/packages/flet/docs/types/strokejoin.md +++ b/sdk/python/packages/flet/docs/types/strokejoin.md @@ -1 +1,16 @@ -{{ class_all_options("flet.StrokeJoin", separate_signature=False) }} +--- +class_name: flet.StrokeJoin +examples: ../../examples/controls/types/stroke_join +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} From 62f40d2d626523efc89dc027b1520f768b3d34bc Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Thu, 26 Feb 2026 11:41:08 +0100 Subject: [PATCH 13/71] add FloatingActionButtonLocation showcase example and update documentation --- .../showcase.py | 66 +++++++++++++++++++ .../types/floatingactionbuttonlocation.md | 17 ++++- 2 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 sdk/python/examples/controls/types/floating_action_button_location/showcase.py diff --git a/sdk/python/examples/controls/types/floating_action_button_location/showcase.py b/sdk/python/examples/controls/types/floating_action_button_location/showcase.py new file mode 100644 index 0000000000..906510adfc --- /dev/null +++ b/sdk/python/examples/controls/types/floating_action_button_location/showcase.py @@ -0,0 +1,66 @@ +import flet as ft + + +def location_card(location: ft.FloatingActionButtonLocation) -> ft.Container: + mini = location.name.startswith("MINI_") + return ft.Container( + width=300, + padding=12, + border=ft.Border.all(1, ft.Colors.ERROR), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=ft.Column( + spacing=8, + controls=[ + ft.Text(location.name, weight=ft.FontWeight.BOLD), + ft.Pagelet( + width=260, + height=200, + bgcolor=ft.Colors.SURFACE, + appbar=ft.AppBar( + title=ft.Text("AppBar", size=12), + center_title=True, + toolbar_height=38, + bgcolor=ft.Colors.PRIMARY_CONTAINER, + ), + content=ft.Container( + alignment=ft.Alignment.CENTER, + content=ft.Text("Body", size=12), + ), + bottom_appbar=ft.BottomAppBar( + height=42, + bgcolor=ft.Colors.SECONDARY_CONTAINER, + ), + floating_action_button=ft.FloatingActionButton( + icon=ft.Icons.ADD, + mini=mini, + bgcolor=ft.Colors.LIGHT_BLUE_400, + ), + floating_action_button_location=location, + ), + ], + ), + ) + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + page.appbar = ft.AppBar(title="FloatingActionButtonLocation Showcase") + page.add( + ft.Text("Compare FloatingActionButton placement presets."), + ft.Row( + wrap=True, + spacing=12, + expand=True, + scroll=ft.ScrollMode.AUTO, + alignment=ft.MainAxisAlignment.CENTER, + controls=[ + location_card(location) for location in ft.FloatingActionButtonLocation + ], + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/floatingactionbuttonlocation.md b/sdk/python/packages/flet/docs/types/floatingactionbuttonlocation.md index bdbef499d9..71f82e30b2 100644 --- a/sdk/python/packages/flet/docs/types/floatingactionbuttonlocation.md +++ b/sdk/python/packages/flet/docs/types/floatingactionbuttonlocation.md @@ -1 +1,16 @@ -{{ class_all_options("flet.FloatingActionButtonLocation", separate_signature=False) }} +--- +class_name: flet.FloatingActionButtonLocation +examples: ../../examples/controls/types/floating_action_button_location +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} From f65dee22fe15bcc0167ecfcc03c8ee01485b68d7 Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Thu, 26 Feb 2026 11:43:38 +0100 Subject: [PATCH 14/71] add FontWeight showcase example and update documentation --- .../controls/types/font_weight/showcase.py | 41 +++++++++++++++++++ .../packages/flet/docs/types/fontweight.md | 17 +++++++- 2 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 sdk/python/examples/controls/types/font_weight/showcase.py diff --git a/sdk/python/examples/controls/types/font_weight/showcase.py b/sdk/python/examples/controls/types/font_weight/showcase.py new file mode 100644 index 0000000000..da0ce531b1 --- /dev/null +++ b/sdk/python/examples/controls/types/font_weight/showcase.py @@ -0,0 +1,41 @@ +import flet as ft + +SAMPLE_TEXT = "Sphinx of black quartz" + + +def weight_card(weight: ft.FontWeight) -> ft.Container: + return ft.Container( + width=300, + padding=12, + border=ft.Border.all(1, ft.Colors.ERROR), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=ft.Column( + spacing=8, + controls=[ + ft.Text(weight.name, size=12, color=ft.Colors.ON_SURFACE_VARIANT), + ft.Text(SAMPLE_TEXT, weight=weight, size=24), + ], + ), + ) + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + page.appbar = ft.AppBar(title="FontWeight Showcase") + page.add( + ft.Text("Compare text thickness across all FontWeight values."), + ft.Row( + wrap=True, + spacing=12, + expand=True, + scroll=ft.ScrollMode.AUTO, + alignment=ft.MainAxisAlignment.CENTER, + controls=[weight_card(weight) for weight in ft.FontWeight], + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/fontweight.md b/sdk/python/packages/flet/docs/types/fontweight.md index 698756048b..b12002695c 100644 --- a/sdk/python/packages/flet/docs/types/fontweight.md +++ b/sdk/python/packages/flet/docs/types/fontweight.md @@ -1 +1,16 @@ -{{ class_all_options("flet.FontWeight", separate_signature=False) }} +--- +class_name: flet.FontWeight +examples: ../../examples/controls/types/font_weight +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} From c01d6f7c712127d24e193b2274a22778bdaee67b Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Thu, 26 Feb 2026 11:47:19 +0100 Subject: [PATCH 15/71] add BlendMode showcase example and update documentation --- .../controls/types/blend_mode/showcase.py | 47 +++++++++++++++++++ .../packages/flet/docs/types/blendmode.md | 17 ++++++- 2 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 sdk/python/examples/controls/types/blend_mode/showcase.py diff --git a/sdk/python/examples/controls/types/blend_mode/showcase.py b/sdk/python/examples/controls/types/blend_mode/showcase.py new file mode 100644 index 0000000000..05d80e9de1 --- /dev/null +++ b/sdk/python/examples/controls/types/blend_mode/showcase.py @@ -0,0 +1,47 @@ +import flet as ft + + +def blend_mode_card(blend_mode: ft.BlendMode) -> ft.Container: + return ft.Container( + width=280, + padding=12, + border=ft.Border.all(1, ft.Colors.ERROR), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=ft.Column( + spacing=8, + controls=[ + ft.Text(blend_mode.name, weight=ft.FontWeight.BOLD), + ft.Image( + src="https://picsum.photos/id/237/200/300", + width=240, + height=130, + fit=ft.BoxFit.COVER, + color=ft.Colors.LIGHT_GREEN_200, + color_blend_mode=blend_mode, + border_radius=8, + ), + ], + ), + ) + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + page.appbar = ft.AppBar(title="BlendMode Showcase") + page.add( + ft.Text("Compare color blending results for each BlendMode value."), + ft.Row( + wrap=True, + spacing=12, + expand=True, + scroll=ft.ScrollMode.AUTO, + alignment=ft.MainAxisAlignment.CENTER, + controls=[blend_mode_card(blend_mode) for blend_mode in ft.BlendMode], + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/blendmode.md b/sdk/python/packages/flet/docs/types/blendmode.md index 6ce6b78f83..1236800fc5 100644 --- a/sdk/python/packages/flet/docs/types/blendmode.md +++ b/sdk/python/packages/flet/docs/types/blendmode.md @@ -1 +1,16 @@ -{{ class_all_options("flet.BlendMode", separate_signature=False) }} +--- +class_name: flet.BlendMode +examples: ../../examples/controls/types/blend_mode +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} From fea725312893f59a463c80ff7a87c1fe0fc9fd84 Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Thu, 26 Feb 2026 11:51:27 +0100 Subject: [PATCH 16/71] add ImageRepeat showcase example and update documentation --- .../controls/types/image_repeat/showcase.py | 51 +++++++++++++++++++ .../packages/flet/docs/types/imagerepeat.md | 17 ++++++- 2 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 sdk/python/examples/controls/types/image_repeat/showcase.py diff --git a/sdk/python/examples/controls/types/image_repeat/showcase.py b/sdk/python/examples/controls/types/image_repeat/showcase.py new file mode 100644 index 0000000000..c6ee3da3f7 --- /dev/null +++ b/sdk/python/examples/controls/types/image_repeat/showcase.py @@ -0,0 +1,51 @@ +import flet as ft + + +def repeat_card(repeat: ft.ImageRepeat) -> ft.Container: + return ft.Container( + width=280, + padding=12, + border=ft.Border.all(1, ft.Colors.ERROR), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=ft.Column( + spacing=8, + controls=[ + ft.Text(repeat.name, weight=ft.FontWeight.BOLD), + ft.Container( + width=240, + height=130, + border=ft.Border.all(1, ft.Colors.OUTLINE), + border_radius=8, + bgcolor=ft.Colors.SURFACE, + content=ft.Image( + src="https://picsum.photos/id/237/200/300", + width=240, + height=130, + repeat=repeat, + ), + ), + ], + ), + ) + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + page.appbar = ft.AppBar(title="ImageRepeat Showcase") + page.add( + ft.Text("Compare how an image fills uncovered space using repeat modes."), + ft.Row( + wrap=True, + spacing=12, + expand=True, + scroll=ft.ScrollMode.AUTO, + alignment=ft.MainAxisAlignment.CENTER, + controls=[repeat_card(repeat) for repeat in ft.ImageRepeat], + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/imagerepeat.md b/sdk/python/packages/flet/docs/types/imagerepeat.md index 6a20dd2e66..ec56b99715 100644 --- a/sdk/python/packages/flet/docs/types/imagerepeat.md +++ b/sdk/python/packages/flet/docs/types/imagerepeat.md @@ -1 +1,16 @@ -{{ class_all_options("flet.ImageRepeat", separate_signature=False) }} +--- +class_name: flet.ImageRepeat +examples: ../../examples/controls/types/image_repeat +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} From 7153278e687b6bc8e26bc77b439231db3b26d5e6 Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Thu, 26 Feb 2026 11:53:01 +0100 Subject: [PATCH 17/71] add ScrollMode showcase example and update documentation --- .../controls/types/scroll_mode/showcase.py | 51 +++++++++++++++++++ .../packages/flet/docs/types/scrollmode.md | 17 ++++++- .../flet/src/flet/controls/core/pagelet.py | 12 ++--- 3 files changed, 73 insertions(+), 7 deletions(-) create mode 100644 sdk/python/examples/controls/types/scroll_mode/showcase.py diff --git a/sdk/python/examples/controls/types/scroll_mode/showcase.py b/sdk/python/examples/controls/types/scroll_mode/showcase.py new file mode 100644 index 0000000000..603b54911a --- /dev/null +++ b/sdk/python/examples/controls/types/scroll_mode/showcase.py @@ -0,0 +1,51 @@ +import flet as ft + + +def scroll_mode_card(scroll_mode: ft.ScrollMode) -> ft.Container: + return ft.Container( + width=280, + padding=12, + border=ft.Border.all(1, ft.Colors.ERROR), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=ft.Column( + spacing=8, + controls=[ + ft.Text(scroll_mode.name, weight=ft.FontWeight.BOLD), + ft.Text("Scroll inside this panel", size=12), + ft.Container( + height=170, + border=ft.Border.all(1, ft.Colors.OUTLINE), + border_radius=8, + bgcolor=ft.Colors.SURFACE, + padding=8, + content=ft.Column( + spacing=4, + scroll=scroll_mode, + controls=[ft.Text(f"Item {i + 1}") for i in range(24)], + ), + ), + ], + ), + ) + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + page.appbar = ft.AppBar(title="ScrollMode Showcase") + page.add( + ft.Text("Compare scrollbar visibility and scrolling behavior modes."), + ft.Row( + wrap=True, + spacing=12, + expand=True, + scroll=ft.ScrollMode.AUTO, + alignment=ft.MainAxisAlignment.CENTER, + controls=[scroll_mode_card(scroll_mode) for scroll_mode in ft.ScrollMode], + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/scrollmode.md b/sdk/python/packages/flet/docs/types/scrollmode.md index b757f3e7e1..75c5518642 100644 --- a/sdk/python/packages/flet/docs/types/scrollmode.md +++ b/sdk/python/packages/flet/docs/types/scrollmode.md @@ -1 +1,16 @@ -{{ class_all_options("flet.ScrollMode", separate_signature=False) }} +--- +class_name: flet.ScrollMode +examples: ../../examples/controls/types/scroll_mode +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} diff --git a/sdk/python/packages/flet/src/flet/controls/core/pagelet.py b/sdk/python/packages/flet/src/flet/controls/core/pagelet.py index 6eca1f2c20..6d24e160c9 100644 --- a/sdk/python/packages/flet/src/flet/controls/core/pagelet.py +++ b/sdk/python/packages/flet/src/flet/controls/core/pagelet.py @@ -28,7 +28,7 @@ class Pagelet(LayoutControl, AdaptiveControl): content: Control """ - A child Control contained by the Pagelet. + A child Control contained by this Pagelet. The control in the content of the Pagelet is positioned at the top-left of the available space between the app bar and the bottom of the Pagelet. @@ -55,7 +55,7 @@ class Pagelet(LayoutControl, AdaptiveControl): bottom_appbar: Optional[BottomAppBar] = None """ - A [`BottomAppBar`][flet.] control to display at the bottom of the `Pagelet`. + A [`BottomAppBar`][flet.] control to display at the bottom of this Pagelet. Note: If both the `bottom_appbar` and [`navigation_bar`][(c).] @@ -66,7 +66,7 @@ class Pagelet(LayoutControl, AdaptiveControl): bottom_sheet: Optional[Control] = None """ The persistent bottom sheet to show information that supplements the primary \ - content of the Pagelet. + content of this Pagelet. """ drawer: Optional[NavigationDrawer] = None @@ -84,19 +84,19 @@ class Pagelet(LayoutControl, AdaptiveControl): floating_action_button: Optional[Control] = None """ A [`FloatingActionButton`][flet.] - control to display on top of Pagelet content. + control to display on top of this Pagelet's content. """ floating_action_button_location: Optional[ Union[FloatingActionButtonLocation, OffsetValue] ] = FloatingActionButtonLocation.END_FLOAT """ - Defines a position for the `FloatingActionButton`. + Defines the position of the [`floating_action_button`][(c).]. """ bgcolor: Optional[ColorValue] = None """ - Background color of the Pagelet. + Background color of this Pagelet. """ def before_update(self): From f9213556d6c93a0af4ba90911d6722458f2c3673 Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Thu, 26 Feb 2026 12:01:03 +0100 Subject: [PATCH 18/71] add VisualDensity showcase example and update documentation --- .../controls/types/blend_mode/showcase.py | 2 +- .../controls/types/clip_behavior/showcase.py | 2 +- .../showcase.py | 2 +- .../controls/types/font_weight/showcase.py | 2 +- .../controls/types/image_repeat/showcase.py | 2 +- .../controls/types/mouse_cursor/showcase.py | 2 +- .../controls/types/scroll_mode/showcase.py | 2 +- .../controls/types/stroke_cap/showcase.py | 6 +-- .../controls/types/stroke_join/showcase.py | 2 +- .../controls/types/text_align/showcase.py | 2 +- .../controls/types/visual_density/showcase.py | 54 +++++++++++++++++++ .../packages/flet/docs/types/visualdensity.md | 17 +++++- .../flet/src/flet/controls/material/radio.py | 2 +- 13 files changed, 83 insertions(+), 14 deletions(-) create mode 100644 sdk/python/examples/controls/types/visual_density/showcase.py diff --git a/sdk/python/examples/controls/types/blend_mode/showcase.py b/sdk/python/examples/controls/types/blend_mode/showcase.py index 05d80e9de1..0a68046a6c 100644 --- a/sdk/python/examples/controls/types/blend_mode/showcase.py +++ b/sdk/python/examples/controls/types/blend_mode/showcase.py @@ -5,7 +5,7 @@ def blend_mode_card(blend_mode: ft.BlendMode) -> ft.Container: return ft.Container( width=280, padding=12, - border=ft.Border.all(1, ft.Colors.ERROR), + border=ft.Border.all(1, ft.Colors.RED), border_radius=10, bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, content=ft.Column( diff --git a/sdk/python/examples/controls/types/clip_behavior/showcase.py b/sdk/python/examples/controls/types/clip_behavior/showcase.py index c84fb3dbc6..47f10f066f 100644 --- a/sdk/python/examples/controls/types/clip_behavior/showcase.py +++ b/sdk/python/examples/controls/types/clip_behavior/showcase.py @@ -46,7 +46,7 @@ def clip_card(clip_behavior: ft.ClipBehavior) -> ft.Container: return ft.Container( width=280, padding=12, - border=ft.Border.all(1, ft.Colors.ERROR), + border=ft.Border.all(1, ft.Colors.RED), border_radius=10, bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, content=ft.Column( diff --git a/sdk/python/examples/controls/types/floating_action_button_location/showcase.py b/sdk/python/examples/controls/types/floating_action_button_location/showcase.py index 906510adfc..d2a145cd10 100644 --- a/sdk/python/examples/controls/types/floating_action_button_location/showcase.py +++ b/sdk/python/examples/controls/types/floating_action_button_location/showcase.py @@ -6,7 +6,7 @@ def location_card(location: ft.FloatingActionButtonLocation) -> ft.Container: return ft.Container( width=300, padding=12, - border=ft.Border.all(1, ft.Colors.ERROR), + border=ft.Border.all(1, ft.Colors.RED), border_radius=10, bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, content=ft.Column( diff --git a/sdk/python/examples/controls/types/font_weight/showcase.py b/sdk/python/examples/controls/types/font_weight/showcase.py index da0ce531b1..a224b76f44 100644 --- a/sdk/python/examples/controls/types/font_weight/showcase.py +++ b/sdk/python/examples/controls/types/font_weight/showcase.py @@ -7,7 +7,7 @@ def weight_card(weight: ft.FontWeight) -> ft.Container: return ft.Container( width=300, padding=12, - border=ft.Border.all(1, ft.Colors.ERROR), + border=ft.Border.all(1, ft.Colors.RED), border_radius=10, bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, content=ft.Column( diff --git a/sdk/python/examples/controls/types/image_repeat/showcase.py b/sdk/python/examples/controls/types/image_repeat/showcase.py index c6ee3da3f7..0d15a35fa4 100644 --- a/sdk/python/examples/controls/types/image_repeat/showcase.py +++ b/sdk/python/examples/controls/types/image_repeat/showcase.py @@ -5,7 +5,7 @@ def repeat_card(repeat: ft.ImageRepeat) -> ft.Container: return ft.Container( width=280, padding=12, - border=ft.Border.all(1, ft.Colors.ERROR), + border=ft.Border.all(1, ft.Colors.RED), border_radius=10, bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, content=ft.Column( diff --git a/sdk/python/examples/controls/types/mouse_cursor/showcase.py b/sdk/python/examples/controls/types/mouse_cursor/showcase.py index 404405e4bd..49b04f7fc9 100644 --- a/sdk/python/examples/controls/types/mouse_cursor/showcase.py +++ b/sdk/python/examples/controls/types/mouse_cursor/showcase.py @@ -8,7 +8,7 @@ def cursor_card(cursor: ft.MouseCursor) -> ft.GestureDetector: width=250, height=100, padding=12, - border=ft.Border.all(1, ft.Colors.ERROR), + border=ft.Border.all(1, ft.Colors.RED), border_radius=10, bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, content=ft.Column( diff --git a/sdk/python/examples/controls/types/scroll_mode/showcase.py b/sdk/python/examples/controls/types/scroll_mode/showcase.py index 603b54911a..45e02117b1 100644 --- a/sdk/python/examples/controls/types/scroll_mode/showcase.py +++ b/sdk/python/examples/controls/types/scroll_mode/showcase.py @@ -5,7 +5,7 @@ def scroll_mode_card(scroll_mode: ft.ScrollMode) -> ft.Container: return ft.Container( width=280, padding=12, - border=ft.Border.all(1, ft.Colors.ERROR), + border=ft.Border.all(1, ft.Colors.RED), border_radius=10, bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, content=ft.Column( diff --git a/sdk/python/examples/controls/types/stroke_cap/showcase.py b/sdk/python/examples/controls/types/stroke_cap/showcase.py index f17a7e452a..a286e47c57 100644 --- a/sdk/python/examples/controls/types/stroke_cap/showcase.py +++ b/sdk/python/examples/controls/types/stroke_cap/showcase.py @@ -6,7 +6,7 @@ def cap_card(stroke_cap: ft.StrokeCap) -> ft.Container: return ft.Container( width=280, padding=12, - border=ft.Border.all(1, ft.Colors.ERROR), + border=ft.Border.all(1, ft.Colors.RED), border_radius=10, bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, content=ft.Column( @@ -33,14 +33,14 @@ def cap_card(stroke_cap: ft.StrokeCap) -> ft.Container: y1=16, x2=40, y2=74, - paint=ft.Paint(stroke_width=2, color=ft.Colors.ERROR), + paint=ft.Paint(stroke_width=2, color=ft.Colors.RED), ), cv.Line( x1=200, y1=16, x2=200, y2=74, - paint=ft.Paint(stroke_width=2, color=ft.Colors.ERROR), + paint=ft.Paint(stroke_width=2, color=ft.Colors.RED), ), ], ), diff --git a/sdk/python/examples/controls/types/stroke_join/showcase.py b/sdk/python/examples/controls/types/stroke_join/showcase.py index 340b56ee3b..1094c8aa53 100644 --- a/sdk/python/examples/controls/types/stroke_join/showcase.py +++ b/sdk/python/examples/controls/types/stroke_join/showcase.py @@ -6,7 +6,7 @@ def join_card(stroke_join: ft.StrokeJoin) -> ft.Container: return ft.Container( width=280, padding=12, - border=ft.Border.all(1, ft.Colors.ERROR), + border=ft.Border.all(1, ft.Colors.RED), border_radius=10, bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, content=ft.Column( diff --git a/sdk/python/examples/controls/types/text_align/showcase.py b/sdk/python/examples/controls/types/text_align/showcase.py index e528350f48..c4be4d985b 100644 --- a/sdk/python/examples/controls/types/text_align/showcase.py +++ b/sdk/python/examples/controls/types/text_align/showcase.py @@ -5,7 +5,7 @@ def align_card(text_align: ft.TextAlign) -> ft.Container: return ft.Container( width=280, padding=12, - border=ft.Border.all(1, ft.Colors.ERROR), + border=ft.Border.all(1, ft.Colors.RED), border_radius=10, bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, content=ft.Column( diff --git a/sdk/python/examples/controls/types/visual_density/showcase.py b/sdk/python/examples/controls/types/visual_density/showcase.py new file mode 100644 index 0000000000..229c84977b --- /dev/null +++ b/sdk/python/examples/controls/types/visual_density/showcase.py @@ -0,0 +1,54 @@ +import flet as ft + + +def density_card(visual_density: ft.VisualDensity) -> ft.Container: + return ft.Container( + width=300, + padding=12, + border=ft.Border.all(1, ft.Colors.RED), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + theme=ft.Theme(visual_density=visual_density), + dark_theme=ft.Theme(visual_density=visual_density), + content=ft.Column( + spacing=8, + controls=[ + ft.Text(visual_density.name, weight=ft.FontWeight.BOLD), + ft.IconButton(icon=ft.Icons.ADD), + ft.Checkbox(label="Checkbox", value=True), + ft.Chip( + label="Explore topics", + leading=ft.Icon(ft.Icons.EXPLORE_OUTLINED), + ), + ft.RadioGroup( + value="1", + content=ft.Row( + controls=[ + ft.Radio(label=f"{i}", value=f"{i}") for i in range(1, 4) + ], + ), + ), + ], + ), + ) + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + page.appbar = ft.AppBar(title="VisualDensity Showcase") + page.add( + ft.Text("Compare component density presets across Material controls."), + ft.Row( + wrap=True, + spacing=12, + expand=True, + scroll=ft.ScrollMode.AUTO, + alignment=ft.MainAxisAlignment.CENTER, + controls=[density_card(vd) for vd in ft.VisualDensity], + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/visualdensity.md b/sdk/python/packages/flet/docs/types/visualdensity.md index 779406b7cf..86d5bdcc9f 100644 --- a/sdk/python/packages/flet/docs/types/visualdensity.md +++ b/sdk/python/packages/flet/docs/types/visualdensity.md @@ -1 +1,16 @@ -{{ class_all_options("flet.VisualDensity", separate_signature=False) }} +--- +class_name: flet.VisualDensity +examples: ../../examples/controls/types/visual_density +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} diff --git a/sdk/python/packages/flet/src/flet/controls/material/radio.py b/sdk/python/packages/flet/src/flet/controls/material/radio.py index b1bae6ee0d..f2da3dc8c6 100644 --- a/sdk/python/packages/flet/src/flet/controls/material/radio.py +++ b/sdk/python/packages/flet/src/flet/controls/material/radio.py @@ -22,6 +22,7 @@ class Radio(LayoutControl, AdaptiveControl): """ Radio buttons let people select a single option from two or more choices. + Example: ```python ft.RadioGroup( content=ft.Row( @@ -30,7 +31,6 @@ class Radio(LayoutControl, AdaptiveControl): ) ) ``` - """ label: str = "" From 70c69f3becf8fdc8aebe16ebb20d0ffb83422809 Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Thu, 26 Feb 2026 12:31:56 +0100 Subject: [PATCH 19/71] add UrlTarget showcase example and update documentation --- .../controls/types/url_target/showcase.py | 50 +++++++++++++++++++ .../packages/flet/docs/types/urltarget.md | 17 ++++++- 2 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 sdk/python/examples/controls/types/url_target/showcase.py diff --git a/sdk/python/examples/controls/types/url_target/showcase.py b/sdk/python/examples/controls/types/url_target/showcase.py new file mode 100644 index 0000000000..e55166ec7c --- /dev/null +++ b/sdk/python/examples/controls/types/url_target/showcase.py @@ -0,0 +1,50 @@ +import flet as ft + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + async def open_url(target: ft.UrlTarget): + url = "https://flet.dev" + await ft.UrlLauncher().launch_url(ft.Url(url=url, target=target)) + status.value = f"Opened {url} with target {target.name}" + status.update() + + def target_card(target: ft.UrlTarget) -> ft.Container: + return ft.Container( + width=280, + padding=12, + border=ft.Border.all(1, ft.Colors.ERROR), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=ft.Column( + spacing=8, + controls=[ + ft.Text(target.name, weight=ft.FontWeight.BOLD), + ft.Text(target.value, size=12, color=ft.Colors.ON_SURFACE_VARIANT), + ft.Button( + "Open flet.dev", + icon=ft.Icons.OPEN_IN_NEW, + on_click=lambda: page.run_task(open_url, target), + ), + ], + ), + ) + + page.appbar = ft.AppBar(title="UrlTarget Showcase") + page.add( + ft.Text("Click a card to launch URL with the selected browser target."), + status := ft.Text(), + ft.Row( + wrap=True, + spacing=12, + expand=True, + scroll=ft.ScrollMode.AUTO, + alignment=ft.MainAxisAlignment.CENTER, + controls=[target_card(target) for target in ft.UrlTarget], + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/urltarget.md b/sdk/python/packages/flet/docs/types/urltarget.md index c072a3d242..c23ebc7fb7 100644 --- a/sdk/python/packages/flet/docs/types/urltarget.md +++ b/sdk/python/packages/flet/docs/types/urltarget.md @@ -1 +1,16 @@ -{{ class_all_options("flet.UrlTarget", separate_signature=False) }} +--- +class_name: flet.UrlTarget +examples: ../../examples/controls/types/url_target +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} From e0f551009fe38ddfeb4e4ce2a941cbc8f0984f91 Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Thu, 26 Feb 2026 12:44:27 +0100 Subject: [PATCH 20/71] add ThemeMode showcase example and update documentation --- .../controls/types/theme_mode/showcase.py | 63 +++++++++++++++++++ .../packages/flet/docs/types/thememode.md | 17 ++++- 2 files changed, 79 insertions(+), 1 deletion(-) create mode 100644 sdk/python/examples/controls/types/theme_mode/showcase.py diff --git a/sdk/python/examples/controls/types/theme_mode/showcase.py b/sdk/python/examples/controls/types/theme_mode/showcase.py new file mode 100644 index 0000000000..969fdd7d12 --- /dev/null +++ b/sdk/python/examples/controls/types/theme_mode/showcase.py @@ -0,0 +1,63 @@ +import flet as ft + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.SYSTEM + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + def apply_theme_mode(theme_mode: ft.ThemeMode): + page.theme_mode = theme_mode + status.value = f"Active mode: {theme_mode.name}" + page.update() + + def mode_card(theme_mode: ft.ThemeMode) -> ft.Container: + return ft.Container( + width=250, + padding=12, + border=ft.Border.all(1, ft.Colors.RED), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=ft.Column( + spacing=8, + controls=[ + ft.Text(theme_mode.name, weight=ft.FontWeight.BOLD), + ft.Button( + "Apply", + on_click=lambda _, m=theme_mode: apply_theme_mode(m), + ), + ], + ), + ) + + page.appbar = ft.AppBar(title="ThemeMode Showcase") + page.add( + ft.Text("Switch the app theme mode and inspect the preview below."), + status := ft.Text(f"Active mode: {page.theme_mode.name}"), + ft.Container( + width=500, + padding=12, + border=ft.Border.all(1, ft.Colors.OUTLINE), + border_radius=10, + content=ft.Row( + alignment=ft.MainAxisAlignment.SPACE_AROUND, + controls=[ + ft.OutlinedButton("Outlined"), + ft.FilledButton("Filled"), + ft.Switch(label="Switch", value=True), + ], + ), + ), + ft.Row( + wrap=True, + spacing=12, + expand=True, + scroll=ft.ScrollMode.AUTO, + alignment=ft.MainAxisAlignment.CENTER, + controls=[mode_card(theme_mode) for theme_mode in ft.ThemeMode], + ), + ) + + apply_theme_mode(ft.ThemeMode.SYSTEM) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/thememode.md b/sdk/python/packages/flet/docs/types/thememode.md index 0412fcdfdc..574938727c 100644 --- a/sdk/python/packages/flet/docs/types/thememode.md +++ b/sdk/python/packages/flet/docs/types/thememode.md @@ -1 +1,16 @@ -{{ class_all_options("flet.ThemeMode", separate_signature=False) }} +--- +class_name: flet.ThemeMode +examples: ../../examples/controls/types/theme_mode +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} From 6cb2fc53c32374a1370f21e68784892d639c7b1f Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Thu, 26 Feb 2026 12:46:46 +0100 Subject: [PATCH 21/71] add LabelPosition showcase example and update documentation --- .../controls/types/label_position/showcase.py | 63 +++++++++++++++++++ .../packages/flet/docs/types/labelposition.md | 17 ++++- 2 files changed, 79 insertions(+), 1 deletion(-) create mode 100644 sdk/python/examples/controls/types/label_position/showcase.py diff --git a/sdk/python/examples/controls/types/label_position/showcase.py b/sdk/python/examples/controls/types/label_position/showcase.py new file mode 100644 index 0000000000..014ae76f8f --- /dev/null +++ b/sdk/python/examples/controls/types/label_position/showcase.py @@ -0,0 +1,63 @@ +import flet as ft + + +def label_position_card(label_position: ft.LabelPosition) -> ft.Container: + return ft.Container( + width=280, + padding=12, + border=ft.Border.all(1, ft.Colors.RED), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=ft.Column( + spacing=10, + controls=[ + ft.Text(label_position.name, weight=ft.FontWeight.BOLD), + ft.Checkbox( + label="Checkbox label", + value=True, + label_position=label_position, + ), + ft.RadioGroup( + content=ft.Row( + controls=[ + ft.Radio( + label=f"{i}", + value=f"{i}", + label_position=label_position, + ) + for i in range(1, 4) + ], + ) + ), + ft.Switch( + label="Switch label", + value=True, + label_position=label_position, + ), + ], + ), + ) + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + page.appbar = ft.AppBar(title="LabelPosition Showcase") + page.add( + ft.Text("Compare left/right label placement for form controls."), + ft.Row( + wrap=True, + spacing=12, + expand=True, + scroll=ft.ScrollMode.AUTO, + alignment=ft.MainAxisAlignment.CENTER, + controls=[ + label_position_card(label_position) + for label_position in ft.LabelPosition + ], + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/labelposition.md b/sdk/python/packages/flet/docs/types/labelposition.md index 138ce0e032..f11d4c90dc 100644 --- a/sdk/python/packages/flet/docs/types/labelposition.md +++ b/sdk/python/packages/flet/docs/types/labelposition.md @@ -1 +1,16 @@ -{{ class_all_options("flet.LabelPosition", separate_signature=False) }} +--- +class_name: flet.LabelPosition +examples: ../../examples/controls/types/label_position +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} From 40dfde85a3eaa2ac672492bce88c91fc5b94b4d1 Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Thu, 26 Feb 2026 12:50:32 +0100 Subject: [PATCH 22/71] add Orientation showcase example and update documentation --- .../controls/types/orientation/showcase.py | 50 +++++++++++++++++++ .../flet/docs/types/deviceorientation.md | 16 +++++- .../packages/flet/docs/types/orientation.md | 17 ++++++- 3 files changed, 81 insertions(+), 2 deletions(-) create mode 100644 sdk/python/examples/controls/types/orientation/showcase.py diff --git a/sdk/python/examples/controls/types/orientation/showcase.py b/sdk/python/examples/controls/types/orientation/showcase.py new file mode 100644 index 0000000000..c6204859bb --- /dev/null +++ b/sdk/python/examples/controls/types/orientation/showcase.py @@ -0,0 +1,50 @@ +from datetime import time + +import flet as ft + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + def orientation_card(orientation: ft.Orientation) -> ft.Container: + picker = ft.TimePicker( + value=time(hour=10, minute=30), + help_text=f"{orientation.name} time picker", + orientation=orientation, + ) + + return ft.Container( + width=300, + padding=12, + border=ft.Border.all(1, ft.Colors.ERROR), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=ft.Column( + spacing=8, + controls=[ + ft.Text(orientation.name, weight=ft.FontWeight.BOLD), + ft.Button( + "Open TimePicker", + icon=ft.Icons.ACCESS_TIME, + on_click=lambda _, p=picker: page.show_dialog(p), + ), + ], + ), + ) + + page.appbar = ft.AppBar(title="Orientation Showcase") + page.add( + ft.Text("TimePicker supports PORTRAIT and LANDSCAPE layouts."), + ft.Row( + wrap=True, + spacing=12, + expand=True, + scroll=ft.ScrollMode.AUTO, + alignment=ft.MainAxisAlignment.CENTER, + controls=[orientation_card(orientation) for orientation in ft.Orientation], + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/deviceorientation.md b/sdk/python/packages/flet/docs/types/deviceorientation.md index c3aaf79af9..5160eb0edc 100644 --- a/sdk/python/packages/flet/docs/types/deviceorientation.md +++ b/sdk/python/packages/flet/docs/types/deviceorientation.md @@ -1 +1,15 @@ -{{ class_all_options("flet.DeviceOrientation", separate_signature=False) }} +--- +class_name: flet.DeviceOrientation +--- + +{{ class_summary(class_name) }} + +## Examples + +### Mobile device orientation configuration + +See the [Page mobile device orientation example](../controls/page.md#mobile-device-orientation-configuration), +which demonstrates how to use [`DeviceOrientation`][flet.DeviceOrientation] +with [`Page.set_allowed_device_orientations()`][flet.Page.set_allowed_device_orientations]. + +{{ class_members(class_name, separate_signature=False) }} diff --git a/sdk/python/packages/flet/docs/types/orientation.md b/sdk/python/packages/flet/docs/types/orientation.md index 5a98bed9aa..44854abade 100644 --- a/sdk/python/packages/flet/docs/types/orientation.md +++ b/sdk/python/packages/flet/docs/types/orientation.md @@ -1 +1,16 @@ -{{ class_all_options("flet.Orientation", separate_signature=False) }} +--- +class_name: flet.Orientation +examples: ../../examples/controls/types/orientation +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} From 8814439eb4f0fd2916921e9bee9a72a2a838d329 Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Thu, 26 Feb 2026 13:10:27 +0100 Subject: [PATCH 23/71] add BoxFit showcase example and update documentation --- .../controls/types/box_fit/showcase.py | 52 +++++++++++++++++++ sdk/python/packages/flet/docs/types/boxfit.md | 17 +++++- 2 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 sdk/python/examples/controls/types/box_fit/showcase.py diff --git a/sdk/python/examples/controls/types/box_fit/showcase.py b/sdk/python/examples/controls/types/box_fit/showcase.py new file mode 100644 index 0000000000..ff8cf4949a --- /dev/null +++ b/sdk/python/examples/controls/types/box_fit/showcase.py @@ -0,0 +1,52 @@ +import flet as ft + + +def showcase_card(fit: ft.BoxFit) -> ft.Container: + return ft.Container( + width=300, + padding=12, + border=ft.Border.all(1, ft.Colors.RED), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=ft.Column( + spacing=8, + controls=[ + ft.Text(fit.name, weight=ft.FontWeight.BOLD), + ft.Container( + width=240, + height=120, + border=ft.Border.all(1, ft.Colors.OUTLINE), + border_radius=8, + clip_behavior=ft.ClipBehavior.HARD_EDGE, + bgcolor=ft.Colors.SURFACE, + content=ft.Image( + src="https://picsum.photos/id/1025/420/220", + width=240, + height=120, + fit=fit, + ), + ), + ], + ), + ) + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + page.appbar = ft.AppBar(title="BoxFit Showcase") + page.add( + ft.Text("Compare how the same image is inscribed into a fixed frame."), + ft.Row( + wrap=True, + spacing=12, + expand=True, + scroll=ft.ScrollMode.AUTO, + alignment=ft.MainAxisAlignment.CENTER, + controls=[showcase_card(fit) for fit in ft.BoxFit], + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/boxfit.md b/sdk/python/packages/flet/docs/types/boxfit.md index c3becea3a0..1677b6a5f1 100644 --- a/sdk/python/packages/flet/docs/types/boxfit.md +++ b/sdk/python/packages/flet/docs/types/boxfit.md @@ -1 +1,16 @@ -{{ class_all_options("flet.BoxFit", separate_signature=False) }} +--- +class_name: flet.BoxFit +examples: ../../examples/controls/types/box_fit +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} From b9fa352726e44a2447722796ef248916a41d0119 Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Thu, 26 Feb 2026 13:13:36 +0100 Subject: [PATCH 24/71] add TextOverflow showcase example and update documentation --- .../controls/types/text_overflow/showcase.py | 51 +++++++++++++++++++ .../packages/flet/docs/types/textoverflow.md | 17 ++++++- 2 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 sdk/python/examples/controls/types/text_overflow/showcase.py diff --git a/sdk/python/examples/controls/types/text_overflow/showcase.py b/sdk/python/examples/controls/types/text_overflow/showcase.py new file mode 100644 index 0000000000..5e9339db5c --- /dev/null +++ b/sdk/python/examples/controls/types/text_overflow/showcase.py @@ -0,0 +1,51 @@ +import flet as ft + + +def overflow_card(overflow: ft.TextOverflow) -> ft.Container: + return ft.Container( + width=320, + padding=12, + border=ft.Border.all(1, ft.Colors.RED), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=ft.Column( + spacing=8, + controls=[ + ft.Text(overflow.name, weight=ft.FontWeight.BOLD), + ft.Container( + width=250, + height=46, + padding=8, + border=ft.Border.all(1, ft.Colors.OUTLINE), + border_radius=8, + bgcolor=ft.Colors.SURFACE, + content=ft.Text( + "The quick brown fox jumps over the lazy dog near the Flet bridge.", # noqa: E501 + max_lines=1, + overflow=overflow, + ), + ), + ], + ), + ) + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + page.appbar = ft.AppBar(title="TextOverflow Showcase") + page.add( + ft.Text("Compare how one-line text behaves when content exceeds width."), + ft.Row( + wrap=True, + spacing=12, + expand=True, + scroll=ft.ScrollMode.AUTO, + alignment=ft.MainAxisAlignment.CENTER, + controls=[overflow_card(overflow) for overflow in ft.TextOverflow], + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/textoverflow.md b/sdk/python/packages/flet/docs/types/textoverflow.md index 1847651de0..7109524f95 100644 --- a/sdk/python/packages/flet/docs/types/textoverflow.md +++ b/sdk/python/packages/flet/docs/types/textoverflow.md @@ -1 +1,16 @@ -{{ class_all_options("flet.TextOverflow", separate_signature=False) }} +--- +class_name: flet.TextOverflow +examples: ../../examples/controls/types/text_overflow +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} From 7e73c92afda75ddbf6a2638fba5bca7009f1be0f Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Thu, 26 Feb 2026 13:20:07 +0100 Subject: [PATCH 25/71] add AnimatedSwitcherTransition showcase example and update documentation --- .../animated_switcher_transition/showcase.py | 75 +++++++++++++++++++ .../docs/types/animatedswitchertransition.md | 17 ++++- 2 files changed, 91 insertions(+), 1 deletion(-) create mode 100644 sdk/python/examples/controls/types/animated_switcher_transition/showcase.py diff --git a/sdk/python/examples/controls/types/animated_switcher_transition/showcase.py b/sdk/python/examples/controls/types/animated_switcher_transition/showcase.py new file mode 100644 index 0000000000..014831ccb7 --- /dev/null +++ b/sdk/python/examples/controls/types/animated_switcher_transition/showcase.py @@ -0,0 +1,75 @@ +import flet as ft + + +def showcase_card(transition: ft.AnimatedSwitcherTransition) -> ft.Container: + state = 0 + values = ["A", "B"] + + switcher = ft.AnimatedSwitcher( + duration=500, + reverse_duration=300, + transition=transition, + content=ft.Text( + values[0], + size=40, + weight=ft.FontWeight.BOLD, + ), + ) + + def swap(_): + nonlocal state + state = 1 - state + switcher.content = ft.Text( + values[state], + size=40, + weight=ft.FontWeight.BOLD, + ) + switcher.update() + + return ft.Container( + width=320, + padding=12, + border=ft.Border.all(1, ft.Colors.RED), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=ft.Column( + spacing=8, + controls=[ + ft.Text(transition.name, weight=ft.FontWeight.BOLD), + ft.Container( + width=240, + height=90, + border=ft.Border.all(1, ft.Colors.OUTLINE), + border_radius=8, + bgcolor=ft.Colors.SURFACE, + alignment=ft.Alignment.CENTER, + content=switcher, + ), + ft.Button("Swap", on_click=swap), + ], + ), + ) + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + page.appbar = ft.AppBar(title="AnimatedSwitcherTransition Showcase") + page.add( + ft.Text("Swap content to compare switcher transition effects."), + ft.Row( + wrap=True, + spacing=12, + expand=True, + scroll=ft.ScrollMode.AUTO, + alignment=ft.MainAxisAlignment.CENTER, + controls=[ + showcase_card(transition) + for transition in ft.AnimatedSwitcherTransition + ], + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/animatedswitchertransition.md b/sdk/python/packages/flet/docs/types/animatedswitchertransition.md index da759b78c9..1be795d167 100644 --- a/sdk/python/packages/flet/docs/types/animatedswitchertransition.md +++ b/sdk/python/packages/flet/docs/types/animatedswitchertransition.md @@ -1 +1,16 @@ -{{ class_all_options("flet.AnimatedSwitcherTransition", separate_signature=False) }} +--- +class_name: flet.AnimatedSwitcherTransition +examples: ../../examples/controls/types/animated_switcher_transition +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} From ee5884a1930fdd77fe475db2800b70591dafce88 Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Thu, 26 Feb 2026 13:30:06 +0100 Subject: [PATCH 26/71] add MainAxisAlignment showcase example and update documentation --- .../types/main_axis_alignment/showcase.py | 62 +++++++++++++++++++ .../flet/docs/types/mainaxisalignment.md | 59 ++++-------------- 2 files changed, 73 insertions(+), 48 deletions(-) create mode 100644 sdk/python/examples/controls/types/main_axis_alignment/showcase.py diff --git a/sdk/python/examples/controls/types/main_axis_alignment/showcase.py b/sdk/python/examples/controls/types/main_axis_alignment/showcase.py new file mode 100644 index 0000000000..117aa9c0da --- /dev/null +++ b/sdk/python/examples/controls/types/main_axis_alignment/showcase.py @@ -0,0 +1,62 @@ +import flet as ft + + +def dot(label: str) -> ft.Container: + return ft.Container( + width=36, + height=36, + border_radius=18, + bgcolor=ft.Colors.PRIMARY_CONTAINER, + alignment=ft.Alignment.CENTER, + content=ft.Text(label, size=12, color=ft.Colors.ON_PRIMARY_CONTAINER), + ) + + +def showcase_card(alignment: ft.MainAxisAlignment) -> ft.Container: + return ft.Container( + width=320, + padding=12, + border=ft.Border.all(1, ft.Colors.RED), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=ft.Column( + spacing=8, + controls=[ + ft.Text(alignment.name, weight=ft.FontWeight.BOLD), + ft.Container( + width=250, + height=70, + padding=8, + border=ft.Border.all(1, ft.Colors.OUTLINE), + border_radius=8, + bgcolor=ft.Colors.SURFACE, + content=ft.Row( + alignment=alignment, + vertical_alignment=ft.CrossAxisAlignment.CENTER, + controls=[dot("1"), dot("2"), dot("3")], + ), + ), + ], + ), + ) + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + page.appbar = ft.AppBar(title="MainAxisAlignment Showcase") + page.add( + ft.Text("Compare horizontal distribution of children in a fixed-width row."), + ft.Row( + wrap=True, + spacing=12, + expand=True, + scroll=ft.ScrollMode.AUTO, + alignment=ft.MainAxisAlignment.CENTER, + controls=[showcase_card(alignment) for alignment in ft.MainAxisAlignment], + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/mainaxisalignment.md b/sdk/python/packages/flet/docs/types/mainaxisalignment.md index 1db0b855c4..97c4a07042 100644 --- a/sdk/python/packages/flet/docs/types/mainaxisalignment.md +++ b/sdk/python/packages/flet/docs/types/mainaxisalignment.md @@ -1,53 +1,16 @@ -{{ class_all_options("flet.MainAxisAlignment", separate_signature=False) }} +--- +class_name: flet.MainAxisAlignment +examples: ../../examples/controls/types/main_axis_alignment +--- -## Usage example +{{ class_summary(class_name) }} - +## Examples -```python -import flet as ft - -def main(page: ft.Page): - def items(count): - items = [] - for i in range(1, count + 1): - items.append( - ft.Container( - content=ft.Text(value=str(i)), - alignment=ft.alignment.center, - width=50, - height=50, - bgcolor=ft.Colors.AMBER_500, - ) - ) - return items - - def column_with_alignment(align: ft.MainAxisAlignment): - return ft.Column( - [ - ft.Text(str(align), size=10), - ft.Container( - content=ft.Column(items(3), alignment=align), - bgcolor=ft.Colors.AMBER_100, - height=400, - ), - ] - ) +### Showcase - page.add( - ft.Row( - [ - column_with_alignment(ft.MainAxisAlignment.START), - column_with_alignment(ft.MainAxisAlignment.CENTER), - column_with_alignment(ft.MainAxisAlignment.END), - column_with_alignment(ft.MainAxisAlignment.SPACE_BETWEEN), - column_with_alignment(ft.MainAxisAlignment.SPACE_AROUND), - column_with_alignment(ft.MainAxisAlignment.SPACE_EVENLY), - ], - spacing=30, - alignment=ft.MainAxisAlignment.START, - ) - ) - -ft.run(main) +```python +--8<-- "{{ examples }}/showcase.py" ``` + +{{ class_members(class_name, separate_signature=False) }} From 91f2636dae845e611e2f3cf1be2a52366347fb4f Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Thu, 26 Feb 2026 15:05:11 +0100 Subject: [PATCH 27/71] add BlurTileMode showcase example and update documentation --- .../controls/types/blur_tile_mode/showcase.py | 83 +++++++++++++++++++ .../packages/flet/docs/types/blurtilemode.md | 17 +++- 2 files changed, 99 insertions(+), 1 deletion(-) create mode 100644 sdk/python/examples/controls/types/blur_tile_mode/showcase.py diff --git a/sdk/python/examples/controls/types/blur_tile_mode/showcase.py b/sdk/python/examples/controls/types/blur_tile_mode/showcase.py new file mode 100644 index 0000000000..e8b6ef05db --- /dev/null +++ b/sdk/python/examples/controls/types/blur_tile_mode/showcase.py @@ -0,0 +1,83 @@ +import flet as ft + + +def checkerboard() -> ft.Column: + colors = [ft.Colors.TEAL_300, ft.Colors.AMBER_300] + return ft.Column( + spacing=0, + controls=[ + ft.Row( + spacing=0, + controls=[ + ft.Container( + width=24, + height=24, + bgcolor=colors[(row + col) % 2], + ) + for col in range(9) + ], + ) + for row in range(6) + ], + ) + + +def showcase_card(mode: ft.BlurTileMode) -> ft.Container: + preview = ft.Container( + width=216, + height=144, + border_radius=8, + clip_behavior=ft.ClipBehavior.ANTI_ALIAS, + content=ft.Stack( + controls=[ + checkerboard(), + ft.Container( + left=8, + top=28, + width=120, + height=80, + blur=ft.Blur(8, 8, mode), + bgcolor="#55FFFFFF", + border_radius=8, + border=ft.Border.all(1, ft.Colors.WHITE), + ), + ] + ), + ) + + return ft.Container( + width=300, + padding=12, + border=ft.Border.all(1, ft.Colors.RED), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=ft.Column( + spacing=10, + horizontal_alignment=ft.CrossAxisAlignment.CENTER, + controls=[ + ft.Text(mode.name, weight=ft.FontWeight.BOLD), + preview, + ], + ), + ) + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + page.appbar = ft.AppBar(title="BlurTileMode Showcase") + page.add( + ft.Text("Compare blur edge sampling outside source bounds."), + ft.Row( + wrap=True, + spacing=12, + expand=True, + scroll=ft.ScrollMode.AUTO, + alignment=ft.MainAxisAlignment.CENTER, + controls=[showcase_card(mode) for mode in ft.BlurTileMode], + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/blurtilemode.md b/sdk/python/packages/flet/docs/types/blurtilemode.md index aa7e08f63c..509457fb85 100644 --- a/sdk/python/packages/flet/docs/types/blurtilemode.md +++ b/sdk/python/packages/flet/docs/types/blurtilemode.md @@ -1 +1,16 @@ -{{ class_all_options("flet.BlurTileMode", separate_signature=False) }} +--- +class_name: flet.BlurTileMode +examples: ../../examples/controls/types/blur_tile_mode +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} From 7fffdec284d3dc1abd1db02b53fae4af1dc38193 Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Thu, 26 Feb 2026 15:06:17 +0100 Subject: [PATCH 28/71] add Axis showcase example and update documentation --- .../examples/controls/types/axis/showcase.py | 48 +++++++++++++++++++ sdk/python/packages/flet/docs/types/axis.md | 17 ++++++- 2 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 sdk/python/examples/controls/types/axis/showcase.py diff --git a/sdk/python/examples/controls/types/axis/showcase.py b/sdk/python/examples/controls/types/axis/showcase.py new file mode 100644 index 0000000000..83d61cefe5 --- /dev/null +++ b/sdk/python/examples/controls/types/axis/showcase.py @@ -0,0 +1,48 @@ +import flet as ft + + +def showcase_card(axis: ft.Axis) -> ft.Container: + return ft.Container( + width=350 if axis == ft.Axis.HORIZONTAL else 220, + padding=12, + border=ft.Border.all(1, ft.Colors.RED), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=ft.Column( + spacing=8, + horizontal_alignment=ft.CrossAxisAlignment.CENTER, + controls=[ + ft.Text(axis.name, weight=ft.FontWeight.BOLD), + ft.SegmentedButton( + direction=axis, + selected=["medium"], + segments=[ + ft.Segment(value="small", label="Small"), + ft.Segment(value="medium", label="Medium"), + ft.Segment(value="large", label="Large"), + ], + ), + ], + ), + ) + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + page.appbar = ft.AppBar(title="Axis Showcase") + page.add( + ft.Text("Compare horizontal vs vertical segment layout."), + ft.Row( + wrap=True, + spacing=12, + expand=True, + scroll=ft.ScrollMode.AUTO, + alignment=ft.MainAxisAlignment.CENTER, + controls=[showcase_card(axis) for axis in ft.Axis], + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/axis.md b/sdk/python/packages/flet/docs/types/axis.md index ebda142f5c..b9a614f653 100644 --- a/sdk/python/packages/flet/docs/types/axis.md +++ b/sdk/python/packages/flet/docs/types/axis.md @@ -1 +1,16 @@ -{{ class_all_options("flet.Axis", separate_signature=False) }} +--- +class_name: flet.Axis +examples: ../../examples/controls/types/axis +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} From 3996634050375db989d64a57bb57a0675cbc4a3b Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Thu, 26 Feb 2026 15:08:03 +0100 Subject: [PATCH 29/71] add CardVariant showcase example and update documentation --- .../controls/types/card_variant/showcase.py | 57 +++++++++++++++++++ .../packages/flet/docs/types/cardvariant.md | 17 +++++- 2 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 sdk/python/examples/controls/types/card_variant/showcase.py diff --git a/sdk/python/examples/controls/types/card_variant/showcase.py b/sdk/python/examples/controls/types/card_variant/showcase.py new file mode 100644 index 0000000000..35a72f5934 --- /dev/null +++ b/sdk/python/examples/controls/types/card_variant/showcase.py @@ -0,0 +1,57 @@ +import flet as ft + + +def showcase_card(variant: ft.CardVariant) -> ft.Container: + card = ft.Card( + variant=variant, + content=ft.Container( + width=260, + padding=12, + content=ft.Column( + spacing=6, + controls=[ + ft.Text("Quarterly Report", weight=ft.FontWeight.BOLD), + ft.Text( + "Revenue increased by 18% compared to last quarter.", + size=12, + ), + ], + ), + ), + ) + + return ft.Container( + width=320, + padding=12, + border=ft.Border.all(1, ft.Colors.RED), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=ft.Column( + spacing=8, + controls=[ + ft.Text(variant.name, weight=ft.FontWeight.BOLD), + card, + ], + ), + ) + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + page.appbar = ft.AppBar(title="CardVariant Showcase") + page.add( + ft.Text("Compare Material card visual variants."), + ft.Row( + wrap=True, + spacing=12, + expand=True, + scroll=ft.ScrollMode.AUTO, + alignment=ft.MainAxisAlignment.CENTER, + controls=[showcase_card(variant) for variant in ft.CardVariant], + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/cardvariant.md b/sdk/python/packages/flet/docs/types/cardvariant.md index 65b26300b2..a81ecd0b56 100644 --- a/sdk/python/packages/flet/docs/types/cardvariant.md +++ b/sdk/python/packages/flet/docs/types/cardvariant.md @@ -1 +1,16 @@ -{{ class_all_options("flet.CardVariant", separate_signature=False) }} +--- +class_name: flet.CardVariant +examples: ../../examples/controls/types/card_variant +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} From e8ad3cd93a74dbbabc02870d1def976b02f5feb8 Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Thu, 26 Feb 2026 15:08:35 +0100 Subject: [PATCH 30/71] add BoxShape showcase example and update documentation --- .../controls/types/box_shape/showcase.py | 64 +++++++++++++++++++ .../packages/flet/docs/types/boxshape.md | 17 ++++- 2 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 sdk/python/examples/controls/types/box_shape/showcase.py diff --git a/sdk/python/examples/controls/types/box_shape/showcase.py b/sdk/python/examples/controls/types/box_shape/showcase.py new file mode 100644 index 0000000000..f5620383ab --- /dev/null +++ b/sdk/python/examples/controls/types/box_shape/showcase.py @@ -0,0 +1,64 @@ +import flet as ft + + +def showcase_card(shape: ft.BoxShape) -> ft.Container: + return ft.Container( + width=320, + padding=12, + border=ft.Border.all(1, ft.Colors.RED), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=ft.Column( + spacing=8, + controls=[ + ft.Text(shape.name, weight=ft.FontWeight.BOLD), + ft.Container( + width=200, + height=120, + alignment=ft.Alignment.CENTER, + bgcolor=ft.Colors.SURFACE, + border=ft.Border.all(1, ft.Colors.OUTLINE), + border_radius=8, + content=ft.Container( + width=120, + height=90, + alignment=ft.Alignment.CENTER, + shape=shape, + bgcolor=ft.Colors.PRIMARY_CONTAINER, + border=ft.Border.all(2, ft.Colors.PRIMARY), + border_radius=( + ft.BorderRadius.all(16) + if shape == ft.BoxShape.RECTANGLE + else None + ), + content=ft.Text( + "Shape", + color=ft.Colors.ON_PRIMARY_CONTAINER, + weight=ft.FontWeight.BOLD, + ), + ), + ), + ], + ), + ) + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + page.appbar = ft.AppBar(title="BoxShape Showcase") + page.add( + ft.Text("Compare rectangular and circular box decoration shapes."), + ft.Row( + wrap=True, + spacing=12, + expand=True, + scroll=ft.ScrollMode.AUTO, + alignment=ft.MainAxisAlignment.CENTER, + controls=[showcase_card(shape) for shape in ft.BoxShape], + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/boxshape.md b/sdk/python/packages/flet/docs/types/boxshape.md index 5402a7a4c5..ad9c31da6b 100644 --- a/sdk/python/packages/flet/docs/types/boxshape.md +++ b/sdk/python/packages/flet/docs/types/boxshape.md @@ -1 +1,16 @@ -{{ class_all_options("flet.BoxShape", separate_signature=False) }} +--- +class_name: flet.BoxShape +examples: ../../examples/controls/types/box_shape +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} From 507348127453bf2967d4c3984ae33a9181373ff2 Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Thu, 26 Feb 2026 15:11:37 +0100 Subject: [PATCH 31/71] add ContextMenuTrigger showcase example and update documentation --- .../types/context_menu_trigger/showcase.py | 80 +++++++++++++++++++ .../flet/docs/types/contextmenutrigger.md | 17 +++- 2 files changed, 96 insertions(+), 1 deletion(-) create mode 100644 sdk/python/examples/controls/types/context_menu_trigger/showcase.py diff --git a/sdk/python/examples/controls/types/context_menu_trigger/showcase.py b/sdk/python/examples/controls/types/context_menu_trigger/showcase.py new file mode 100644 index 0000000000..9b2b61a80c --- /dev/null +++ b/sdk/python/examples/controls/types/context_menu_trigger/showcase.py @@ -0,0 +1,80 @@ +import flet as ft + + +def showcase_card(trigger: ft.ContextMenuTrigger) -> ft.Container: + def on_select(e: ft.ContextMenuSelectEvent): + item = e.item.content if e.item else f"item #{e.item_index}" + status.value = f"Selected: {item}" + status.update() + + def on_dismiss(_): + if status.value == "Open the menu in the area below.": + status.value = "Menu dismissed." + status.update() + + menu = ft.ContextMenu( + primary_trigger=trigger, + primary_items=[ + ft.PopupMenuItem(icon=ft.Icons.EDIT, content="Edit"), + ft.PopupMenuItem(icon=ft.Icons.CONTENT_COPY, content="Duplicate"), + ft.PopupMenuItem(icon=ft.Icons.DELETE, content="Delete"), + ], + on_select=on_select, + on_dismiss=on_dismiss, + content=ft.Container( + width=280, + height=120, + border=ft.Border.all(1, ft.Colors.OUTLINE), + border_radius=8, + bgcolor=ft.Colors.SURFACE, + alignment=ft.Alignment.CENTER, + content=ft.Text( + text_align=ft.TextAlign.CENTER, + value=( + "Press and hold inside the area." + if trigger == ft.ContextMenuTrigger.LONG_PRESS + else "Press mouse button down inside the area." + ), + ), + ), + ) + + return ft.Container( + width=320, + padding=12, + border=ft.Border.all(1, ft.Colors.RED), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=ft.Column( + spacing=8, + controls=[ + ft.Text(trigger.name, weight=ft.FontWeight.BOLD), + menu, + status := ft.Text("Open the menu in the area below.", size=11), + ], + ), + ) + + +async def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + if page.web: + await ft.BrowserContextMenu().disable() + + page.appbar = ft.AppBar(title="ContextMenuTrigger Showcase") + page.add( + ft.Text("Compare context-menu open behavior for primary trigger modes."), + ft.Row( + wrap=True, + spacing=12, + expand=True, + scroll=ft.ScrollMode.AUTO, + alignment=ft.MainAxisAlignment.CENTER, + controls=[showcase_card(trigger) for trigger in ft.ContextMenuTrigger], + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/contextmenutrigger.md b/sdk/python/packages/flet/docs/types/contextmenutrigger.md index 1b23c4ccd8..d02b4a7fe5 100644 --- a/sdk/python/packages/flet/docs/types/contextmenutrigger.md +++ b/sdk/python/packages/flet/docs/types/contextmenutrigger.md @@ -1 +1,16 @@ -{{ class_all_options("flet.ContextMenuTrigger", separate_signature=False) }} +--- +class_name: flet.ContextMenuTrigger +examples: ../../examples/controls/types/context_menu_trigger +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} From 7f0775ee2f6decb6be10f5c5a9da503a05628836 Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Thu, 26 Feb 2026 15:13:14 +0100 Subject: [PATCH 32/71] add TileAffinity showcase example and update documentation --- .../controls/types/tile_affinity/showcase.py | 50 +++++++++++++++++++ .../packages/flet/docs/types/tileaffinity.md | 17 ++++++- 2 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 sdk/python/examples/controls/types/tile_affinity/showcase.py diff --git a/sdk/python/examples/controls/types/tile_affinity/showcase.py b/sdk/python/examples/controls/types/tile_affinity/showcase.py new file mode 100644 index 0000000000..d61d84de66 --- /dev/null +++ b/sdk/python/examples/controls/types/tile_affinity/showcase.py @@ -0,0 +1,50 @@ +import flet as ft + + +def showcase_card(affinity: ft.TileAffinity) -> ft.Container: + tile = ft.ExpansionTile( + title="Project settings", + subtitle="Compare where the expand arrow appears.", + affinity=affinity, + expanded=True, + controls=[ + ft.ListTile(title="General"), + ft.ListTile(title="Notifications"), + ], + ) + + return ft.Container( + width=360, + padding=12, + border=ft.Border.all(1, ft.Colors.RED), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=ft.Column( + spacing=8, + controls=[ + ft.Text(affinity.name, weight=ft.FontWeight.BOLD), + tile, + ], + ), + ) + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + page.appbar = ft.AppBar(title="TileAffinity Showcase") + page.add( + ft.Text("Compare expand-arrow placement in ExpansionTile."), + ft.Row( + wrap=True, + spacing=12, + expand=True, + scroll=ft.ScrollMode.AUTO, + alignment=ft.MainAxisAlignment.CENTER, + controls=[showcase_card(affinity) for affinity in ft.TileAffinity], + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/tileaffinity.md b/sdk/python/packages/flet/docs/types/tileaffinity.md index 9fb36d04f8..e5327a850d 100644 --- a/sdk/python/packages/flet/docs/types/tileaffinity.md +++ b/sdk/python/packages/flet/docs/types/tileaffinity.md @@ -1 +1,16 @@ -{{ class_all_options("flet.TileAffinity", separate_signature=False) }} +--- +class_name: flet.TileAffinity +examples: ../../examples/controls/types/tile_affinity +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} From 46646301ef6772d260a04eb9ebf35cf0ad842e54 Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Thu, 26 Feb 2026 15:15:49 +0100 Subject: [PATCH 33/71] add TextCapitalization showcase example and update documentation --- .../types/text_capitalization/showcase.py | 46 +++++++++++++++++++ .../flet/docs/types/textcapitalization.md | 17 ++++++- 2 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 sdk/python/examples/controls/types/text_capitalization/showcase.py diff --git a/sdk/python/examples/controls/types/text_capitalization/showcase.py b/sdk/python/examples/controls/types/text_capitalization/showcase.py new file mode 100644 index 0000000000..2e34595f77 --- /dev/null +++ b/sdk/python/examples/controls/types/text_capitalization/showcase.py @@ -0,0 +1,46 @@ +import flet as ft + + +def showcase_card(cap: ft.TextCapitalization) -> ft.Container: + field = ft.TextField( + width=260, + label="Type here", + capitalization=cap, + border=ft.InputBorder.OUTLINE, + ) + + return ft.Container( + width=320, + padding=12, + border=ft.Border.all(1, ft.Colors.RED), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=ft.Column( + spacing=8, + controls=[ + ft.Text(cap.name, weight=ft.FontWeight.BOLD), + field, + ], + ), + ) + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + page.appbar = ft.AppBar(title="TextCapitalization Showcase") + page.add( + ft.Text("Compare keyboard capitalization preferences for text fields."), + ft.Row( + wrap=True, + spacing=12, + expand=True, + scroll=ft.ScrollMode.AUTO, + alignment=ft.MainAxisAlignment.CENTER, + controls=[showcase_card(c) for c in ft.TextCapitalization], + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/textcapitalization.md b/sdk/python/packages/flet/docs/types/textcapitalization.md index 361f258447..d33ef51986 100644 --- a/sdk/python/packages/flet/docs/types/textcapitalization.md +++ b/sdk/python/packages/flet/docs/types/textcapitalization.md @@ -1 +1,16 @@ -{{ class_all_options("flet.TextCapitalization", separate_signature=False) }} +--- +class_name: flet.TextCapitalization +examples: ../../examples/controls/types/text_capitalization +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} From 1427029d75e35ad8d09de1cc1014fbb252434767 Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Thu, 26 Feb 2026 15:17:19 +0100 Subject: [PATCH 34/71] add SliderInteraction showcase example and update documentation --- .../types/slider_interaction/showcase.py | 61 +++++++++++++++++++ .../controls/types/text_align/showcase.py | 4 +- .../controls/types/text_overflow/showcase.py | 4 +- .../controls/types/url_target/showcase.py | 4 +- .../flet/docs/types/sliderinteraction.md | 17 +++++- .../flet/src/flet/controls/core/row.py | 1 - .../src/flet/controls/material/app_bar.py | 3 +- 7 files changed, 85 insertions(+), 9 deletions(-) create mode 100644 sdk/python/examples/controls/types/slider_interaction/showcase.py diff --git a/sdk/python/examples/controls/types/slider_interaction/showcase.py b/sdk/python/examples/controls/types/slider_interaction/showcase.py new file mode 100644 index 0000000000..b17902ef7e --- /dev/null +++ b/sdk/python/examples/controls/types/slider_interaction/showcase.py @@ -0,0 +1,61 @@ +import flet as ft + + +def showcase_card(interaction: ft.SliderInteraction) -> ft.Container: + value_text = ft.Text("Value: 50") + + def on_change(e: ft.Event[ft.Slider]): + value_text.value = f"Value: {round(e.control.value)}" + value_text.update() + + return ft.Container( + width=340, + padding=12, + border=ft.Border.all(1, ft.Colors.RED), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=ft.Column( + spacing=8, + controls=[ + ft.Text(interaction.name, weight=ft.FontWeight.BOLD), + value_text, + ft.Container( + width=260, + padding=ft.Padding.symmetric(horizontal=8), + border=ft.Border.all(1, ft.Colors.OUTLINE), + border_radius=8, + bgcolor=ft.Colors.SURFACE, + content=ft.Slider( + min=0, + max=100, + value=50, + divisions=20, + interaction=interaction, + on_change=on_change, + ), + ), + ft.Text("Try tapping track and dragging thumb.", size=11), + ], + ), + ) + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + page.appbar = ft.AppBar(title="SliderInteraction Showcase") + page.add( + ft.Text("Compare which gestures are accepted by each slider mode."), + ft.Row( + wrap=True, + spacing=12, + expand=True, + scroll=ft.ScrollMode.AUTO, + alignment=ft.MainAxisAlignment.CENTER, + controls=[showcase_card(i) for i in ft.SliderInteraction], + ), + ) + + +ft.run(main) diff --git a/sdk/python/examples/controls/types/text_align/showcase.py b/sdk/python/examples/controls/types/text_align/showcase.py index c4be4d985b..f3716b0098 100644 --- a/sdk/python/examples/controls/types/text_align/showcase.py +++ b/sdk/python/examples/controls/types/text_align/showcase.py @@ -1,7 +1,7 @@ import flet as ft -def align_card(text_align: ft.TextAlign) -> ft.Container: +def showcase_card(text_align: ft.TextAlign) -> ft.Container: return ft.Container( width=280, padding=12, @@ -42,7 +42,7 @@ def main(page: ft.Page): expand=True, scroll=ft.ScrollMode.AUTO, alignment=ft.MainAxisAlignment.CENTER, - controls=[align_card(text_align) for text_align in ft.TextAlign], + controls=[showcase_card(text_align) for text_align in ft.TextAlign], ), ) diff --git a/sdk/python/examples/controls/types/text_overflow/showcase.py b/sdk/python/examples/controls/types/text_overflow/showcase.py index 5e9339db5c..2d2faa9028 100644 --- a/sdk/python/examples/controls/types/text_overflow/showcase.py +++ b/sdk/python/examples/controls/types/text_overflow/showcase.py @@ -1,7 +1,7 @@ import flet as ft -def overflow_card(overflow: ft.TextOverflow) -> ft.Container: +def showcase_card(overflow: ft.TextOverflow) -> ft.Container: return ft.Container( width=320, padding=12, @@ -43,7 +43,7 @@ def main(page: ft.Page): expand=True, scroll=ft.ScrollMode.AUTO, alignment=ft.MainAxisAlignment.CENTER, - controls=[overflow_card(overflow) for overflow in ft.TextOverflow], + controls=[showcase_card(overflow) for overflow in ft.TextOverflow], ), ) diff --git a/sdk/python/examples/controls/types/url_target/showcase.py b/sdk/python/examples/controls/types/url_target/showcase.py index e55166ec7c..6a1300f9c9 100644 --- a/sdk/python/examples/controls/types/url_target/showcase.py +++ b/sdk/python/examples/controls/types/url_target/showcase.py @@ -11,7 +11,7 @@ async def open_url(target: ft.UrlTarget): status.value = f"Opened {url} with target {target.name}" status.update() - def target_card(target: ft.UrlTarget) -> ft.Container: + def showcase_card(target: ft.UrlTarget) -> ft.Container: return ft.Container( width=280, padding=12, @@ -42,7 +42,7 @@ def target_card(target: ft.UrlTarget) -> ft.Container: expand=True, scroll=ft.ScrollMode.AUTO, alignment=ft.MainAxisAlignment.CENTER, - controls=[target_card(target) for target in ft.UrlTarget], + controls=[showcase_card(target) for target in ft.UrlTarget], ), ) diff --git a/sdk/python/packages/flet/docs/types/sliderinteraction.md b/sdk/python/packages/flet/docs/types/sliderinteraction.md index a8e0e8c6b7..0b5cb54fe8 100644 --- a/sdk/python/packages/flet/docs/types/sliderinteraction.md +++ b/sdk/python/packages/flet/docs/types/sliderinteraction.md @@ -1 +1,16 @@ -{{ class_all_options("flet.SliderInteraction", separate_signature=False) }} +--- +class_name: flet.SliderInteraction +examples: ../../examples/controls/types/slider_interaction +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} diff --git a/sdk/python/packages/flet/src/flet/controls/core/row.py b/sdk/python/packages/flet/src/flet/controls/core/row.py index dacc85c6b4..ab2c2724ec 100644 --- a/sdk/python/packages/flet/src/flet/controls/core/row.py +++ b/sdk/python/packages/flet/src/flet/controls/core/row.py @@ -35,7 +35,6 @@ class Row(LayoutControl, ScrollableControl, AdaptiveControl): ], ) ``` - """ controls: list[Control] = field(default_factory=list) diff --git a/sdk/python/packages/flet/src/flet/controls/material/app_bar.py b/sdk/python/packages/flet/src/flet/controls/material/app_bar.py index 543e2f02fc..d9a4ec749c 100644 --- a/sdk/python/packages/flet/src/flet/controls/material/app_bar.py +++ b/sdk/python/packages/flet/src/flet/controls/material/app_bar.py @@ -19,15 +19,16 @@ class AppBar(AdaptiveControl): """ A material design app bar. + Example: ```python ft.AppBar( leading=ft.Icon(ft.Icons.MENU), title=ft.Text("Dashboard"), + bgcolor=ft.Colors.SURFACE_CONTAINER, actions=[ ft.IconButton(ft.Icons.SEARCH), ft.IconButton(ft.Icons.MORE_VERT), ], - bgcolor=ft.Colors.SURFACE_CONTAINER, ) ``` """ From fb4285eaab7861ce44fb558cbdd15ad901bbbfa1 Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Thu, 26 Feb 2026 15:20:25 +0100 Subject: [PATCH 35/71] add TabAlignment showcase example and update documentation --- .../controls/types/tab_alignment/showcase.py | 69 +++++++++++++++++++ .../packages/flet/docs/types/tabalignment.md | 17 ++++- 2 files changed, 85 insertions(+), 1 deletion(-) create mode 100644 sdk/python/examples/controls/types/tab_alignment/showcase.py diff --git a/sdk/python/examples/controls/types/tab_alignment/showcase.py b/sdk/python/examples/controls/types/tab_alignment/showcase.py new file mode 100644 index 0000000000..595c4a1521 --- /dev/null +++ b/sdk/python/examples/controls/types/tab_alignment/showcase.py @@ -0,0 +1,69 @@ +import flet as ft + + +def showcase_card(alignment: ft.TabAlignment) -> ft.Container: + scrollable = alignment != ft.TabAlignment.FILL + tabs_count = 4 + + tab_bar = ft.TabBar( + scrollable=scrollable, + tab_alignment=alignment, + tabs=[ft.Tab(label=f"Tab {i + 1}") for i in range(tabs_count)], + ) + + tab_view = ft.Container( + height=70, + alignment=ft.Alignment.CENTER, + border=ft.Border.all(1, ft.Colors.OUTLINE), + border_radius=8, + bgcolor=ft.Colors.SURFACE, + content=ft.TabBarView( + controls=[ + ft.Container( + alignment=ft.Alignment.CENTER, + content=ft.Text(f"View {i + 1}"), + ) + for i in range(tabs_count) + ] + ), + ) + + return ft.Container( + width=380, + padding=12, + border=ft.Border.all(1, ft.Colors.RED), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=ft.Column( + spacing=8, + controls=[ + ft.Text(alignment.name, weight=ft.FontWeight.BOLD), + ft.Tabs( + length=tabs_count, + selected_index=1, + content=ft.Column(spacing=8, controls=[tab_bar, tab_view]), + ), + ], + ), + ) + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + page.appbar = ft.AppBar(title="TabAlignment Showcase") + page.add( + ft.Text("Compare how tabs are positioned within the tab bar."), + ft.Row( + wrap=True, + spacing=12, + expand=True, + scroll=ft.ScrollMode.AUTO, + alignment=ft.MainAxisAlignment.CENTER, + controls=[showcase_card(alignment) for alignment in ft.TabAlignment], + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/tabalignment.md b/sdk/python/packages/flet/docs/types/tabalignment.md index 094d21adf8..4a6bcff4ba 100644 --- a/sdk/python/packages/flet/docs/types/tabalignment.md +++ b/sdk/python/packages/flet/docs/types/tabalignment.md @@ -1 +1,16 @@ -{{ class_all_options("flet.TabAlignment", separate_signature=False) }} +--- +class_name: flet.TabAlignment +examples: ../../examples/controls/types/tab_alignment +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} From 91527270831d3ea82f5e4e437997f21d04a2ebd8 Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Thu, 26 Feb 2026 15:23:22 +0100 Subject: [PATCH 36/71] add TimePickerEntryMode showcase example and update documentation --- .../types/time_picker_entry_mode/showcase.py | 50 +++++++++++++++++++ .../flet/docs/types/timepickerentrymode.md | 17 ++++++- 2 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 sdk/python/examples/controls/types/time_picker_entry_mode/showcase.py diff --git a/sdk/python/examples/controls/types/time_picker_entry_mode/showcase.py b/sdk/python/examples/controls/types/time_picker_entry_mode/showcase.py new file mode 100644 index 0000000000..e3c1fecd0b --- /dev/null +++ b/sdk/python/examples/controls/types/time_picker_entry_mode/showcase.py @@ -0,0 +1,50 @@ +from datetime import time + +import flet as ft + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + picker = ft.TimePicker(value=time(hour=19, minute=30)) + + def open_picker(entry_mode: ft.TimePickerEntryMode): + picker.entry_mode = entry_mode + page.show_dialog(picker) + + def showcase_card(entry_mode: ft.TimePickerEntryMode) -> ft.Container: + return ft.Container( + width=320, + padding=12, + border=ft.Border.all(1, ft.Colors.RED), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=ft.Column( + spacing=8, + controls=[ + ft.Text(entry_mode.name, weight=ft.FontWeight.BOLD), + ft.Button( + "Open TimePicker", + icon=ft.Icons.SCHEDULE, + on_click=lambda _, m=entry_mode: open_picker(m), + ), + ], + ), + ) + + page.appbar = ft.AppBar(title="TimePickerEntryMode Showcase") + page.add( + ft.Text("Open the picker to compare dial/input entry modes."), + ft.Row( + wrap=True, + spacing=12, + expand=True, + scroll=ft.ScrollMode.AUTO, + alignment=ft.MainAxisAlignment.CENTER, + controls=[showcase_card(m) for m in ft.TimePickerEntryMode], + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/timepickerentrymode.md b/sdk/python/packages/flet/docs/types/timepickerentrymode.md index 5d03138a55..3fe38ba71c 100644 --- a/sdk/python/packages/flet/docs/types/timepickerentrymode.md +++ b/sdk/python/packages/flet/docs/types/timepickerentrymode.md @@ -1 +1,16 @@ -{{ class_all_options("flet.TimePickerEntryMode", separate_signature=False) }} +--- +class_name: flet.TimePickerEntryMode +examples: ../../examples/controls/types/time_picker_entry_mode +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} From 0d5486f32daa5d60c6b6e65d517792ec21493e73 Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Thu, 26 Feb 2026 15:25:31 +0100 Subject: [PATCH 37/71] add TimePickerHourFormat showcase example and update documentation --- .../controls/types/alignment/container.py | 2 +- .../controls/types/blend_mode/showcase.py | 4 +- .../controls/types/clip_behavior/showcase.py | 4 +- .../showcase.py | 4 +- .../controls/types/font_weight/showcase.py | 4 +- .../controls/types/image_repeat/showcase.py | 4 +- .../controls/types/label_position/showcase.py | 5 +- .../controls/types/mouse_cursor/showcase.py | 4 +- .../controls/types/orientation/showcase.py | 4 +- .../controls/types/scroll_mode/showcase.py | 4 +- .../controls/types/stroke_cap/showcase.py | 4 +- .../controls/types/stroke_join/showcase.py | 4 +- .../controls/types/theme_mode/showcase.py | 4 +- .../types/time_picker_hour_format/showcase.py | 55 +++++++++++++++++++ .../flet/docs/types/timepickerhourformat.md | 17 +++++- 15 files changed, 96 insertions(+), 27 deletions(-) create mode 100644 sdk/python/examples/controls/types/time_picker_hour_format/showcase.py diff --git a/sdk/python/examples/controls/types/alignment/container.py b/sdk/python/examples/controls/types/alignment/container.py index 3ce99ab2a6..b6f0f1ca35 100644 --- a/sdk/python/examples/controls/types/alignment/container.py +++ b/sdk/python/examples/controls/types/alignment/container.py @@ -27,7 +27,7 @@ def main(page: ft.Page): content=ft.Button("-0.5, -0.5"), bgcolor=ft.Colors.AMBER, padding=15, - alignment=ft.alignment.Alignment(-0.5, -0.5), + alignment=ft.Alignment(-0.5, -0.5), width=150, height=150, ), diff --git a/sdk/python/examples/controls/types/blend_mode/showcase.py b/sdk/python/examples/controls/types/blend_mode/showcase.py index 0a68046a6c..4d6df8d7ba 100644 --- a/sdk/python/examples/controls/types/blend_mode/showcase.py +++ b/sdk/python/examples/controls/types/blend_mode/showcase.py @@ -1,7 +1,7 @@ import flet as ft -def blend_mode_card(blend_mode: ft.BlendMode) -> ft.Container: +def showcase_card(blend_mode: ft.BlendMode) -> ft.Container: return ft.Container( width=280, padding=12, @@ -39,7 +39,7 @@ def main(page: ft.Page): expand=True, scroll=ft.ScrollMode.AUTO, alignment=ft.MainAxisAlignment.CENTER, - controls=[blend_mode_card(blend_mode) for blend_mode in ft.BlendMode], + controls=[showcase_card(blend_mode) for blend_mode in ft.BlendMode], ), ) diff --git a/sdk/python/examples/controls/types/clip_behavior/showcase.py b/sdk/python/examples/controls/types/clip_behavior/showcase.py index 47f10f066f..953a2adf71 100644 --- a/sdk/python/examples/controls/types/clip_behavior/showcase.py +++ b/sdk/python/examples/controls/types/clip_behavior/showcase.py @@ -42,7 +42,7 @@ def clip_preview(clip_behavior: ft.ClipBehavior) -> ft.Container: ) -def clip_card(clip_behavior: ft.ClipBehavior) -> ft.Container: +def showcase_card(clip_behavior: ft.ClipBehavior) -> ft.Container: return ft.Container( width=280, padding=12, @@ -72,7 +72,7 @@ def main(page: ft.Page): expand=True, scroll=ft.ScrollMode.AUTO, alignment=ft.MainAxisAlignment.CENTER, - controls=[clip_card(cb) for cb in ft.ClipBehavior], + controls=[showcase_card(cb) for cb in ft.ClipBehavior], ), ) diff --git a/sdk/python/examples/controls/types/floating_action_button_location/showcase.py b/sdk/python/examples/controls/types/floating_action_button_location/showcase.py index d2a145cd10..a97d1325a2 100644 --- a/sdk/python/examples/controls/types/floating_action_button_location/showcase.py +++ b/sdk/python/examples/controls/types/floating_action_button_location/showcase.py @@ -1,7 +1,7 @@ import flet as ft -def location_card(location: ft.FloatingActionButtonLocation) -> ft.Container: +def showcase_card(location: ft.FloatingActionButtonLocation) -> ft.Container: mini = location.name.startswith("MINI_") return ft.Container( width=300, @@ -57,7 +57,7 @@ def main(page: ft.Page): scroll=ft.ScrollMode.AUTO, alignment=ft.MainAxisAlignment.CENTER, controls=[ - location_card(location) for location in ft.FloatingActionButtonLocation + showcase_card(location) for location in ft.FloatingActionButtonLocation ], ), ) diff --git a/sdk/python/examples/controls/types/font_weight/showcase.py b/sdk/python/examples/controls/types/font_weight/showcase.py index a224b76f44..38b9d6e25f 100644 --- a/sdk/python/examples/controls/types/font_weight/showcase.py +++ b/sdk/python/examples/controls/types/font_weight/showcase.py @@ -3,7 +3,7 @@ SAMPLE_TEXT = "Sphinx of black quartz" -def weight_card(weight: ft.FontWeight) -> ft.Container: +def showcase_card(weight: ft.FontWeight) -> ft.Container: return ft.Container( width=300, padding=12, @@ -33,7 +33,7 @@ def main(page: ft.Page): expand=True, scroll=ft.ScrollMode.AUTO, alignment=ft.MainAxisAlignment.CENTER, - controls=[weight_card(weight) for weight in ft.FontWeight], + controls=[showcase_card(weight) for weight in ft.FontWeight], ), ) diff --git a/sdk/python/examples/controls/types/image_repeat/showcase.py b/sdk/python/examples/controls/types/image_repeat/showcase.py index 0d15a35fa4..57293f92c2 100644 --- a/sdk/python/examples/controls/types/image_repeat/showcase.py +++ b/sdk/python/examples/controls/types/image_repeat/showcase.py @@ -1,7 +1,7 @@ import flet as ft -def repeat_card(repeat: ft.ImageRepeat) -> ft.Container: +def showcase_card(repeat: ft.ImageRepeat) -> ft.Container: return ft.Container( width=280, padding=12, @@ -43,7 +43,7 @@ def main(page: ft.Page): expand=True, scroll=ft.ScrollMode.AUTO, alignment=ft.MainAxisAlignment.CENTER, - controls=[repeat_card(repeat) for repeat in ft.ImageRepeat], + controls=[showcase_card(repeat) for repeat in ft.ImageRepeat], ), ) diff --git a/sdk/python/examples/controls/types/label_position/showcase.py b/sdk/python/examples/controls/types/label_position/showcase.py index 014ae76f8f..9382159a76 100644 --- a/sdk/python/examples/controls/types/label_position/showcase.py +++ b/sdk/python/examples/controls/types/label_position/showcase.py @@ -1,7 +1,7 @@ import flet as ft -def label_position_card(label_position: ft.LabelPosition) -> ft.Container: +def showcase_card(label_position: ft.LabelPosition) -> ft.Container: return ft.Container( width=280, padding=12, @@ -53,8 +53,7 @@ def main(page: ft.Page): scroll=ft.ScrollMode.AUTO, alignment=ft.MainAxisAlignment.CENTER, controls=[ - label_position_card(label_position) - for label_position in ft.LabelPosition + showcase_card(label_position) for label_position in ft.LabelPosition ], ), ) diff --git a/sdk/python/examples/controls/types/mouse_cursor/showcase.py b/sdk/python/examples/controls/types/mouse_cursor/showcase.py index 49b04f7fc9..9482373dbd 100644 --- a/sdk/python/examples/controls/types/mouse_cursor/showcase.py +++ b/sdk/python/examples/controls/types/mouse_cursor/showcase.py @@ -1,7 +1,7 @@ import flet as ft -def cursor_card(cursor: ft.MouseCursor) -> ft.GestureDetector: +def showcase_card(cursor: ft.MouseCursor) -> ft.GestureDetector: return ft.GestureDetector( mouse_cursor=cursor, content=ft.Container( @@ -39,7 +39,7 @@ def main(page: ft.Page): expand=True, scroll=ft.ScrollMode.AUTO, alignment=ft.MainAxisAlignment.CENTER, - controls=[cursor_card(cursor) for cursor in ft.MouseCursor], + controls=[showcase_card(cursor) for cursor in ft.MouseCursor], ), ) diff --git a/sdk/python/examples/controls/types/orientation/showcase.py b/sdk/python/examples/controls/types/orientation/showcase.py index c6204859bb..d6528d4908 100644 --- a/sdk/python/examples/controls/types/orientation/showcase.py +++ b/sdk/python/examples/controls/types/orientation/showcase.py @@ -7,7 +7,7 @@ def main(page: ft.Page): page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER - def orientation_card(orientation: ft.Orientation) -> ft.Container: + def showcase_card(orientation: ft.Orientation) -> ft.Container: picker = ft.TimePicker( value=time(hour=10, minute=30), help_text=f"{orientation.name} time picker", @@ -42,7 +42,7 @@ def orientation_card(orientation: ft.Orientation) -> ft.Container: expand=True, scroll=ft.ScrollMode.AUTO, alignment=ft.MainAxisAlignment.CENTER, - controls=[orientation_card(orientation) for orientation in ft.Orientation], + controls=[showcase_card(orientation) for orientation in ft.Orientation], ), ) diff --git a/sdk/python/examples/controls/types/scroll_mode/showcase.py b/sdk/python/examples/controls/types/scroll_mode/showcase.py index 45e02117b1..7c0b7f0073 100644 --- a/sdk/python/examples/controls/types/scroll_mode/showcase.py +++ b/sdk/python/examples/controls/types/scroll_mode/showcase.py @@ -1,7 +1,7 @@ import flet as ft -def scroll_mode_card(scroll_mode: ft.ScrollMode) -> ft.Container: +def showcase_card(scroll_mode: ft.ScrollMode) -> ft.Container: return ft.Container( width=280, padding=12, @@ -43,7 +43,7 @@ def main(page: ft.Page): expand=True, scroll=ft.ScrollMode.AUTO, alignment=ft.MainAxisAlignment.CENTER, - controls=[scroll_mode_card(scroll_mode) for scroll_mode in ft.ScrollMode], + controls=[showcase_card(scroll_mode) for scroll_mode in ft.ScrollMode], ), ) diff --git a/sdk/python/examples/controls/types/stroke_cap/showcase.py b/sdk/python/examples/controls/types/stroke_cap/showcase.py index a286e47c57..c76a55f2d4 100644 --- a/sdk/python/examples/controls/types/stroke_cap/showcase.py +++ b/sdk/python/examples/controls/types/stroke_cap/showcase.py @@ -2,7 +2,7 @@ import flet.canvas as cv -def cap_card(stroke_cap: ft.StrokeCap) -> ft.Container: +def showcase_card(stroke_cap: ft.StrokeCap) -> ft.Container: return ft.Container( width=280, padding=12, @@ -62,7 +62,7 @@ def main(page: ft.Page): expand=True, scroll=ft.ScrollMode.AUTO, alignment=ft.MainAxisAlignment.CENTER, - controls=[cap_card(stroke_cap) for stroke_cap in ft.StrokeCap], + controls=[showcase_card(stroke_cap) for stroke_cap in ft.StrokeCap], ), ) diff --git a/sdk/python/examples/controls/types/stroke_join/showcase.py b/sdk/python/examples/controls/types/stroke_join/showcase.py index 1094c8aa53..21d7667b2f 100644 --- a/sdk/python/examples/controls/types/stroke_join/showcase.py +++ b/sdk/python/examples/controls/types/stroke_join/showcase.py @@ -2,7 +2,7 @@ import flet.canvas as cv -def join_card(stroke_join: ft.StrokeJoin) -> ft.Container: +def showcase_card(stroke_join: ft.StrokeJoin) -> ft.Container: return ft.Container( width=280, padding=12, @@ -51,7 +51,7 @@ def main(page: ft.Page): expand=True, scroll=ft.ScrollMode.AUTO, alignment=ft.MainAxisAlignment.CENTER, - controls=[join_card(stroke_join) for stroke_join in ft.StrokeJoin], + controls=[showcase_card(stroke_join) for stroke_join in ft.StrokeJoin], ), ) diff --git a/sdk/python/examples/controls/types/theme_mode/showcase.py b/sdk/python/examples/controls/types/theme_mode/showcase.py index 969fdd7d12..75b9913f98 100644 --- a/sdk/python/examples/controls/types/theme_mode/showcase.py +++ b/sdk/python/examples/controls/types/theme_mode/showcase.py @@ -10,7 +10,7 @@ def apply_theme_mode(theme_mode: ft.ThemeMode): status.value = f"Active mode: {theme_mode.name}" page.update() - def mode_card(theme_mode: ft.ThemeMode) -> ft.Container: + def showcase_card(theme_mode: ft.ThemeMode) -> ft.Container: return ft.Container( width=250, padding=12, @@ -53,7 +53,7 @@ def mode_card(theme_mode: ft.ThemeMode) -> ft.Container: expand=True, scroll=ft.ScrollMode.AUTO, alignment=ft.MainAxisAlignment.CENTER, - controls=[mode_card(theme_mode) for theme_mode in ft.ThemeMode], + controls=[showcase_card(theme_mode) for theme_mode in ft.ThemeMode], ), ) diff --git a/sdk/python/examples/controls/types/time_picker_hour_format/showcase.py b/sdk/python/examples/controls/types/time_picker_hour_format/showcase.py new file mode 100644 index 0000000000..99f9477c26 --- /dev/null +++ b/sdk/python/examples/controls/types/time_picker_hour_format/showcase.py @@ -0,0 +1,55 @@ +from datetime import time + +import flet as ft + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + time_picker = ft.TimePicker( + value=time(hour=19, minute=30), + help_text="Pick meeting time", + ) + + def open_picker(hour_format: ft.TimePickerHourFormat): + time_picker.hour_format = hour_format + page.show_dialog(time_picker) + + def showcase_card(hour_format: ft.TimePickerHourFormat) -> ft.Container: + return ft.Container( + width=300, + padding=12, + border=ft.Border.all(1, ft.Colors.RED), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=ft.Column( + spacing=8, + controls=[ + ft.Text(hour_format.name, weight=ft.FontWeight.BOLD), + ft.Button( + "Open TimePicker", + icon=ft.Icons.SCHEDULE, + on_click=lambda _, f=hour_format: open_picker(f), + ), + ], + ), + ) + + page.appbar = ft.AppBar(title="TimePickerHourFormat Showcase") + page.add( + ft.Text("Open the picker to compare 12h, 24h, and system modes."), + ft.Row( + wrap=True, + spacing=12, + expand=True, + scroll=ft.ScrollMode.AUTO, + alignment=ft.MainAxisAlignment.CENTER, + controls=[ + showcase_card(hour_format) for hour_format in ft.TimePickerHourFormat + ], + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/timepickerhourformat.md b/sdk/python/packages/flet/docs/types/timepickerhourformat.md index 860e231e99..3134538cdc 100644 --- a/sdk/python/packages/flet/docs/types/timepickerhourformat.md +++ b/sdk/python/packages/flet/docs/types/timepickerhourformat.md @@ -1 +1,16 @@ -{{ class_all_options("flet.TimePickerHourFormat", separate_signature=False) }} +--- +class_name: flet.TimePickerHourFormat +examples: ../../examples/controls/types/time_picker_hour_format +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} From 24b93cf02bd1b2f7370135cda269291d6b325235 Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Thu, 26 Feb 2026 15:30:58 +0100 Subject: [PATCH 38/71] add BlurStyle showcase example and update documentation --- .../controls/types/blur_style/showcase.py | 58 +++++++++++++++++++ .../packages/flet/docs/types/blurstyle.md | 17 +++++- 2 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 sdk/python/examples/controls/types/blur_style/showcase.py diff --git a/sdk/python/examples/controls/types/blur_style/showcase.py b/sdk/python/examples/controls/types/blur_style/showcase.py new file mode 100644 index 0000000000..13283c8a63 --- /dev/null +++ b/sdk/python/examples/controls/types/blur_style/showcase.py @@ -0,0 +1,58 @@ +import flet as ft + + +def showcase_card(style: ft.BlurStyle) -> ft.Container: + sample = ft.Container( + width=130, + height=90, + border_radius=12, + bgcolor=ft.Colors.BLUE_400, + shadow=ft.BoxShadow( + blur_radius=28, + spread_radius=3, + color=ft.Colors.RED_400, + offset=ft.Offset(10, 10), + blur_style=style, + ), + ) + + return ft.Container( + width=300, + height=180, + padding=12, + border=ft.Border.all(1, ft.Colors.RED), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=ft.Column( + spacing=12, + horizontal_alignment=ft.CrossAxisAlignment.CENTER, + controls=[ + ft.Text(style.name, weight=ft.FontWeight.BOLD), + sample, + ], + ), + ) + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + page.appbar = ft.AppBar(title="BlurStyle Showcase") + page.add( + ft.Text( + "Compare shadow blur rendering styles. " + "The blue box uses red shadow with selected blur style." + ), + ft.Row( + wrap=True, + spacing=12, + expand=True, + scroll=ft.ScrollMode.AUTO, + alignment=ft.MainAxisAlignment.CENTER, + controls=[showcase_card(style) for style in ft.BlurStyle], + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/blurstyle.md b/sdk/python/packages/flet/docs/types/blurstyle.md index 9f97f43673..daa337dc6c 100644 --- a/sdk/python/packages/flet/docs/types/blurstyle.md +++ b/sdk/python/packages/flet/docs/types/blurstyle.md @@ -1 +1,16 @@ -{{ class_all_options("flet.BlurStyle", separate_signature=False) }} +--- +class_name: flet.BlurStyle +examples: ../../examples/controls/types/blur_style +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} From 7510c7fd3967cc586064fdabc8d7fc54ca83585b Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Thu, 26 Feb 2026 15:31:53 +0100 Subject: [PATCH 39/71] add ListTileTitleAlignment showcase example and update documentation --- .../list_tile_title_alignment/showcase.py | 55 +++++++++++++++++++ .../flet/docs/types/listtiletitlealignment.md | 17 +++++- 2 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 sdk/python/examples/controls/types/list_tile_title_alignment/showcase.py diff --git a/sdk/python/examples/controls/types/list_tile_title_alignment/showcase.py b/sdk/python/examples/controls/types/list_tile_title_alignment/showcase.py new file mode 100644 index 0000000000..d77338d483 --- /dev/null +++ b/sdk/python/examples/controls/types/list_tile_title_alignment/showcase.py @@ -0,0 +1,55 @@ +import flet as ft + + +def showcase_card(alignment: ft.ListTileTitleAlignment) -> ft.Container: + return ft.Container( + width=380, + padding=12, + border=ft.Border.all(1, ft.Colors.RED), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=ft.Column( + spacing=8, + controls=[ + ft.Text(alignment.name, weight=ft.FontWeight.BOLD), + ft.Container( + border=ft.Border.all(1, ft.Colors.OUTLINE), + border_radius=8, + bgcolor=ft.Colors.SURFACE, + content=ft.ListTile( + title_alignment=alignment, + leading=ft.CircleAvatar(content=ft.Text("JD")), + title=ft.Text("Jane Doe"), + subtitle=ft.Text( + "This subtitle helps visualize vertical alignment." + ), + is_three_line=True, + trailing=ft.Icon(ft.Icons.MORE_VERT), + ), + ), + ], + ), + ) + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + page.appbar = ft.AppBar(title="ListTileTitleAlignment Showcase") + page.add( + ft.Text("Compare leading/trailing alignment against title area."), + ft.Row( + wrap=True, + spacing=12, + expand=True, + scroll=ft.ScrollMode.AUTO, + alignment=ft.MainAxisAlignment.CENTER, + controls=[ + showcase_card(alignment) for alignment in ft.ListTileTitleAlignment + ], + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/listtiletitlealignment.md b/sdk/python/packages/flet/docs/types/listtiletitlealignment.md index 2f08229248..2b1c888e98 100644 --- a/sdk/python/packages/flet/docs/types/listtiletitlealignment.md +++ b/sdk/python/packages/flet/docs/types/listtiletitlealignment.md @@ -1 +1,16 @@ -{{ class_all_options("flet.ListTileTitleAlignment", separate_signature=False) }} +--- +class_name: flet.ListTileTitleAlignment +examples: ../../examples/controls/types/list_tile_title_alignment +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} From 829f1423e797a8676e472dae11c752b23edc7b9d Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Thu, 26 Feb 2026 15:33:15 +0100 Subject: [PATCH 40/71] add FilterQuality showcase example and update documentation --- .../controls/types/filter_quality/showcase.py | 55 +++++++++++++++++++ .../packages/flet/docs/types/filterquality.md | 17 +++++- 2 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 sdk/python/examples/controls/types/filter_quality/showcase.py diff --git a/sdk/python/examples/controls/types/filter_quality/showcase.py b/sdk/python/examples/controls/types/filter_quality/showcase.py new file mode 100644 index 0000000000..d8577e1549 --- /dev/null +++ b/sdk/python/examples/controls/types/filter_quality/showcase.py @@ -0,0 +1,55 @@ +import flet as ft + +IMAGE_URL = "https://picsum.photos/id/1025/64/64" + + +def showcase_card(quality: ft.FilterQuality) -> ft.Container: + return ft.Container( + width=300, + padding=12, + border=ft.Border.all(1, ft.Colors.RED), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=ft.Column( + spacing=8, + controls=[ + ft.Text(quality.name, weight=ft.FontWeight.BOLD), + ft.Container( + width=240, + height=120, + border=ft.Border.all(1, ft.Colors.OUTLINE), + border_radius=8, + clip_behavior=ft.ClipBehavior.HARD_EDGE, + bgcolor=ft.Colors.SURFACE, + content=ft.Image( + src=IMAGE_URL, + width=240, + height=120, + fit=ft.BoxFit.FILL, + filter_quality=quality, + ), + ), + ], + ), + ) + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + page.appbar = ft.AppBar(title="FilterQuality Showcase") + page.add( + ft.Text("Compare image sampling quality while scaling the same source image."), + ft.Row( + wrap=True, + spacing=12, + expand=True, + scroll=ft.ScrollMode.AUTO, + alignment=ft.MainAxisAlignment.CENTER, + controls=[showcase_card(quality) for quality in ft.FilterQuality], + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/filterquality.md b/sdk/python/packages/flet/docs/types/filterquality.md index 286d8d033a..6a6795dde8 100644 --- a/sdk/python/packages/flet/docs/types/filterquality.md +++ b/sdk/python/packages/flet/docs/types/filterquality.md @@ -1 +1,16 @@ -{{ class_all_options("flet.FilterQuality", separate_signature=False) }} +--- +class_name: flet.FilterQuality +examples: ../../examples/controls/types/filter_quality +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} From dce7829c836ce49c096712f62bf2e6c834341786 Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Thu, 26 Feb 2026 15:39:19 +0100 Subject: [PATCH 41/71] add DismissDirection showcase example and update documentation --- .../types/dismiss_direction/showcase.py | 90 +++++++++++++++++++ .../flet/docs/types/dismissdirection.md | 17 +++- 2 files changed, 106 insertions(+), 1 deletion(-) create mode 100644 sdk/python/examples/controls/types/dismiss_direction/showcase.py diff --git a/sdk/python/examples/controls/types/dismiss_direction/showcase.py b/sdk/python/examples/controls/types/dismiss_direction/showcase.py new file mode 100644 index 0000000000..840cc866af --- /dev/null +++ b/sdk/python/examples/controls/types/dismiss_direction/showcase.py @@ -0,0 +1,90 @@ +import flet as ft + + +def showcase_card(direction: ft.DismissDirection) -> ft.Container: + status = ft.Text("Swipe the tile", size=12, color=ft.Colors.ON_SURFACE_VARIANT) + + def create_item() -> ft.Dismissible: + return ft.Dismissible( + dismiss_direction=direction, + on_dismiss=lambda _: on_dismiss(), + background=ft.Container( + bgcolor=ft.Colors.GREEN_200, + alignment=ft.Alignment.CENTER_LEFT, + padding=10, + content=ft.Icon(ft.Icons.CHECK, color=ft.Colors.GREEN_900), + ), + secondary_background=ft.Container( + bgcolor=ft.Colors.RED_200, + alignment=ft.Alignment.CENTER_RIGHT, + padding=10, + content=ft.Icon(ft.Icons.DELETE, color=ft.Colors.RED_900), + ), + content=ft.Container( + height=52, + border_radius=8, + bgcolor=ft.Colors.SURFACE, + border=ft.Border.all(1, ft.Colors.OUTLINE), + alignment=ft.Alignment.CENTER, + content=ft.Text("Dismiss me"), + ), + ) + + def on_dismiss(): + slot.content = ft.Container( + height=52, + border_radius=8, + bgcolor=ft.Colors.SURFACE, + border=ft.Border.all(1, ft.Colors.OUTLINE_VARIANT), + alignment=ft.Alignment.CENTER, + content=ft.Text("Dismissed"), + ) + status.value = f"Dismissed via {direction.name}" + slot.update() + status.update() + + def reset_item(_): + slot.content = create_item() + status.value = "Swipe the tile" + slot.update() + status.update() + + slot = ft.Container(content=create_item()) + + return ft.Container( + width=360, + padding=12, + border=ft.Border.all(1, ft.Colors.RED), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=ft.Column( + spacing=8, + controls=[ + ft.Text(direction.name, weight=ft.FontWeight.BOLD), + status, + slot, + ft.Button("Reset", on_click=reset_item), + ], + ), + ) + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + page.appbar = ft.AppBar(title="DismissDirection Showcase") + page.add( + ft.Text("Try swipe directions to see which ones are allowed."), + ft.Row( + wrap=True, + spacing=12, + expand=True, + scroll=ft.ScrollMode.AUTO, + alignment=ft.MainAxisAlignment.CENTER, + controls=[showcase_card(direction) for direction in ft.DismissDirection], + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/dismissdirection.md b/sdk/python/packages/flet/docs/types/dismissdirection.md index c3cb8cb128..a3e082b489 100644 --- a/sdk/python/packages/flet/docs/types/dismissdirection.md +++ b/sdk/python/packages/flet/docs/types/dismissdirection.md @@ -1 +1,16 @@ -{{ class_all_options("flet.DismissDirection", separate_signature=False) }} +--- +class_name: flet.DismissDirection +examples: ../../examples/controls/types/dismiss_direction +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} From 6085697abea6f6854133a67bcaffd2ab3eb1dc69 Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Thu, 26 Feb 2026 15:43:14 +0100 Subject: [PATCH 42/71] add SnackBarBehavior showcase example and update documentation --- .../types/snack_bar_behavior/showcase.py | 52 +++++++++++++++++++ .../flet/docs/types/snackbarbehavior.md | 17 +++++- 2 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 sdk/python/examples/controls/types/snack_bar_behavior/showcase.py diff --git a/sdk/python/examples/controls/types/snack_bar_behavior/showcase.py b/sdk/python/examples/controls/types/snack_bar_behavior/showcase.py new file mode 100644 index 0000000000..7edc40d383 --- /dev/null +++ b/sdk/python/examples/controls/types/snack_bar_behavior/showcase.py @@ -0,0 +1,52 @@ +import flet as ft + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + def open_snack(behavior: ft.SnackBarBehavior): + page.show_dialog( + ft.SnackBar( + content=ft.Text(f"Behavior: {behavior.name}"), + behavior=behavior, + margin=ft.Margin.only(bottom=100), + action=ft.SnackBarAction(label="Close"), + ) + ) + + def showcase_card(behavior: ft.SnackBarBehavior) -> ft.Container: + return ft.Container( + width=300, + padding=12, + border=ft.Border.all(1, ft.Colors.RED), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=ft.Column( + spacing=8, + controls=[ + ft.Text(behavior.name, weight=ft.FontWeight.BOLD), + ft.Button( + "Open SnackBar", + icon=ft.Icons.MESSAGE, + on_click=lambda _, b=behavior: open_snack(b), + ), + ], + ), + ) + + page.appbar = ft.AppBar(title="SnackBarBehavior Showcase") + page.add( + ft.Text("Compare snack bar placement: fixed vs floating."), + ft.Row( + wrap=True, + spacing=12, + expand=True, + scroll=ft.ScrollMode.AUTO, + alignment=ft.MainAxisAlignment.CENTER, + controls=[showcase_card(behavior) for behavior in ft.SnackBarBehavior], + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/snackbarbehavior.md b/sdk/python/packages/flet/docs/types/snackbarbehavior.md index 6ea543dd83..1e5cdca2b8 100644 --- a/sdk/python/packages/flet/docs/types/snackbarbehavior.md +++ b/sdk/python/packages/flet/docs/types/snackbarbehavior.md @@ -1 +1,16 @@ -{{ class_all_options("flet.SnackBarBehavior", separate_signature=False) }} +--- +class_name: flet.SnackBarBehavior +examples: ../../examples/controls/types/snack_bar_behavior +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} From 0b49c33631a8d80cd3b0df74c1fef6bb56304091 Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Thu, 26 Feb 2026 15:45:29 +0100 Subject: [PATCH 43/71] add ScrollDirection showcase example and update documentation --- .../types/scroll_direction/showcase.py | 49 +++++++++++++++++++ .../flet/docs/types/scrolldirection.md | 17 ++++++- 2 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 sdk/python/examples/controls/types/scroll_direction/showcase.py diff --git a/sdk/python/examples/controls/types/scroll_direction/showcase.py b/sdk/python/examples/controls/types/scroll_direction/showcase.py new file mode 100644 index 0000000000..9408c8db03 --- /dev/null +++ b/sdk/python/examples/controls/types/scroll_direction/showcase.py @@ -0,0 +1,49 @@ +import flet as ft + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + counts = {direction: 0 for direction in ft.ScrollDirection} + count_labels = { + direction: ft.Text(f"{direction.name}: 0") for direction in ft.ScrollDirection + } + + def on_scroll(e: ft.OnScrollEvent): + if e.event_type == ft.ScrollType.USER and e.direction is not None: + counts[e.direction] += 1 + count_labels[ + e.direction + ].value = f"{e.direction.name}: {counts[e.direction]}" + last.value = f"Last USER direction: {e.direction.name}" + for label in count_labels.values(): + label.update() + last.update() + + page.appbar = ft.AppBar(title="ScrollDirection Showcase") + page.add( + ft.Text("Scroll the list and watch USER direction notifications."), + last := ft.Text("Last USER direction: none"), + ft.Row( + wrap=True, + spacing=10, + controls=[count_labels[d] for d in ft.ScrollDirection], + alignment=ft.MainAxisAlignment.CENTER, + ), + ft.Container( + width=360, + height=240, + border=ft.Border.all(1, ft.Colors.OUTLINE), + border_radius=8, + padding=8, + content=ft.Column( + scroll=ft.ScrollMode.ALWAYS, + on_scroll=on_scroll, + controls=[ft.Text(f"Scrollable item {i + 1}") for i in range(60)], + ), + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/scrolldirection.md b/sdk/python/packages/flet/docs/types/scrolldirection.md index dc11510b2e..0e93f34d48 100644 --- a/sdk/python/packages/flet/docs/types/scrolldirection.md +++ b/sdk/python/packages/flet/docs/types/scrolldirection.md @@ -1 +1,16 @@ -{{ class_all_options("flet.ScrollDirection", separate_signature=False) }} +--- +class_name: flet.ScrollDirection +examples: ../../examples/controls/types/scroll_direction +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} From 6799899c12d8fa9f2064ca983d6f3e90d07add73 Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Thu, 26 Feb 2026 15:49:09 +0100 Subject: [PATCH 44/71] add PopupMenuPosition showcase example and update documentation --- .../types/popup_menu_position/showcase.py | 52 +++++++++++++++++++ .../flet/docs/types/popupmenuposition.md | 17 +++++- 2 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 sdk/python/examples/controls/types/popup_menu_position/showcase.py diff --git a/sdk/python/examples/controls/types/popup_menu_position/showcase.py b/sdk/python/examples/controls/types/popup_menu_position/showcase.py new file mode 100644 index 0000000000..da545eebcd --- /dev/null +++ b/sdk/python/examples/controls/types/popup_menu_position/showcase.py @@ -0,0 +1,52 @@ +import flet as ft + + +def showcase_card(position: ft.PopupMenuPosition) -> ft.Container: + menu = ft.PopupMenuButton( + menu_position=position, + icon=ft.Text("Click me to open menu", color=ft.Colors.BLUE), + items=[ + ft.PopupMenuItem(icon=ft.Icons.EDIT, content="Rename"), + ft.PopupMenuItem(icon=ft.Icons.CONTENT_COPY, content="Duplicate"), + ft.PopupMenuItem(icon=ft.Icons.DELETE, content="Delete"), + ], + ) + + return ft.Container( + width=300, + height=220, + padding=12, + border=ft.Border.all(1, ft.Colors.RED), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=ft.Column( + spacing=8, + horizontal_alignment=ft.CrossAxisAlignment.CENTER, + alignment=ft.MainAxisAlignment.CENTER, + controls=[ + ft.Text(position.name, weight=ft.FontWeight.BOLD), + menu, + ], + ), + ) + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + page.appbar = ft.AppBar(title="PopupMenuPosition Showcase") + page.add( + ft.Text("Open each popup menu to compare their positioning."), + ft.Row( + wrap=True, + spacing=12, + expand=True, + scroll=ft.ScrollMode.AUTO, + alignment=ft.MainAxisAlignment.CENTER, + controls=[showcase_card(position) for position in ft.PopupMenuPosition], + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/popupmenuposition.md b/sdk/python/packages/flet/docs/types/popupmenuposition.md index 3fdd5207bc..fee12117d9 100644 --- a/sdk/python/packages/flet/docs/types/popupmenuposition.md +++ b/sdk/python/packages/flet/docs/types/popupmenuposition.md @@ -1 +1,16 @@ -{{ class_all_options("flet.PopupMenuPosition", separate_signature=False) }} +--- +class_name: flet.PopupMenuPosition +examples: ../../examples/controls/types/popup_menu_position +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} From dff3b31fe577b178af39931c3d5eac01da6f12fb Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Thu, 26 Feb 2026 15:50:07 +0100 Subject: [PATCH 45/71] add GradientTileMode showcase example and update documentation --- .../types/gradient_tile_mode/showcase.py | 49 +++++++++++++++++++ .../flet/docs/types/gradienttilemode.md | 17 ++++++- 2 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 sdk/python/examples/controls/types/gradient_tile_mode/showcase.py diff --git a/sdk/python/examples/controls/types/gradient_tile_mode/showcase.py b/sdk/python/examples/controls/types/gradient_tile_mode/showcase.py new file mode 100644 index 0000000000..9d364c8383 --- /dev/null +++ b/sdk/python/examples/controls/types/gradient_tile_mode/showcase.py @@ -0,0 +1,49 @@ +import flet as ft + + +def showcase_card(mode: ft.GradientTileMode) -> ft.Container: + return ft.Container( + width=320, + padding=12, + border=ft.Border.all(1, ft.Colors.RED), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=ft.Column( + spacing=8, + controls=[ + ft.Text(mode.name, weight=ft.FontWeight.BOLD), + ft.Container( + width=240, + height=120, + border=ft.Border.all(1, ft.Colors.OUTLINE), + border_radius=8, + gradient=ft.RadialGradient( + radius=0.22, + colors=[ft.Colors.PRIMARY, ft.Colors.AMBER_400], + tile_mode=mode, + ), + ), + ], + ), + ) + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + page.appbar = ft.AppBar(title="GradientTileMode Showcase") + page.add( + ft.Text("Compare how gradients behave outside their defined paint region."), + ft.Row( + wrap=True, + spacing=12, + expand=True, + scroll=ft.ScrollMode.AUTO, + alignment=ft.MainAxisAlignment.CENTER, + controls=[showcase_card(mode) for mode in ft.GradientTileMode], + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/gradienttilemode.md b/sdk/python/packages/flet/docs/types/gradienttilemode.md index 45cf38b571..d2d2cd169f 100644 --- a/sdk/python/packages/flet/docs/types/gradienttilemode.md +++ b/sdk/python/packages/flet/docs/types/gradienttilemode.md @@ -1 +1,16 @@ -{{ class_all_options("flet.GradientTileMode", separate_signature=False) }} +--- +class_name: flet.GradientTileMode +examples: ../../examples/controls/types/gradient_tile_mode +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} From fb19ef9e96cdb0453e1af29ea5e3a735d22932ac Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Thu, 26 Feb 2026 15:55:06 +0100 Subject: [PATCH 46/71] add TabBarIndicatorSize showcase example and update documentation --- .../types/tab_bar_indicator_size/showcase.py | 78 +++++++++++++++++++ .../flet/docs/types/tabindicatoranimation.md | 17 +++- 2 files changed, 94 insertions(+), 1 deletion(-) create mode 100644 sdk/python/examples/controls/types/tab_bar_indicator_size/showcase.py diff --git a/sdk/python/examples/controls/types/tab_bar_indicator_size/showcase.py b/sdk/python/examples/controls/types/tab_bar_indicator_size/showcase.py new file mode 100644 index 0000000000..46e3a0b706 --- /dev/null +++ b/sdk/python/examples/controls/types/tab_bar_indicator_size/showcase.py @@ -0,0 +1,78 @@ +import flet as ft + + +def showcase_card(indicator_size: ft.TabBarIndicatorSize) -> ft.Container: + tabs_count = 3 + + tab_bar = ft.TabBar( + indicator_size=indicator_size, + indicator=ft.UnderlineTabIndicator( + border_side=ft.BorderSide(width=4, color=ft.Colors.PRIMARY), + insets=ft.Padding.only(bottom=3), + ), + tabs=[ + ft.Tab(label="A"), + ft.Tab(label="Long Label"), + ft.Tab(label="Mid"), + ], + ) + + tab_view = ft.Container( + height=70, + alignment=ft.Alignment.CENTER, + border=ft.Border.all(1, ft.Colors.OUTLINE), + border_radius=8, + bgcolor=ft.Colors.SURFACE, + content=ft.TabBarView( + controls=[ + ft.Container( + alignment=ft.Alignment.CENTER, + content=ft.Text(f"View {i + 1}"), + ) + for i in range(tabs_count) + ] + ), + ) + + return ft.Container( + width=380, + padding=12, + border=ft.Border.all(1, ft.Colors.RED), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=ft.Column( + spacing=8, + controls=[ + ft.Text(indicator_size.name, weight=ft.FontWeight.BOLD), + ft.Tabs( + length=tabs_count, + selected_index=1, + content=ft.Column(spacing=8, controls=[tab_bar, tab_view]), + ), + ], + ), + ) + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + page.appbar = ft.AppBar(title="TabBarIndicatorSize Showcase") + page.add( + ft.Text("Compare indicator width when matching tab bounds vs label bounds."), + ft.Row( + wrap=True, + spacing=12, + expand=True, + scroll=ft.ScrollMode.AUTO, + alignment=ft.MainAxisAlignment.CENTER, + controls=[ + showcase_card(indicator_size) + for indicator_size in ft.TabBarIndicatorSize + ], + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/tabindicatoranimation.md b/sdk/python/packages/flet/docs/types/tabindicatoranimation.md index 739fb3ef15..5883719fb3 100644 --- a/sdk/python/packages/flet/docs/types/tabindicatoranimation.md +++ b/sdk/python/packages/flet/docs/types/tabindicatoranimation.md @@ -1 +1,16 @@ -{{ class_all_options("flet.TabIndicatorAnimation", separate_signature=False) }} +--- +class_name: flet.TabIndicatorAnimation +examples: ../../examples/controls/types/tab_indicator_animation +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} From 511807803feba9d1237eeb9c490a7b29c0e71d07 Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Thu, 26 Feb 2026 15:56:19 +0100 Subject: [PATCH 47/71] add NavigationBarLabelBehavior showcase example and update documentation --- .../navigation_bar_label_behavior/showcase.py | 51 +++++++++++++++++++ .../docs/types/navigationbarlabelbehavior.md | 17 ++++++- 2 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 sdk/python/examples/controls/types/navigation_bar_label_behavior/showcase.py diff --git a/sdk/python/examples/controls/types/navigation_bar_label_behavior/showcase.py b/sdk/python/examples/controls/types/navigation_bar_label_behavior/showcase.py new file mode 100644 index 0000000000..213c0e2f75 --- /dev/null +++ b/sdk/python/examples/controls/types/navigation_bar_label_behavior/showcase.py @@ -0,0 +1,51 @@ +import flet as ft + + +def showcase_card(behavior: ft.NavigationBarLabelBehavior) -> ft.Container: + bar = ft.NavigationBar( + label_behavior=behavior, + selected_index=1, + destinations=[ + ft.NavigationBarDestination(icon=ft.Icons.HOME, label="Home"), + ft.NavigationBarDestination(icon=ft.Icons.SEARCH, label="Search"), + ft.NavigationBarDestination(icon=ft.Icons.PERSON, label="Profile"), + ], + ) + + return ft.Container( + width=380, + padding=12, + border=ft.Border.all(1, ft.Colors.RED), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=ft.Column( + spacing=8, + controls=[ + ft.Text(behavior.name, weight=ft.FontWeight.BOLD), + bar, + ], + ), + ) + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + page.appbar = ft.AppBar(title="NavigationBarLabelBehavior Showcase") + page.add( + ft.Text("Compare destination label visibility strategies."), + ft.Row( + wrap=True, + spacing=12, + expand=True, + scroll=ft.ScrollMode.AUTO, + alignment=ft.MainAxisAlignment.CENTER, + controls=[ + showcase_card(behavior) for behavior in ft.NavigationBarLabelBehavior + ], + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/navigationbarlabelbehavior.md b/sdk/python/packages/flet/docs/types/navigationbarlabelbehavior.md index d0a994ad94..bcdccb4e2b 100644 --- a/sdk/python/packages/flet/docs/types/navigationbarlabelbehavior.md +++ b/sdk/python/packages/flet/docs/types/navigationbarlabelbehavior.md @@ -1 +1,16 @@ -{{ class_all_options("flet.NavigationBarLabelBehavior", separate_signature=False) }} +--- +class_name: flet.NavigationBarLabelBehavior +examples: ../../examples/controls/types/navigation_bar_label_behavior +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} From 2dfa2035aaafa9711d8b737af2c89509df3322b7 Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Thu, 26 Feb 2026 15:56:55 +0100 Subject: [PATCH 48/71] add NavigationRailLabelType showcase example and update documentation --- .../navigation_rail_label_type/showcase.py | 52 +++++++++++++++++++ .../docs/types/navigationraillabeltype.md | 17 +++++- 2 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 sdk/python/examples/controls/types/navigation_rail_label_type/showcase.py diff --git a/sdk/python/examples/controls/types/navigation_rail_label_type/showcase.py b/sdk/python/examples/controls/types/navigation_rail_label_type/showcase.py new file mode 100644 index 0000000000..41d9ee08f0 --- /dev/null +++ b/sdk/python/examples/controls/types/navigation_rail_label_type/showcase.py @@ -0,0 +1,52 @@ +import flet as ft + + +def showcase_card(label_type: ft.NavigationRailLabelType) -> ft.Container: + rail = ft.NavigationRail( + width=100, + height=220, + selected_index=1, + label_type=label_type, + destinations=[ + ft.NavigationRailDestination(icon=ft.Icons.HOME, label="Home"), + ft.NavigationRailDestination(icon=ft.Icons.SEARCH, label="Search"), + ft.NavigationRailDestination(icon=ft.Icons.PERSON, label="Profile"), + ], + ) + + return ft.Container( + width=300, + padding=12, + border=ft.Border.all(1, ft.Colors.RED), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=ft.Column( + spacing=8, + horizontal_alignment=ft.CrossAxisAlignment.CENTER, + controls=[ + ft.Text(label_type.name, weight=ft.FontWeight.BOLD), + rail, + ], + ), + ) + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + page.appbar = ft.AppBar(title="NavigationRailLabelType Showcase") + page.add( + ft.Text("Compare label visibility in compact navigation rail."), + ft.Row( + wrap=True, + spacing=12, + expand=True, + scroll=ft.ScrollMode.AUTO, + alignment=ft.MainAxisAlignment.CENTER, + controls=[showcase_card(t) for t in ft.NavigationRailLabelType], + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/navigationraillabeltype.md b/sdk/python/packages/flet/docs/types/navigationraillabeltype.md index 13220a7645..7e62d73ede 100644 --- a/sdk/python/packages/flet/docs/types/navigationraillabeltype.md +++ b/sdk/python/packages/flet/docs/types/navigationraillabeltype.md @@ -1 +1,16 @@ -{{ class_all_options("flet.NavigationRailLabelType", separate_signature=False) }} +--- +class_name: flet.NavigationRailLabelType +examples: ../../examples/controls/types/navigation_rail_label_type +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} From dd109a1a19e69e268c4eac18a5b5c6c38bb3dab1 Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Thu, 26 Feb 2026 15:58:55 +0100 Subject: [PATCH 49/71] add OverlayVisibilityMode showcase example and update documentation --- .../types/overlay_visibility_mode/showcase.py | 53 +++++++++++++++++++ .../flet/docs/types/overlayvisibilitymode.md | 17 +++++- 2 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 sdk/python/examples/controls/types/overlay_visibility_mode/showcase.py diff --git a/sdk/python/examples/controls/types/overlay_visibility_mode/showcase.py b/sdk/python/examples/controls/types/overlay_visibility_mode/showcase.py new file mode 100644 index 0000000000..6f7af9dc35 --- /dev/null +++ b/sdk/python/examples/controls/types/overlay_visibility_mode/showcase.py @@ -0,0 +1,53 @@ +import flet as ft + + +def showcase_card(mode: ft.OverlayVisibilityMode) -> ft.Container: + return ft.Container( + width=380, + padding=12, + border=ft.Border.all(1, ft.Colors.RED), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=ft.Column( + spacing=8, + controls=[ + ft.Text(mode.name, weight=ft.FontWeight.BOLD), + ft.Text("Prefix/suffix visibility (prefilled):", size=11), + ft.CupertinoTextField( + value="Flet", + placeholder_text="Search", + prefix=ft.Icon(ft.CupertinoIcons.SEARCH), + suffix=ft.Icon(ft.CupertinoIcons.MIC), + prefix_visibility_mode=mode, + suffix_visibility_mode=mode, + ), + ft.Text("Clear button visibility:", size=11), + ft.CupertinoTextField( + value="Clear me", + placeholder_text="Type text", + clear_button_visibility_mode=mode, + ), + ], + ), + ) + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + page.appbar = ft.AppBar(title="OverlayVisibilityMode Showcase") + page.add( + ft.Text("Compare when Cupertino text field overlays appear."), + ft.Row( + wrap=True, + spacing=12, + expand=True, + scroll=ft.ScrollMode.AUTO, + alignment=ft.MainAxisAlignment.CENTER, + controls=[showcase_card(mode) for mode in ft.OverlayVisibilityMode], + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/overlayvisibilitymode.md b/sdk/python/packages/flet/docs/types/overlayvisibilitymode.md index 939d4afe34..c462b4a08f 100644 --- a/sdk/python/packages/flet/docs/types/overlayvisibilitymode.md +++ b/sdk/python/packages/flet/docs/types/overlayvisibilitymode.md @@ -1 +1,16 @@ -{{ class_all_options("flet.OverlayVisibilityMode", separate_signature=False) }} +--- +class_name: flet.OverlayVisibilityMode +examples: ../../examples/controls/types/overlay_visibility_mode +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} From 44706d25d3ff3e6926ca7363142c4a0db088175d Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Thu, 26 Feb 2026 16:00:04 +0100 Subject: [PATCH 50/71] add PaintingStyle showcase example and update documentation --- .../controls/types/painting_style/showcase.py | 55 +++++++++++++++++++ .../packages/flet/docs/types/paintingstyle.md | 17 +++++- 2 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 sdk/python/examples/controls/types/painting_style/showcase.py diff --git a/sdk/python/examples/controls/types/painting_style/showcase.py b/sdk/python/examples/controls/types/painting_style/showcase.py new file mode 100644 index 0000000000..e6b277fb74 --- /dev/null +++ b/sdk/python/examples/controls/types/painting_style/showcase.py @@ -0,0 +1,55 @@ +import flet as ft +import flet.canvas as cv + + +def showcase_card(style: ft.PaintingStyle) -> ft.Container: + return ft.Container( + width=250, + padding=12, + border=ft.Border.all(1, ft.Colors.RED), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=ft.Column( + spacing=8, + controls=[ + ft.Text(style.name, weight=ft.FontWeight.BOLD), + cv.Canvas( + width=240, + height=110, + shapes=[ + cv.Circle( + x=120, + y=55, + radius=34, + paint=ft.Paint( + style=style, + stroke_width=10, + color=ft.Colors.PRIMARY, + ), + ) + ], + ), + ], + ), + ) + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + page.appbar = ft.AppBar(title="PaintingStyle Showcase") + page.add( + ft.Text("Compare filled vs outlined rendering for the same shape."), + ft.Row( + wrap=True, + spacing=12, + expand=True, + scroll=ft.ScrollMode.AUTO, + alignment=ft.MainAxisAlignment.CENTER, + controls=[showcase_card(style) for style in ft.PaintingStyle], + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/paintingstyle.md b/sdk/python/packages/flet/docs/types/paintingstyle.md index f2f8e0cfb3..51645db9d1 100644 --- a/sdk/python/packages/flet/docs/types/paintingstyle.md +++ b/sdk/python/packages/flet/docs/types/paintingstyle.md @@ -1 +1,16 @@ -{{ class_all_options("flet.PaintingStyle", separate_signature=False) }} +--- +class_name: flet.PaintingStyle +examples: ../../examples/controls/types/painting_style +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} From a1dd3babbe06fc6f831e6468b0bf6cafd1b8afbb Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Thu, 26 Feb 2026 16:00:49 +0100 Subject: [PATCH 51/71] add BorderStyle showcase example and update documentation --- .../controls/types/border_style/showcase.py | 50 +++++++++++++++++++ .../packages/flet/docs/types/borderstyle.md | 17 ++++++- 2 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 sdk/python/examples/controls/types/border_style/showcase.py diff --git a/sdk/python/examples/controls/types/border_style/showcase.py b/sdk/python/examples/controls/types/border_style/showcase.py new file mode 100644 index 0000000000..24ab211c79 --- /dev/null +++ b/sdk/python/examples/controls/types/border_style/showcase.py @@ -0,0 +1,50 @@ +import flet as ft + + +def showcase_card(style: ft.BorderStyle) -> ft.Container: + side = ft.BorderSide(width=4, color=ft.Colors.PRIMARY, style=style) + border = ft.Border(left=side, top=side, right=side, bottom=side) + + return ft.Container( + width=320, + padding=12, + border=ft.Border.all(1, ft.Colors.RED), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=ft.Column( + spacing=8, + controls=[ + ft.Text(style.name, weight=ft.FontWeight.BOLD), + ft.Container( + width=240, + height=100, + border=border, + border_radius=8, + bgcolor=ft.Colors.SURFACE, + alignment=ft.Alignment.CENTER, + content=ft.Text("Border preview"), + ), + ], + ), + ) + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + page.appbar = ft.AppBar(title="BorderStyle Showcase") + page.add( + ft.Text("Compare rendered border sides for each BorderStyle value."), + ft.Row( + wrap=True, + spacing=12, + expand=True, + scroll=ft.ScrollMode.AUTO, + alignment=ft.MainAxisAlignment.CENTER, + controls=[showcase_card(style) for style in ft.BorderStyle], + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/borderstyle.md b/sdk/python/packages/flet/docs/types/borderstyle.md index 9245a39421..246a764187 100644 --- a/sdk/python/packages/flet/docs/types/borderstyle.md +++ b/sdk/python/packages/flet/docs/types/borderstyle.md @@ -1 +1,16 @@ -{{ class_all_options("flet.BorderStyle", separate_signature=False) }} +--- +class_name: flet.BorderStyle +examples: ../../examples/controls/types/border_style +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} From d286948fc7b8622f4855db9effc609dc214b03ac Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Thu, 26 Feb 2026 16:01:40 +0100 Subject: [PATCH 52/71] add DatePickerEntryMode showcase example and update documentation --- .../types/date_picker_entry_mode/showcase.py | 55 +++++++++++++++++++ .../flet/docs/types/datepickerentrymode.md | 17 +++++- 2 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 sdk/python/examples/controls/types/date_picker_entry_mode/showcase.py diff --git a/sdk/python/examples/controls/types/date_picker_entry_mode/showcase.py b/sdk/python/examples/controls/types/date_picker_entry_mode/showcase.py new file mode 100644 index 0000000000..88b6c5f928 --- /dev/null +++ b/sdk/python/examples/controls/types/date_picker_entry_mode/showcase.py @@ -0,0 +1,55 @@ +import datetime + +import flet as ft + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + today = datetime.datetime.now() + picker = ft.DatePicker( + first_date=datetime.datetime(year=today.year - 1, month=1, day=1), + last_date=datetime.datetime(year=today.year + 1, month=12, day=31), + ) + + def open_picker(entry_mode: ft.DatePickerEntryMode): + picker.entry_mode = entry_mode + picker.date_picker_mode = ft.DatePickerMode.DAY + page.show_dialog(picker) + + def showcase_card(entry_mode: ft.DatePickerEntryMode) -> ft.Container: + return ft.Container( + width=320, + padding=12, + border=ft.Border.all(1, ft.Colors.RED), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=ft.Column( + spacing=8, + controls=[ + ft.Text(entry_mode.name, weight=ft.FontWeight.BOLD), + ft.Button( + "Open DatePicker", + icon=ft.Icons.CALENDAR_MONTH, + on_click=lambda _, m=entry_mode: open_picker(m), + ), + ], + ), + ) + + page.appbar = ft.AppBar(title="DatePickerEntryMode Showcase") + page.add( + ft.Text("Open the picker to compare calendar and input entry modes."), + ft.Row( + wrap=True, + spacing=12, + expand=True, + scroll=ft.ScrollMode.AUTO, + alignment=ft.MainAxisAlignment.CENTER, + controls=[showcase_card(m) for m in ft.DatePickerEntryMode], + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/datepickerentrymode.md b/sdk/python/packages/flet/docs/types/datepickerentrymode.md index 9125c89e8c..196e9aa504 100644 --- a/sdk/python/packages/flet/docs/types/datepickerentrymode.md +++ b/sdk/python/packages/flet/docs/types/datepickerentrymode.md @@ -1 +1,16 @@ -{{ class_all_options("flet.DatePickerEntryMode", separate_signature=False) }} +--- +class_name: flet.DatePickerEntryMode +examples: ../../examples/controls/types/date_picker_entry_mode +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} From 142383cc4a7fb65cf1dca3b0231f65ddfe41fa30 Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Thu, 26 Feb 2026 16:04:49 +0100 Subject: [PATCH 53/71] add DatePickerMode showcase example and update documentation --- .../types/date_picker_mode/showcase.py | 55 +++++++++++++++++++ .../flet/docs/types/datepickermode.md | 17 +++++- 2 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 sdk/python/examples/controls/types/date_picker_mode/showcase.py diff --git a/sdk/python/examples/controls/types/date_picker_mode/showcase.py b/sdk/python/examples/controls/types/date_picker_mode/showcase.py new file mode 100644 index 0000000000..e6822d2cc9 --- /dev/null +++ b/sdk/python/examples/controls/types/date_picker_mode/showcase.py @@ -0,0 +1,55 @@ +import datetime + +import flet as ft + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + today = datetime.datetime.now() + picker = ft.DatePicker( + first_date=datetime.datetime(year=today.year - 1, month=1, day=1), + last_date=datetime.datetime(year=today.year + 1, month=12, day=31), + entry_mode=ft.DatePickerEntryMode.CALENDAR, + ) + + def open_picker(date_picker_mode: ft.DatePickerMode): + picker.date_picker_mode = date_picker_mode + page.show_dialog(picker) + + def showcase_card(date_picker_mode: ft.DatePickerMode) -> ft.Container: + return ft.Container( + width=320, + padding=12, + border=ft.Border.all(1, ft.Colors.RED), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=ft.Column( + spacing=8, + controls=[ + ft.Text(date_picker_mode.name, weight=ft.FontWeight.BOLD), + ft.Button( + "Open DatePicker", + icon=ft.Icons.CALENDAR_MONTH, + on_click=lambda _, m=date_picker_mode: open_picker(m), + ), + ], + ), + ) + + page.appbar = ft.AppBar(title="DatePickerMode Showcase") + page.add( + ft.Text("Open the picker to compare initial day vs year display mode."), + ft.Row( + wrap=True, + spacing=12, + expand=True, + scroll=ft.ScrollMode.AUTO, + alignment=ft.MainAxisAlignment.CENTER, + controls=[showcase_card(m) for m in ft.DatePickerMode], + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/datepickermode.md b/sdk/python/packages/flet/docs/types/datepickermode.md index 97e6d99ce4..fdbb8d1710 100644 --- a/sdk/python/packages/flet/docs/types/datepickermode.md +++ b/sdk/python/packages/flet/docs/types/datepickermode.md @@ -1 +1,16 @@ -{{ class_all_options("flet.DatePickerMode", separate_signature=False) }} +--- +class_name: flet.DatePickerMode +examples: ../../examples/controls/types/date_picker_mode +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} From 864395aed9d4f675b3e61ec07cb235095951a8c2 Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Thu, 26 Feb 2026 16:06:01 +0100 Subject: [PATCH 54/71] add TextDecorationStyle showcase example and update documentation --- .../types/text_decoration_style/showcase.py | 56 +++++++++++++++++++ .../flet/docs/types/textdecorationstyle.md | 17 +++++- 2 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 sdk/python/examples/controls/types/text_decoration_style/showcase.py diff --git a/sdk/python/examples/controls/types/text_decoration_style/showcase.py b/sdk/python/examples/controls/types/text_decoration_style/showcase.py new file mode 100644 index 0000000000..901b94f2c1 --- /dev/null +++ b/sdk/python/examples/controls/types/text_decoration_style/showcase.py @@ -0,0 +1,56 @@ +import flet as ft + + +def showcase_card(style: ft.TextDecorationStyle) -> ft.Container: + return ft.Container( + width=320, + padding=12, + border=ft.Border.all(1, ft.Colors.RED), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=ft.Column( + spacing=8, + controls=[ + ft.Text(style.name, weight=ft.FontWeight.BOLD), + ft.Container( + width=240, + height=80, + border=ft.Border.all(1, ft.Colors.OUTLINE), + border_radius=8, + bgcolor=ft.Colors.SURFACE, + alignment=ft.Alignment.CENTER, + content=ft.Text( + "Decorated text sample", + style=ft.TextStyle( + size=22, + decoration=ft.TextDecoration.UNDERLINE, + decoration_style=style, + decoration_thickness=2.4, + decoration_color=ft.Colors.PRIMARY, + ), + ), + ), + ], + ), + ) + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + page.appbar = ft.AppBar(title="TextDecorationStyle Showcase") + page.add( + ft.Text("Compare underline rendering for each decoration style."), + ft.Row( + wrap=True, + spacing=12, + expand=True, + scroll=ft.ScrollMode.AUTO, + alignment=ft.MainAxisAlignment.CENTER, + controls=[showcase_card(style) for style in ft.TextDecorationStyle], + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/textdecorationstyle.md b/sdk/python/packages/flet/docs/types/textdecorationstyle.md index 1302bdbc42..93da4c20df 100644 --- a/sdk/python/packages/flet/docs/types/textdecorationstyle.md +++ b/sdk/python/packages/flet/docs/types/textdecorationstyle.md @@ -1 +1,16 @@ -{{ class_all_options("flet.TextDecorationStyle", separate_signature=False) }} +--- +class_name: flet.TextDecorationStyle +examples: ../../examples/controls/types/text_decoration_style +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} From c643cda67cae0cb56c65210fc0a55a1ab4b70570 Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Thu, 26 Feb 2026 16:11:01 +0100 Subject: [PATCH 55/71] add BorderSideStrokeAlign showcase example and update documentation --- .../border_side_stroke_align/showcase.py | 69 +++++++++++++++++++ .../flet/docs/types/bordersidestrokealign.md | 17 ++++- 2 files changed, 85 insertions(+), 1 deletion(-) create mode 100644 sdk/python/examples/controls/types/border_side_stroke_align/showcase.py diff --git a/sdk/python/examples/controls/types/border_side_stroke_align/showcase.py b/sdk/python/examples/controls/types/border_side_stroke_align/showcase.py new file mode 100644 index 0000000000..8791a08b78 --- /dev/null +++ b/sdk/python/examples/controls/types/border_side_stroke_align/showcase.py @@ -0,0 +1,69 @@ +import flet as ft + + +def showcase_card(align: ft.BorderSideStrokeAlign) -> ft.Container: + preview = ft.Container( + width=150, + height=150, + alignment=ft.Alignment.CENTER, + content=ft.Stack( + controls=[ + ft.Container( + width=90, + height=90, + border_radius=45, + bgcolor=ft.Colors.ON_SURFACE, + ), + ft.Container( + width=90, + height=90, + border_radius=45, + border=ft.Border.all( + side=ft.BorderSide( + width=18, + color=ft.Colors.RED, + stroke_align=align, + ) + ), + ), + ], + ), + ) + + return ft.Container( + width=300, + padding=12, + border=ft.Border.all(1, ft.Colors.RED), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=ft.Column( + spacing=8, + horizontal_alignment=ft.CrossAxisAlignment.CENTER, + controls=[ + ft.Text(align.name, weight=ft.FontWeight.BOLD), + preview, + ft.Text(f"value={align.value}", size=11), + ], + ), + ) + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + page.appbar = ft.AppBar(title="BorderSideStrokeAlign Showcase") + page.add( + ft.Text("Compare how thick borders are painted relative to the shape path."), + ft.Row( + wrap=True, + spacing=12, + expand=True, + scroll=ft.ScrollMode.AUTO, + alignment=ft.MainAxisAlignment.CENTER, + controls=[showcase_card(align) for align in ft.BorderSideStrokeAlign], + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/bordersidestrokealign.md b/sdk/python/packages/flet/docs/types/bordersidestrokealign.md index 434d3fc1a0..c50b49ac0b 100644 --- a/sdk/python/packages/flet/docs/types/bordersidestrokealign.md +++ b/sdk/python/packages/flet/docs/types/bordersidestrokealign.md @@ -1 +1,16 @@ -{{ class_all_options("flet.BorderSideStrokeAlign", separate_signature=False) }} +--- +class_name: flet.BorderSideStrokeAlign +examples: ../../examples/controls/types/border_side_stroke_align +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} From f1f97acb741155ff29a25c196335dace3ede85e0 Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Thu, 26 Feb 2026 16:11:53 +0100 Subject: [PATCH 56/71] add PointMode showcase example and update documentation --- .../controls/types/point_mode/showcase.py | 64 +++++++++++++++ .../types/tab_indicator_animation/showcase.py | 77 +++++++++++++++++++ .../packages/flet/docs/types/pointmode.md | 17 +++- 3 files changed, 157 insertions(+), 1 deletion(-) create mode 100644 sdk/python/examples/controls/types/point_mode/showcase.py create mode 100644 sdk/python/examples/controls/types/tab_indicator_animation/showcase.py diff --git a/sdk/python/examples/controls/types/point_mode/showcase.py b/sdk/python/examples/controls/types/point_mode/showcase.py new file mode 100644 index 0000000000..365fbbdf54 --- /dev/null +++ b/sdk/python/examples/controls/types/point_mode/showcase.py @@ -0,0 +1,64 @@ +import flet as ft +import flet.canvas as cv + +POINTS = [ + (25, 75), + (70, 30), + (115, 75), + (160, 30), + (205, 75), +] + + +def showcase_card(mode: cv.PointMode) -> ft.Container: + return ft.Container( + width=320, + padding=12, + border=ft.Border.all(1, ft.Colors.RED), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=ft.Column( + spacing=8, + controls=[ + ft.Text(mode.name, weight=ft.FontWeight.BOLD), + cv.Canvas( + width=240, + height=110, + shapes=[ + cv.Points( + points=POINTS, + point_mode=mode, + paint=ft.Paint( + color=ft.Colors.PRIMARY, + stroke_width=12, + stroke_cap=ft.StrokeCap.ROUND, + ), + ) + ], + ), + ], + ), + ) + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + page.appbar = ft.AppBar(title="PointMode Showcase") + page.add( + ft.Text( + "Compare how the same coordinate list is interpreted by each point mode." + ), + ft.Row( + wrap=True, + spacing=12, + expand=True, + scroll=ft.ScrollMode.AUTO, + alignment=ft.MainAxisAlignment.CENTER, + controls=[showcase_card(mode) for mode in cv.PointMode], + ), + ) + + +ft.run(main) diff --git a/sdk/python/examples/controls/types/tab_indicator_animation/showcase.py b/sdk/python/examples/controls/types/tab_indicator_animation/showcase.py new file mode 100644 index 0000000000..01a15c1a5d --- /dev/null +++ b/sdk/python/examples/controls/types/tab_indicator_animation/showcase.py @@ -0,0 +1,77 @@ +import flet as ft + + +def showcase_card(animation: ft.TabIndicatorAnimation) -> ft.Container: + tabs_count = 3 + + tab_bar = ft.TabBar( + indicator_animation=animation, + indicator=ft.UnderlineTabIndicator( + border_side=ft.BorderSide(width=4, color=ft.Colors.PRIMARY), + insets=ft.Padding.only(bottom=3), + ), + tabs=[ + ft.Tab(label="Home"), + ft.Tab(label="Search"), + ft.Tab(label="Profile"), + ], + ) + + tab_view = ft.Container( + height=70, + alignment=ft.Alignment.CENTER, + border=ft.Border.all(1, ft.Colors.OUTLINE), + border_radius=8, + bgcolor=ft.Colors.SURFACE, + content=ft.TabBarView( + controls=[ + ft.Container( + alignment=ft.Alignment.CENTER, + content=ft.Text(f"View {i + 1}"), + ) + for i in range(tabs_count) + ] + ), + ) + + return ft.Container( + width=360, + padding=12, + border=ft.Border.all(1, ft.Colors.RED), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=ft.Column( + spacing=8, + controls=[ + ft.Text(animation.name, weight=ft.FontWeight.BOLD), + ft.Tabs( + length=tabs_count, + selected_index=1, + content=ft.Column(spacing=8, controls=[tab_bar, tab_view]), + ), + ], + ), + ) + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + page.appbar = ft.AppBar(title="TabIndicatorAnimation Showcase") + page.add( + ft.Text("Click tabs to compare indicator movement animation."), + ft.Row( + wrap=True, + spacing=12, + expand=True, + scroll=ft.ScrollMode.AUTO, + alignment=ft.MainAxisAlignment.CENTER, + controls=[ + showcase_card(animation) for animation in ft.TabIndicatorAnimation + ], + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/pointmode.md b/sdk/python/packages/flet/docs/types/pointmode.md index 1d32a87830..821ac4e70f 100644 --- a/sdk/python/packages/flet/docs/types/pointmode.md +++ b/sdk/python/packages/flet/docs/types/pointmode.md @@ -1 +1,16 @@ -{{ class_all_options("flet.canvas.PointMode", separate_signature=False) }} +--- +class_name: flet.canvas.PointMode +examples: ../../examples/controls/types/point_mode +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} From 5f028e28c3f569f9a4767bee98312ef8f8a882bf Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Thu, 26 Feb 2026 16:15:04 +0100 Subject: [PATCH 57/71] add LaunchMode showcase example and update documentation --- .../controls/types/launch_mode/showcase.py | 57 +++++++++++++++++++ .../packages/flet/docs/types/launchmode.md | 17 +++++- 2 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 sdk/python/examples/controls/types/launch_mode/showcase.py diff --git a/sdk/python/examples/controls/types/launch_mode/showcase.py b/sdk/python/examples/controls/types/launch_mode/showcase.py new file mode 100644 index 0000000000..a5fac4ade6 --- /dev/null +++ b/sdk/python/examples/controls/types/launch_mode/showcase.py @@ -0,0 +1,57 @@ +import flet as ft + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + launcher = ft.UrlLauncher() + + def showcase_card(mode: ft.LaunchMode) -> ft.Container: + status = ft.Text("Click to check support on this platform.", size=11) + + async def check_support(): + try: + supported = await launcher.supports_launch_mode(mode) + closable = await launcher.supports_close_for_launch_mode(mode) + status.value = ( + f"supports_launch_mode={supported} / supports_close={closable}" + ) + except Exception as ex: + status.value = f"Error: {ex}" + status.update() + + return ft.Container( + width=360, + padding=12, + border=ft.Border.all(1, ft.Colors.RED), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=ft.Column( + spacing=8, + controls=[ + ft.Text(mode.name, weight=ft.FontWeight.BOLD), + ft.Button( + "Check support", + icon=ft.Icons.CHECK_CIRCLE_OUTLINE, + on_click=lambda: page.run_task(check_support), + ), + status, + ], + ), + ) + + page.appbar = ft.AppBar(title="LaunchMode Showcase") + page.add( + ft.Text("Check launch-mode support reported by the current platform."), + ft.Row( + wrap=True, + spacing=12, + expand=True, + scroll=ft.ScrollMode.AUTO, + alignment=ft.MainAxisAlignment.CENTER, + controls=[showcase_card(mode) for mode in ft.LaunchMode], + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/launchmode.md b/sdk/python/packages/flet/docs/types/launchmode.md index 8730fb5087..eae14c3c9d 100644 --- a/sdk/python/packages/flet/docs/types/launchmode.md +++ b/sdk/python/packages/flet/docs/types/launchmode.md @@ -1 +1,16 @@ -{{ class_all_options("flet.LaunchMode", separate_signature=False) }} +--- +class_name: flet.LaunchMode +examples: ../../examples/controls/types/launch_mode +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} From 9b76f89e9703fd312751cddb83eb3b038f113cd2 Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Thu, 26 Feb 2026 16:15:55 +0100 Subject: [PATCH 58/71] add CrossAxisAlignment showcase example and update documentation --- .../types/cross_axis_alignment/showcase.py | 91 +++++++++++++++++++ .../flet/docs/types/crossaxisalignment.md | 63 ++----------- 2 files changed, 101 insertions(+), 53 deletions(-) create mode 100644 sdk/python/examples/controls/types/cross_axis_alignment/showcase.py diff --git a/sdk/python/examples/controls/types/cross_axis_alignment/showcase.py b/sdk/python/examples/controls/types/cross_axis_alignment/showcase.py new file mode 100644 index 0000000000..be93e21d5f --- /dev/null +++ b/sdk/python/examples/controls/types/cross_axis_alignment/showcase.py @@ -0,0 +1,91 @@ +import flet as ft + + +def showcase_card(alignment: ft.CrossAxisAlignment) -> ft.Container: + if alignment == ft.CrossAxisAlignment.STRETCH: + preview = ft.Row( + alignment=ft.MainAxisAlignment.SPACE_AROUND, + vertical_alignment=alignment, + controls=[ + ft.Container(width=40, bgcolor=ft.Colors.PRIMARY_CONTAINER), + ft.Container(width=40, bgcolor=ft.Colors.TERTIARY_CONTAINER), + ft.Container(width=40, bgcolor=ft.Colors.SECONDARY_CONTAINER), + ], + ) + else: + effective_alignment = ( + ft.CrossAxisAlignment.CENTER + if alignment == ft.CrossAxisAlignment.BASELINE + else alignment + ) + preview = ft.Row( + alignment=ft.MainAxisAlignment.SPACE_AROUND, + vertical_alignment=effective_alignment, + controls=[ + ft.Container( + width=40, + height=24, + bgcolor=ft.Colors.PRIMARY_CONTAINER, + ), + ft.Container( + width=40, + height=46, + bgcolor=ft.Colors.TERTIARY_CONTAINER, + ), + ft.Container( + width=40, + height=34, + bgcolor=ft.Colors.SECONDARY_CONTAINER, + ), + ], + ) + + return ft.Container( + width=320, + padding=12, + border=ft.Border.all(1, ft.Colors.RED), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=ft.Column( + spacing=8, + controls=[ + ft.Text(alignment.name, weight=ft.FontWeight.BOLD), + ft.Container( + width=250, + height=120, + padding=8, + border=ft.Border.all(1, ft.Colors.OUTLINE), + border_radius=8, + bgcolor=ft.Colors.SURFACE, + content=preview, + ), + ft.Text( + "Baseline uses center fallback in this showcase.", + size=11, + visible=alignment == ft.CrossAxisAlignment.BASELINE, + color=ft.Colors.ON_SURFACE_VARIANT, + ), + ], + ), + ) + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + page.appbar = ft.AppBar(title="CrossAxisAlignment Showcase") + page.add( + ft.Text("Compare vertical alignment behavior inside the same row height."), + ft.Row( + wrap=True, + spacing=12, + expand=True, + scroll=ft.ScrollMode.AUTO, + alignment=ft.MainAxisAlignment.CENTER, + controls=[showcase_card(alignment) for alignment in ft.CrossAxisAlignment], + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/crossaxisalignment.md b/sdk/python/packages/flet/docs/types/crossaxisalignment.md index e4a21e6467..6a823f189c 100644 --- a/sdk/python/packages/flet/docs/types/crossaxisalignment.md +++ b/sdk/python/packages/flet/docs/types/crossaxisalignment.md @@ -1,59 +1,16 @@ -{{ class_all_options("flet.CrossAxisAlignment", separate_signature=False) }} +--- +class_name: flet.CrossAxisAlignment +examples: ../../examples/controls/types/cross_axis_alignment +--- -## Usage example +{{ class_summary(class_name) }} - +## Examples - - +### Showcase ```python -import flet as ft - -def main(page: ft.Page): - def items(count): - items = [] - for i in range(1, count + 1): - items.append( - ft.Container( - content=ft.Text(value=str(i)), - alignment=ft.alignment.center, - width=50, - height=50, - bgcolor=ft.Colors.AMBER_500, - ) - ) - return items - - def column_with_horiz_alignment(align: ft.CrossAxisAlignment): - return ft.Column( - [ - ft.Text(str(align), size=16), - ft.Container( - content=ft.Column( - items(3), - alignment=ft.MainAxisAlignment.START, - horizontal_alignment=align, - ), - bgcolor=ft.Colors.AMBER_100, - width=100, - ), - ] - ) - - page.add( - ft.Row( - [ - column_with_horiz_alignment(ft.CrossAxisAlignment.START), - column_with_horiz_alignment(ft.CrossAxisAlignment.CENTER), - column_with_horiz_alignment(ft.CrossAxisAlignment.END), - ], - spacing=30, - alignment=ft.MainAxisAlignment.START, - ) - ) - -ft.run(main) +--8<-- "{{ examples }}/showcase.py" ``` - - + +{{ class_members(class_name, separate_signature=False) }} From f33a453e9c5e9deee7a3c0e2ac5e192b8c3d4808 Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Thu, 26 Feb 2026 16:17:21 +0100 Subject: [PATCH 59/71] add ListTileStyle showcase example and update documentation --- .../types/list_tile_style/showcase.py | 50 +++++++++++++++++++ .../packages/flet/docs/types/listtilestyle.md | 17 ++++++- 2 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 sdk/python/examples/controls/types/list_tile_style/showcase.py diff --git a/sdk/python/examples/controls/types/list_tile_style/showcase.py b/sdk/python/examples/controls/types/list_tile_style/showcase.py new file mode 100644 index 0000000000..b218aad6e5 --- /dev/null +++ b/sdk/python/examples/controls/types/list_tile_style/showcase.py @@ -0,0 +1,50 @@ +import flet as ft + + +def showcase_card(style: ft.ListTileStyle) -> ft.Container: + return ft.Container( + width=360, + padding=12, + border=ft.Border.all(1, ft.Colors.RED), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=ft.Column( + spacing=8, + controls=[ + ft.Text(style.name, weight=ft.FontWeight.BOLD), + ft.Container( + border=ft.Border.all(1, ft.Colors.OUTLINE), + border_radius=8, + bgcolor=ft.Colors.SURFACE, + content=ft.ListTile( + style=style, + leading=ft.Icon(ft.Icons.PERSON), + title=ft.Text("Jane Doe"), + subtitle=ft.Text("Product Manager"), + trailing=ft.Icon(ft.Icons.CHEVRON_RIGHT), + ), + ), + ], + ), + ) + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + page.appbar = ft.AppBar(title="ListTileStyle Showcase") + page.add( + ft.Text("Compare list tile typography presets."), + ft.Row( + wrap=True, + spacing=12, + expand=True, + scroll=ft.ScrollMode.AUTO, + alignment=ft.MainAxisAlignment.CENTER, + controls=[showcase_card(style) for style in ft.ListTileStyle], + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/listtilestyle.md b/sdk/python/packages/flet/docs/types/listtilestyle.md index 43d536ea26..0100694017 100644 --- a/sdk/python/packages/flet/docs/types/listtilestyle.md +++ b/sdk/python/packages/flet/docs/types/listtilestyle.md @@ -1 +1,16 @@ -{{ class_all_options("flet.ListTileStyle", separate_signature=False) }} +--- +class_name: flet.ListTileStyle +examples: ../../examples/controls/types/list_tile_style +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} From 8e1b820762f048bf4dd76b5dab2eea15b3bcdc7b Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Thu, 26 Feb 2026 16:17:56 +0100 Subject: [PATCH 60/71] add ScrollType showcase example and update documentation --- .../controls/types/scroll_type/showcase.py | 51 +++++++++++++++++++ .../packages/flet/docs/types/scrolltype.md | 17 ++++++- 2 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 sdk/python/examples/controls/types/scroll_type/showcase.py diff --git a/sdk/python/examples/controls/types/scroll_type/showcase.py b/sdk/python/examples/controls/types/scroll_type/showcase.py new file mode 100644 index 0000000000..ab9d67636c --- /dev/null +++ b/sdk/python/examples/controls/types/scroll_type/showcase.py @@ -0,0 +1,51 @@ +import flet as ft + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + counts = {event_type: 0 for event_type in ft.ScrollType} + count_labels = { + event_type: ft.Text(f"{event_type.name}: 0") for event_type in ft.ScrollType + } + + def on_scroll(e: ft.OnScrollEvent): + counts[e.event_type] += 1 + count_labels[ + e.event_type + ].value = f"{e.event_type.name}: {counts[e.event_type]}" + last.value = ( + f"Last event: {e.event_type.name}, pixels={round(e.pixels, 1)}" + f"{', direction=' if e.direction else ''}" + ) + for label in count_labels.values(): + label.update() + last.update() + + page.appbar = ft.AppBar(title="ScrollType Showcase") + page.add( + ft.Text("Scroll the list to generate start/update/user/end notifications."), + last := ft.Text(), + ft.Row( + wrap=True, + spacing=10, + controls=[count_labels[t] for t in ft.ScrollType], + alignment=ft.MainAxisAlignment.CENTER, + ), + ft.Container( + width=360, + height=240, + border=ft.Border.all(1, ft.Colors.OUTLINE), + border_radius=8, + padding=8, + content=ft.Column( + scroll=ft.ScrollMode.ALWAYS, + on_scroll=on_scroll, + controls=[ft.Text(f"Scrollable item {i + 1}") for i in range(60)], + ), + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/scrolltype.md b/sdk/python/packages/flet/docs/types/scrolltype.md index ba76f0e37d..9366f9c186 100644 --- a/sdk/python/packages/flet/docs/types/scrolltype.md +++ b/sdk/python/packages/flet/docs/types/scrolltype.md @@ -1 +1,16 @@ -{{ class_all_options("flet.ScrollType", separate_signature=False) }} +--- +class_name: flet.ScrollType +examples: ../../examples/controls/types/scroll_type +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} From ec055c7d2ad4343fc5bda70e00133f086462717f Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Thu, 26 Feb 2026 16:24:51 +0100 Subject: [PATCH 61/71] add AppLifecycleState showcase example and update documentation --- .../types/app_lifecycle_state/showcase.py | 56 +++++++++++++++++++ .../flet/docs/types/applifecyclestate.md | 17 +++++- 2 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 sdk/python/examples/controls/types/app_lifecycle_state/showcase.py diff --git a/sdk/python/examples/controls/types/app_lifecycle_state/showcase.py b/sdk/python/examples/controls/types/app_lifecycle_state/showcase.py new file mode 100644 index 0000000000..78445dc539 --- /dev/null +++ b/sdk/python/examples/controls/types/app_lifecycle_state/showcase.py @@ -0,0 +1,56 @@ +import flet as ft + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + log = ft.Column( + spacing=4, + scroll=ft.ScrollMode.AUTO, + height=220, + ) + + def add_log(message: str): + log.controls.insert(0, ft.Text(message, size=12)) + if len(log.controls) > 20: + log.controls.pop() + log.update() + + def on_lifecycle(e: ft.AppLifecycleStateChangeEvent): + add_log(f"Received: {e.state.name} ({e.state.value})") + + page.on_app_lifecycle_state_change = on_lifecycle + + page.appbar = ft.AppBar(title="AppLifecycleState Showcase") + page.add( + ft.Text("Switch app focus/visibility to see lifecycle state changes."), + ft.Text( + "Ex: minimize/restore app, switch tabs, or background/foreground app.", + size=11, + ), + ft.Row( + wrap=True, + spacing=8, + controls=[ + ft.Container( + padding=ft.Padding.symmetric(horizontal=8, vertical=4), + border=ft.Border.all(1, ft.Colors.OUTLINE), + border_radius=12, + content=ft.Text(state.name, size=11), + ) + for state in ft.AppLifecycleState + ], + ), + ft.Container( + width=720, + padding=12, + border=ft.Border.all(1, ft.Colors.RED), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=log, + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/applifecyclestate.md b/sdk/python/packages/flet/docs/types/applifecyclestate.md index 744fa58bab..4f7fabec72 100644 --- a/sdk/python/packages/flet/docs/types/applifecyclestate.md +++ b/sdk/python/packages/flet/docs/types/applifecyclestate.md @@ -1 +1,16 @@ -{{ class_all_options("flet.AppLifecycleState", separate_signature=False) }} +--- +class_name: flet.AppLifecycleState +examples: ../../examples/controls/types/app_lifecycle_state +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} From 9be9bc6b90e77b5d132b01290da4a9f6ab4596c0 Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Thu, 26 Feb 2026 16:26:28 +0100 Subject: [PATCH 62/71] add WindowEventType showcase example and update documentation --- .../types/app_lifecycle_state/showcase.py | 2 +- .../types/window_event_type/showcase.py | 56 +++++++++++++++++++ .../flet/docs/types/windoweventtype.md | 17 +++++- 3 files changed, 73 insertions(+), 2 deletions(-) create mode 100644 sdk/python/examples/controls/types/window_event_type/showcase.py diff --git a/sdk/python/examples/controls/types/app_lifecycle_state/showcase.py b/sdk/python/examples/controls/types/app_lifecycle_state/showcase.py index 78445dc539..c99cc67b86 100644 --- a/sdk/python/examples/controls/types/app_lifecycle_state/showcase.py +++ b/sdk/python/examples/controls/types/app_lifecycle_state/showcase.py @@ -18,7 +18,7 @@ def add_log(message: str): log.update() def on_lifecycle(e: ft.AppLifecycleStateChangeEvent): - add_log(f"Received: {e.state.name} ({e.state.value})") + add_log(f"Received: {e.state.name}") page.on_app_lifecycle_state_change = on_lifecycle diff --git a/sdk/python/examples/controls/types/window_event_type/showcase.py b/sdk/python/examples/controls/types/window_event_type/showcase.py new file mode 100644 index 0000000000..eb3668b3e7 --- /dev/null +++ b/sdk/python/examples/controls/types/window_event_type/showcase.py @@ -0,0 +1,56 @@ +import flet as ft + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + log = ft.Column( + spacing=4, + scroll=ft.ScrollMode.AUTO, + height=220, + ) + + def add_log(message: str): + log.controls.insert(0, ft.Text(message, size=12)) + if len(log.controls) > 20: + log.controls.pop() + log.update() + + def on_window_event(e: ft.WindowEvent): + add_log(f"Received: {e.type.name}") + + page.window.on_event = on_window_event + + page.appbar = ft.AppBar(title="WindowEventType Showcase") + page.add( + ft.Text("Interact with the app window and watch incoming event types."), + ft.Text( + "Desktop only. Try focus, blur, resize, move, minimize, maximize.", + size=11, + ), + ft.Row( + wrap=True, + spacing=8, + controls=[ + ft.Container( + padding=ft.Padding.symmetric(horizontal=8, vertical=4), + border=ft.Border.all(1, ft.Colors.OUTLINE), + border_radius=12, + content=ft.Text(event_type.name, size=11), + ) + for event_type in ft.WindowEventType + ], + ), + ft.Container( + width=720, + padding=12, + border=ft.Border.all(1, ft.Colors.RED), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=log, + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/windoweventtype.md b/sdk/python/packages/flet/docs/types/windoweventtype.md index 8a1261d475..9224f0ff41 100644 --- a/sdk/python/packages/flet/docs/types/windoweventtype.md +++ b/sdk/python/packages/flet/docs/types/windoweventtype.md @@ -1 +1,16 @@ -{{ class_all_options("flet.WindowEventType", separate_signature=False) }} +--- +class_name: flet.WindowEventType +examples: ../../examples/controls/types/window_event_type +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} From 1ed1262906bc479d89f4d77ea857bbd2cc052091 Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Thu, 26 Feb 2026 22:27:19 +0100 Subject: [PATCH 63/71] add minimum and target SDK version documentation with examples --- .../packages/flet/docs/publish/android.md | 68 +++++++++++++++++++ .../flet/docs/types/tabbarindicatorsize.md | 17 ++++- 2 files changed, 84 insertions(+), 1 deletion(-) diff --git a/sdk/python/packages/flet/docs/publish/android.md b/sdk/python/packages/flet/docs/publish/android.md index 9aa758b21c..d678a7cd94 100644 --- a/sdk/python/packages/flet/docs/publish/android.md +++ b/sdk/python/packages/flet/docs/publish/android.md @@ -479,6 +479,74 @@ In the [`AndroidManifest.xml`](index.md#build-template), it will be translated a ``` +### Minimum SDK version + +The minimum Android API level your app can be installed on. + +#### Resolution order + +Its value is determined in the following order of precedence: + +1. `[tool.flet.android].min_sdk_version` +2. Flutter default: `flutter.minSdkVersion` + +#### Example + +/// tab | `pyproject.toml` +```toml +[tool.flet.android] +min_sdk_version = 24 +``` +/// + +### Target SDK version + +The Android API level your app targets for runtime behavior and compatibility. + +#### Resolution order + +Its value is determined in the following order of precedence: + +1. `[tool.flet.android].target_sdk_version` +2. Flutter default: `flutter.targetSdkVersion` + +#### Example + +/// tab | `pyproject.toml` +```toml +[tool.flet.android] +target_sdk_version = 35 +``` +/// + +### Adaptive icon background + +The background color used for the Android adaptive launcher icon. + +This value is applied when app icons are generated for Android. + +#### Resolution order + +Its value is determined in the following order of precedence: + +1. [`--android-adaptive-icon-background`](../cli/flet-build.md#-android-adaptive-icon-background) +2. `[tool.flet.android].adaptive_icon_background` +3. [Build template](index.md#build-template) default: `#ffffff` + +#### Example + +/// tab | `flet build` +```bash +flet build apk --android-adaptive-icon-background "#0B6BFF" +``` +/// +/// tab | `pyproject.toml` +```toml +[tool.flet.android] +adaptive_icon_background = "#0B6BFF" +``` +/// + ## ADB Tips [Android Debug Bridge (adb)](https://developer.android.com/tools/adb) is a diff --git a/sdk/python/packages/flet/docs/types/tabbarindicatorsize.md b/sdk/python/packages/flet/docs/types/tabbarindicatorsize.md index 881c1a0951..d8c3e4e5b6 100644 --- a/sdk/python/packages/flet/docs/types/tabbarindicatorsize.md +++ b/sdk/python/packages/flet/docs/types/tabbarindicatorsize.md @@ -1 +1,16 @@ -{{ class_all_options("flet.TabBarIndicatorSize", separate_signature=False) }} +--- +class_name: flet.TabBarIndicatorSize +examples: ../../examples/controls/types/tab_bar_indicator_size +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} From f4696bb2480f5c0be31439d446bebc52d1968453 Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Fri, 27 Feb 2026 08:57:44 +0100 Subject: [PATCH 64/71] add assertiveness showcase example and update documentation --- .../controls/types/assertiveness/showcase.py | 67 +++++++++++++++++++ .../packages/flet/docs/types/assertiveness.md | 17 ++++- 2 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 sdk/python/examples/controls/types/assertiveness/showcase.py diff --git a/sdk/python/examples/controls/types/assertiveness/showcase.py b/sdk/python/examples/controls/types/assertiveness/showcase.py new file mode 100644 index 0000000000..d8242e412d --- /dev/null +++ b/sdk/python/examples/controls/types/assertiveness/showcase.py @@ -0,0 +1,67 @@ +import flet as ft + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + semantics = ft.SemanticsService() + + def showcase_card(assertiveness: ft.Assertiveness) -> ft.Container: + status = ft.Text("Send an accessibility announcement.", size=11) + + async def announce(): + try: + await semantics.announce_message( + f"Announcement with {assertiveness.name} assertiveness.", + assertiveness=assertiveness, + ) + status.value = f"Sent with {assertiveness.value}." + except Exception as ex: + status.value = f"Error: {ex}" + status.update() + + return ft.Container( + width=320, + padding=12, + border=ft.Border.all(1, ft.Colors.RED), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=ft.Column( + spacing=8, + controls=[ + ft.Text(assertiveness.name, weight=ft.FontWeight.BOLD), + ft.Text( + assertiveness.value, + size=11, + color=ft.Colors.ON_SURFACE_VARIANT, + ), + ft.Button( + "Announce message", + icon=ft.Icons.RECORD_VOICE_OVER, + on_click=lambda: page.run_task(announce), + ), + status, + ], + ), + ) + + page.appbar = ft.AppBar(title="Assertiveness Showcase") + page.add( + ft.Text( + "Compare announcement assertiveness levels. " + "Enable a screen reader to hear the difference." + ), + ft.Row( + wrap=True, + spacing=12, + expand=True, + scroll=ft.ScrollMode.AUTO, + alignment=ft.MainAxisAlignment.CENTER, + controls=[ + showcase_card(assertiveness) for assertiveness in ft.Assertiveness + ], + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/assertiveness.md b/sdk/python/packages/flet/docs/types/assertiveness.md index 1167910678..dfd5651bb2 100644 --- a/sdk/python/packages/flet/docs/types/assertiveness.md +++ b/sdk/python/packages/flet/docs/types/assertiveness.md @@ -1 +1,16 @@ -{{ class_all_options("flet.Assertiveness", separate_signature=False) }} +--- +class_name: flet.Assertiveness +examples: ../../examples/controls/types/assertiveness +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} From f749f2a41acba97abd66903779d58e32cd946f72 Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Fri, 27 Feb 2026 09:22:31 +0100 Subject: [PATCH 65/71] add CupertinoDatePickerDateOrder showcase example and update documentation --- .../showcase.py | 61 +++++++++++++++++++ .../types/cupertinodatepickerdateorder.md | 17 +++++- 2 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 sdk/python/examples/controls/types/cupertino_date_picker_date_order/showcase.py diff --git a/sdk/python/examples/controls/types/cupertino_date_picker_date_order/showcase.py b/sdk/python/examples/controls/types/cupertino_date_picker_date_order/showcase.py new file mode 100644 index 0000000000..8dea1d8079 --- /dev/null +++ b/sdk/python/examples/controls/types/cupertino_date_picker_date_order/showcase.py @@ -0,0 +1,61 @@ +from datetime import datetime + +import flet as ft + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + def showcase_card(date_order: ft.CupertinoDatePickerDateOrder) -> ft.Container: + def open_picker(_): + picker = ft.CupertinoDatePicker( + date_picker_mode=ft.CupertinoDatePickerMode.DATE, + date_order=date_order, + value=datetime(2024, 3, 12, 10, 0), + ) + page.show_dialog( + ft.CupertinoBottomSheet( + content=picker, + height=216, + padding=ft.Padding.only(top=6), + ) + ) + + return ft.Container( + width=320, + padding=12, + border=ft.Border.all(1, ft.Colors.RED), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=ft.Column( + spacing=8, + controls=[ + ft.Text(date_order.name, weight=ft.FontWeight.BOLD), + ft.Button( + "Open picker", + icon=ft.CupertinoIcons.CALENDAR, + on_click=open_picker, + ), + ], + ), + ) + + page.appbar = ft.AppBar(title="CupertinoDatePickerDateOrder Showcase") + page.add( + ft.Text("Open each variant in CupertinoBottomSheet."), + ft.Row( + wrap=True, + spacing=12, + expand=True, + scroll=ft.ScrollMode.AUTO, + alignment=ft.MainAxisAlignment.CENTER, + controls=[ + showcase_card(date_order) + for date_order in ft.CupertinoDatePickerDateOrder + ], + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/cupertinodatepickerdateorder.md b/sdk/python/packages/flet/docs/types/cupertinodatepickerdateorder.md index 2652810d18..13af23f92b 100644 --- a/sdk/python/packages/flet/docs/types/cupertinodatepickerdateorder.md +++ b/sdk/python/packages/flet/docs/types/cupertinodatepickerdateorder.md @@ -1 +1,16 @@ -{{ class_all_options("flet.CupertinoDatePickerDateOrder", separate_signature=False) }} +--- +class_name: flet.CupertinoDatePickerDateOrder +examples: ../../examples/controls/types/cupertino_date_picker_date_order +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} From 40d073157a5284f01a02704ff8d891a3f2c150bf Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Fri, 27 Feb 2026 09:23:30 +0100 Subject: [PATCH 66/71] add CupertinoDatePickerMode showcase example and update documentation --- .../cupertino_date_picker_mode/showcase.py | 58 +++++++++++++++++++ .../docs/types/cupertinodatepickermode.md | 17 +++++- 2 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 sdk/python/examples/controls/types/cupertino_date_picker_mode/showcase.py diff --git a/sdk/python/examples/controls/types/cupertino_date_picker_mode/showcase.py b/sdk/python/examples/controls/types/cupertino_date_picker_mode/showcase.py new file mode 100644 index 0000000000..e5af7a3c4b --- /dev/null +++ b/sdk/python/examples/controls/types/cupertino_date_picker_mode/showcase.py @@ -0,0 +1,58 @@ +from datetime import datetime + +import flet as ft + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + def showcase_card(mode: ft.CupertinoDatePickerMode) -> ft.Container: + def open_picker(_): + picker = ft.CupertinoDatePicker( + date_picker_mode=mode, + value=datetime(2024, 7, 13, 16, 14), + use_24h_format=True, + ) + page.show_dialog( + ft.CupertinoBottomSheet( + content=picker, + height=216, + padding=ft.Padding.only(top=6), + ) + ) + + return ft.Container( + width=320, + padding=12, + border=ft.Border.all(1, ft.Colors.RED), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=ft.Column( + spacing=8, + controls=[ + ft.Text(mode.name, weight=ft.FontWeight.BOLD), + ft.Button( + "Open picker", + icon=ft.CupertinoIcons.CALENDAR, + on_click=open_picker, + ), + ], + ), + ) + + page.appbar = ft.AppBar(title="CupertinoDatePickerMode Showcase") + page.add( + ft.Text("Open each mode in CupertinoBottomSheet to compare behavior."), + ft.Row( + wrap=True, + spacing=12, + expand=True, + scroll=ft.ScrollMode.AUTO, + alignment=ft.MainAxisAlignment.CENTER, + controls=[showcase_card(mode) for mode in ft.CupertinoDatePickerMode], + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/cupertinodatepickermode.md b/sdk/python/packages/flet/docs/types/cupertinodatepickermode.md index 386eb968e2..522295bba7 100644 --- a/sdk/python/packages/flet/docs/types/cupertinodatepickermode.md +++ b/sdk/python/packages/flet/docs/types/cupertinodatepickermode.md @@ -1 +1,16 @@ -{{ class_all_options("flet.CupertinoDatePickerMode", separate_signature=False) }} +--- +class_name: flet.CupertinoDatePickerMode +examples: ../../examples/controls/types/cupertino_date_picker_mode +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} From 87031e5e953df13c5b370c5fa3e3181a420e38bd Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Fri, 27 Feb 2026 09:30:33 +0100 Subject: [PATCH 67/71] add CupertinoTimerPickerMode showcase example and update documentation --- .../cupertino_timer_picker_mode/showcase.py | 42 +++++++++++++++++++ .../docs/types/cupertinotimerpickermode.md | 17 +++++++- 2 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 sdk/python/examples/controls/types/cupertino_timer_picker_mode/showcase.py diff --git a/sdk/python/examples/controls/types/cupertino_timer_picker_mode/showcase.py b/sdk/python/examples/controls/types/cupertino_timer_picker_mode/showcase.py new file mode 100644 index 0000000000..859d51bf88 --- /dev/null +++ b/sdk/python/examples/controls/types/cupertino_timer_picker_mode/showcase.py @@ -0,0 +1,42 @@ +import flet as ft + + +def showcase_card(mode: ft.CupertinoTimerPickerMode) -> ft.Container: + return ft.Container( + width=340, + padding=12, + border=ft.Border.all(1, ft.Colors.RED), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=ft.Column( + spacing=8, + controls=[ + ft.Text(mode.name, weight=ft.FontWeight.BOLD), + ft.CupertinoTimerPicker( + mode=mode, + value=ft.Duration(seconds=754), + ), + ], + ), + ) + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + page.appbar = ft.AppBar(title="CupertinoTimerPickerMode Showcase") + page.add( + ft.Text("Compare timer picker layouts."), + ft.Row( + wrap=True, + spacing=12, + expand=True, + scroll=ft.ScrollMode.AUTO, + alignment=ft.MainAxisAlignment.CENTER, + controls=[showcase_card(mode) for mode in ft.CupertinoTimerPickerMode], + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/cupertinotimerpickermode.md b/sdk/python/packages/flet/docs/types/cupertinotimerpickermode.md index 68e7bb3260..237661c671 100644 --- a/sdk/python/packages/flet/docs/types/cupertinotimerpickermode.md +++ b/sdk/python/packages/flet/docs/types/cupertinotimerpickermode.md @@ -1 +1,16 @@ -{{ class_all_options("flet.CupertinoTimerPickerMode", separate_signature=False) }} +--- +class_name: flet.CupertinoTimerPickerMode +examples: ../../examples/controls/types/cupertino_timer_picker_mode +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} From 2623c4986e04410b835fe032a5461a7ececa54a3 Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Fri, 27 Feb 2026 09:31:20 +0100 Subject: [PATCH 68/71] add CupertinoButtonSize showcase example and update documentation --- .../types/cupertino_button_size/showcase.py | 46 +++++++++++++++++++ .../flet/docs/types/cupertinobuttonsize.md | 17 ++++++- 2 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 sdk/python/examples/controls/types/cupertino_button_size/showcase.py diff --git a/sdk/python/examples/controls/types/cupertino_button_size/showcase.py b/sdk/python/examples/controls/types/cupertino_button_size/showcase.py new file mode 100644 index 0000000000..4cf2ebd8fc --- /dev/null +++ b/sdk/python/examples/controls/types/cupertino_button_size/showcase.py @@ -0,0 +1,46 @@ +import flet as ft + + +def showcase_card(size: ft.CupertinoButtonSize) -> ft.Container: + return ft.Container( + width=300, + padding=12, + border=ft.Border.all(1, ft.Colors.RED), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=ft.Column( + spacing=10, + horizontal_alignment=ft.CrossAxisAlignment.CENTER, + controls=[ + ft.Text(size.name, weight=ft.FontWeight.BOLD), + ft.CupertinoButton( + content="Continue", + icon=ft.CupertinoIcons.RIGHT_CHEVRON, + size=size, + bgcolor=ft.Colors.BLUE_600, + color=ft.Colors.WHITE, + ), + ], + ), + ) + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + + page.appbar = ft.AppBar(title="CupertinoButtonSize Showcase") + page.add( + ft.Text("Compare iOS button size presets."), + ft.Row( + wrap=True, + spacing=12, + expand=True, + scroll=ft.ScrollMode.AUTO, + alignment=ft.MainAxisAlignment.CENTER, + controls=[showcase_card(size) for size in ft.CupertinoButtonSize], + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/cupertinobuttonsize.md b/sdk/python/packages/flet/docs/types/cupertinobuttonsize.md index 7a02d8e523..acb9798760 100644 --- a/sdk/python/packages/flet/docs/types/cupertinobuttonsize.md +++ b/sdk/python/packages/flet/docs/types/cupertinobuttonsize.md @@ -1 +1,16 @@ -{{ class_all_options("flet.CupertinoButtonSize", separate_signature=False) }} +--- +class_name: flet.CupertinoButtonSize +examples: ../../examples/controls/types/cupertino_button_size +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} From 8eaff393b0d3e2cfd6bbd57af1c8b70e8fb691e6 Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Fri, 27 Feb 2026 09:45:34 +0100 Subject: [PATCH 69/71] add AnimationCurve showcase example and update documentation --- .../types/animation_curve/showcase.py | 159 ++++++++++++++++++ .../flet/docs/types/animationcurve.md | 17 +- 2 files changed, 175 insertions(+), 1 deletion(-) create mode 100644 sdk/python/examples/controls/types/animation_curve/showcase.py diff --git a/sdk/python/examples/controls/types/animation_curve/showcase.py b/sdk/python/examples/controls/types/animation_curve/showcase.py new file mode 100644 index 0000000000..180b560133 --- /dev/null +++ b/sdk/python/examples/controls/types/animation_curve/showcase.py @@ -0,0 +1,159 @@ +import asyncio + +import flet as ft + + +def main(page: ft.Page): + page.theme_mode = ft.ThemeMode.DARK + page.horizontal_alignment = ft.CrossAxisAlignment.CENTER + duration_ms = 1200 + track_width = 248 + racer_size = 26 + lane_padding = 10 + lane_inner_width = track_width + lane_width = lane_inner_width + lane_padding * 2 + travel_units = (lane_inner_width - racer_size) / racer_size + card_animations: list = [] + + def showcase_card(curve: ft.AnimationCurve) -> ft.Container: + state = {"forward": False} + progress = ft.Container( + width=0, + height=6, + border_radius=3, + bgcolor=ft.Colors.PRIMARY_CONTAINER, + animate=ft.Animation(duration_ms, curve=curve), + ) + racer = ft.Container( + width=racer_size, + height=racer_size, + border_radius=13, + bgcolor=ft.Colors.PRIMARY, + shadow=ft.BoxShadow( + blur_radius=12, spread_radius=1, color=ft.Colors.PRIMARY + ), + alignment=ft.Alignment.CENTER, + content=ft.Icon(ft.Icons.BOLT, size=14, color=ft.Colors.ON_PRIMARY), + offset=ft.Offset(0, 0), + rotate=0, + scale=1, + animate_offset=ft.Animation(duration_ms, curve=curve), + animate_rotation=ft.Animation(duration_ms, curve=curve), + animate_scale=ft.Animation(duration_ms, curve=curve), + ) + status = ft.Text("idle", size=11, color=ft.Colors.ON_SURFACE_VARIANT) + + def animate(forward: bool): + state["forward"] = forward + racer.offset = ft.Offset(travel_units if forward else 0, 0) + racer.rotate = 1 if forward else 0 + racer.scale = 1.25 if forward else 1 + progress.width = track_width if forward else 0 + status.value = "forward" if forward else "reverse" + racer.update() + progress.update() + status.update() + + def replay(e): + animate(not state["forward"]) + + card_animations.append(animate) + + return ft.Container( + width=340, + padding=12, + border=ft.Border.all(1, ft.Colors.RED), + border_radius=10, + bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, + content=ft.Column( + spacing=9, + controls=[ + ft.Text(curve.name, weight=ft.FontWeight.BOLD), + ft.Container( + width=track_width, + height=6, + border_radius=3, + bgcolor=ft.Colors.SURFACE_CONTAINER_HIGH, + content=progress, + ), + ft.Container( + width=lane_width, + height=48, + padding=lane_padding, + border=ft.Border.all(1, ft.Colors.OUTLINE), + border_radius=8, + clip_behavior=ft.ClipBehavior.HARD_EDGE, + bgcolor=ft.Colors.SURFACE, + content=ft.Stack( + controls=[ + ft.Row( + spacing=0, + alignment=ft.MainAxisAlignment.SPACE_BETWEEN, + controls=[ + ft.Container( + width=4, + height=22, + bgcolor=ft.Colors.OUTLINE, + ), + ft.Container( + width=4, + height=22, + bgcolor=ft.Colors.OUTLINE, + ), + ], + ), + racer, + ], + ), + ), + ft.Row( + alignment=ft.MainAxisAlignment.SPACE_BETWEEN, + controls=[ + status, + ft.Button("Replay", icon=ft.Icons.REPLAY, on_click=replay), + ], + ), + ], + ), + ) + + def play_all(e): + for animate in card_animations: + animate(True) + + def reverse_all(e): + for animate in card_animations: + animate(False) + + async def wave_all(): + for animate in card_animations: + animate(True) + await asyncio.sleep(0.04) + + page.appbar = ft.AppBar(title="AnimationCurve Showcase") + page.add( + ft.Text( + "Curve Lab: compare timing profiles across motion, progress, and spin." + ), + ft.Row( + wrap=True, + spacing=8, + alignment=ft.MainAxisAlignment.CENTER, + controls=[ + ft.Button("Play all", icon=ft.Icons.PLAY_ARROW, on_click=play_all), + ft.Button("Reverse all", icon=ft.Icons.REPLAY, on_click=reverse_all), + ft.Button("Wave", on_click=lambda e: page.run_task(wave_all)), + ], + ), + ft.Row( + wrap=True, + spacing=12, + expand=True, + scroll=ft.ScrollMode.AUTO, + alignment=ft.MainAxisAlignment.CENTER, + controls=[showcase_card(curve) for curve in ft.AnimationCurve], + ), + ) + + +ft.run(main) diff --git a/sdk/python/packages/flet/docs/types/animationcurve.md b/sdk/python/packages/flet/docs/types/animationcurve.md index b07de2b394..2013613b55 100644 --- a/sdk/python/packages/flet/docs/types/animationcurve.md +++ b/sdk/python/packages/flet/docs/types/animationcurve.md @@ -1 +1,16 @@ -{{ class_all_options("flet.AnimationCurve", separate_signature=False) }} +--- +class_name: flet.AnimationCurve +examples: ../../examples/controls/types/animation_curve +--- + +{{ class_summary(class_name) }} + +## Examples + +### Showcase + +```python +--8<-- "{{ examples }}/showcase.py" +``` + +{{ class_members(class_name, separate_signature=False) }} From 6aedd590dac72b66663b2e086df8adb27866b197 Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Fri, 27 Feb 2026 10:11:21 +0100 Subject: [PATCH 70/71] update packaging documentation with details on pure Python dependencies and source distributions --- sdk/python/packages/flet/docs/publish/index.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/sdk/python/packages/flet/docs/publish/index.md b/sdk/python/packages/flet/docs/publish/index.md index 89b8810590..934d8dbfd4 100644 --- a/sdk/python/packages/flet/docs/publish/index.md +++ b/sdk/python/packages/flet/docs/publish/index.md @@ -641,7 +641,13 @@ dependencies = [ By default, packaging for mobile and web only installs binary wheels. Use source packages to allow specific dependencies to be installed from [source distributions (sdists)](https://pydevtools.com/handbook/reference/sdist/). -On desktop targets, source installs are already allowed, so this setting is mainly for +This can be useful for installing - pure Python - dependencies that do not have pre-built wheels for the +target mobile platform or an all-platform wheel (`*-py3-none-any.whl`), but instead provide a source distribution (`*.tar.gz`). + +For more information on pure vs non-pure Python packages, see our +[blog post](https://flet.dev/blog/flet-packaging-update#pure-python-packages) on the topic. + +On desktop targets, source installs are already allowed, so this setting is mainly/only for [Android](android.md) and [iOS](ios.md) builds. #### Resolution order From 1decc38e7d212897549e01f32fd0d6fd761c73fe Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Sun, 1 Mar 2026 18:29:23 +0100 Subject: [PATCH 71/71] use system theme mode in examples --- .../controls/types/animated_switcher_transition/showcase.py | 1 - sdk/python/examples/controls/types/animation_curve/showcase.py | 1 - .../examples/controls/types/app_lifecycle_state/showcase.py | 1 - sdk/python/examples/controls/types/assertiveness/showcase.py | 1 - sdk/python/examples/controls/types/axis/showcase.py | 1 - sdk/python/examples/controls/types/blend_mode/showcase.py | 1 - sdk/python/examples/controls/types/blur_style/showcase.py | 1 - sdk/python/examples/controls/types/blur_tile_mode/showcase.py | 1 - .../controls/types/border_side_stroke_align/showcase.py | 1 - sdk/python/examples/controls/types/border_style/showcase.py | 1 - sdk/python/examples/controls/types/box_fit/showcase.py | 1 - sdk/python/examples/controls/types/box_shape/showcase.py | 1 - sdk/python/examples/controls/types/card_variant/showcase.py | 1 - sdk/python/examples/controls/types/clip_behavior/showcase.py | 1 - .../examples/controls/types/context_menu_trigger/showcase.py | 1 - .../examples/controls/types/cross_axis_alignment/showcase.py | 1 - .../examples/controls/types/cupertino_button_size/showcase.py | 1 - .../types/cupertino_date_picker_date_order/showcase.py | 1 - .../controls/types/cupertino_date_picker_mode/showcase.py | 1 - .../controls/types/cupertino_timer_picker_mode/showcase.py | 1 - .../examples/controls/types/date_picker_entry_mode/showcase.py | 1 - .../examples/controls/types/date_picker_mode/showcase.py | 1 - .../examples/controls/types/dismiss_direction/showcase.py | 1 - sdk/python/examples/controls/types/filter_quality/showcase.py | 1 - .../controls/types/floating_action_button_location/showcase.py | 1 - sdk/python/examples/controls/types/font_weight/showcase.py | 1 - .../examples/controls/types/gradient_tile_mode/showcase.py | 1 - sdk/python/examples/controls/types/image_repeat/showcase.py | 1 - sdk/python/examples/controls/types/label_position/showcase.py | 1 - sdk/python/examples/controls/types/launch_mode/showcase.py | 1 - sdk/python/examples/controls/types/list_tile_style/showcase.py | 1 - .../controls/types/list_tile_title_alignment/showcase.py | 1 - .../examples/controls/types/main_axis_alignment/showcase.py | 1 - sdk/python/examples/controls/types/mouse_cursor/showcase.py | 1 - .../controls/types/navigation_bar_label_behavior/showcase.py | 1 - .../controls/types/navigation_rail_label_type/showcase.py | 1 - sdk/python/examples/controls/types/orientation/showcase.py | 3 +-- .../controls/types/overlay_visibility_mode/showcase.py | 1 - sdk/python/examples/controls/types/painting_style/showcase.py | 1 - sdk/python/examples/controls/types/point_mode/showcase.py | 1 - .../examples/controls/types/popup_menu_position/showcase.py | 1 - .../examples/controls/types/scroll_direction/showcase.py | 1 - sdk/python/examples/controls/types/scroll_mode/showcase.py | 1 - sdk/python/examples/controls/types/scroll_type/showcase.py | 1 - .../examples/controls/types/slider_interaction/showcase.py | 1 - .../examples/controls/types/snack_bar_behavior/showcase.py | 1 - sdk/python/examples/controls/types/stroke_cap/showcase.py | 1 - sdk/python/examples/controls/types/stroke_join/showcase.py | 1 - sdk/python/examples/controls/types/tab_alignment/showcase.py | 1 - .../examples/controls/types/tab_bar_indicator_size/showcase.py | 1 - .../controls/types/tab_indicator_animation/showcase.py | 1 - sdk/python/examples/controls/types/text_align/showcase.py | 1 - .../examples/controls/types/text_capitalization/showcase.py | 1 - .../examples/controls/types/text_decoration_style/showcase.py | 1 - sdk/python/examples/controls/types/text_overflow/showcase.py | 1 - sdk/python/examples/controls/types/tile_affinity/showcase.py | 1 - .../examples/controls/types/time_picker_entry_mode/showcase.py | 1 - .../controls/types/time_picker_hour_format/showcase.py | 1 - sdk/python/examples/controls/types/url_target/showcase.py | 3 +-- sdk/python/examples/controls/types/visual_density/showcase.py | 1 - .../examples/controls/types/window_event_type/showcase.py | 1 - 61 files changed, 2 insertions(+), 63 deletions(-) diff --git a/sdk/python/examples/controls/types/animated_switcher_transition/showcase.py b/sdk/python/examples/controls/types/animated_switcher_transition/showcase.py index 014831ccb7..2a29132850 100644 --- a/sdk/python/examples/controls/types/animated_switcher_transition/showcase.py +++ b/sdk/python/examples/controls/types/animated_switcher_transition/showcase.py @@ -52,7 +52,6 @@ def swap(_): def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER page.appbar = ft.AppBar(title="AnimatedSwitcherTransition Showcase") diff --git a/sdk/python/examples/controls/types/animation_curve/showcase.py b/sdk/python/examples/controls/types/animation_curve/showcase.py index 180b560133..a7373b4ac0 100644 --- a/sdk/python/examples/controls/types/animation_curve/showcase.py +++ b/sdk/python/examples/controls/types/animation_curve/showcase.py @@ -4,7 +4,6 @@ def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER duration_ms = 1200 track_width = 248 diff --git a/sdk/python/examples/controls/types/app_lifecycle_state/showcase.py b/sdk/python/examples/controls/types/app_lifecycle_state/showcase.py index c99cc67b86..d105fba482 100644 --- a/sdk/python/examples/controls/types/app_lifecycle_state/showcase.py +++ b/sdk/python/examples/controls/types/app_lifecycle_state/showcase.py @@ -2,7 +2,6 @@ def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER log = ft.Column( diff --git a/sdk/python/examples/controls/types/assertiveness/showcase.py b/sdk/python/examples/controls/types/assertiveness/showcase.py index d8242e412d..92c921e96e 100644 --- a/sdk/python/examples/controls/types/assertiveness/showcase.py +++ b/sdk/python/examples/controls/types/assertiveness/showcase.py @@ -2,7 +2,6 @@ def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER semantics = ft.SemanticsService() diff --git a/sdk/python/examples/controls/types/axis/showcase.py b/sdk/python/examples/controls/types/axis/showcase.py index 83d61cefe5..fda6502f09 100644 --- a/sdk/python/examples/controls/types/axis/showcase.py +++ b/sdk/python/examples/controls/types/axis/showcase.py @@ -28,7 +28,6 @@ def showcase_card(axis: ft.Axis) -> ft.Container: def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER page.appbar = ft.AppBar(title="Axis Showcase") diff --git a/sdk/python/examples/controls/types/blend_mode/showcase.py b/sdk/python/examples/controls/types/blend_mode/showcase.py index 4d6df8d7ba..1b7a33f838 100644 --- a/sdk/python/examples/controls/types/blend_mode/showcase.py +++ b/sdk/python/examples/controls/types/blend_mode/showcase.py @@ -27,7 +27,6 @@ def showcase_card(blend_mode: ft.BlendMode) -> ft.Container: def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER page.appbar = ft.AppBar(title="BlendMode Showcase") diff --git a/sdk/python/examples/controls/types/blur_style/showcase.py b/sdk/python/examples/controls/types/blur_style/showcase.py index 13283c8a63..15e61f8820 100644 --- a/sdk/python/examples/controls/types/blur_style/showcase.py +++ b/sdk/python/examples/controls/types/blur_style/showcase.py @@ -35,7 +35,6 @@ def showcase_card(style: ft.BlurStyle) -> ft.Container: def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER page.appbar = ft.AppBar(title="BlurStyle Showcase") diff --git a/sdk/python/examples/controls/types/blur_tile_mode/showcase.py b/sdk/python/examples/controls/types/blur_tile_mode/showcase.py index e8b6ef05db..e92665761f 100644 --- a/sdk/python/examples/controls/types/blur_tile_mode/showcase.py +++ b/sdk/python/examples/controls/types/blur_tile_mode/showcase.py @@ -63,7 +63,6 @@ def showcase_card(mode: ft.BlurTileMode) -> ft.Container: def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER page.appbar = ft.AppBar(title="BlurTileMode Showcase") diff --git a/sdk/python/examples/controls/types/border_side_stroke_align/showcase.py b/sdk/python/examples/controls/types/border_side_stroke_align/showcase.py index 8791a08b78..a233c24569 100644 --- a/sdk/python/examples/controls/types/border_side_stroke_align/showcase.py +++ b/sdk/python/examples/controls/types/border_side_stroke_align/showcase.py @@ -49,7 +49,6 @@ def showcase_card(align: ft.BorderSideStrokeAlign) -> ft.Container: def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER page.appbar = ft.AppBar(title="BorderSideStrokeAlign Showcase") diff --git a/sdk/python/examples/controls/types/border_style/showcase.py b/sdk/python/examples/controls/types/border_style/showcase.py index 24ab211c79..7f2f27f73c 100644 --- a/sdk/python/examples/controls/types/border_style/showcase.py +++ b/sdk/python/examples/controls/types/border_style/showcase.py @@ -30,7 +30,6 @@ def showcase_card(style: ft.BorderStyle) -> ft.Container: def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER page.appbar = ft.AppBar(title="BorderStyle Showcase") diff --git a/sdk/python/examples/controls/types/box_fit/showcase.py b/sdk/python/examples/controls/types/box_fit/showcase.py index ff8cf4949a..7bc772f7c6 100644 --- a/sdk/python/examples/controls/types/box_fit/showcase.py +++ b/sdk/python/examples/controls/types/box_fit/showcase.py @@ -32,7 +32,6 @@ def showcase_card(fit: ft.BoxFit) -> ft.Container: def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER page.appbar = ft.AppBar(title="BoxFit Showcase") diff --git a/sdk/python/examples/controls/types/box_shape/showcase.py b/sdk/python/examples/controls/types/box_shape/showcase.py index f5620383ab..3ba603d176 100644 --- a/sdk/python/examples/controls/types/box_shape/showcase.py +++ b/sdk/python/examples/controls/types/box_shape/showcase.py @@ -44,7 +44,6 @@ def showcase_card(shape: ft.BoxShape) -> ft.Container: def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER page.appbar = ft.AppBar(title="BoxShape Showcase") diff --git a/sdk/python/examples/controls/types/card_variant/showcase.py b/sdk/python/examples/controls/types/card_variant/showcase.py index 35a72f5934..2da8c2c270 100644 --- a/sdk/python/examples/controls/types/card_variant/showcase.py +++ b/sdk/python/examples/controls/types/card_variant/showcase.py @@ -37,7 +37,6 @@ def showcase_card(variant: ft.CardVariant) -> ft.Container: def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER page.appbar = ft.AppBar(title="CardVariant Showcase") diff --git a/sdk/python/examples/controls/types/clip_behavior/showcase.py b/sdk/python/examples/controls/types/clip_behavior/showcase.py index 953a2adf71..19d7373174 100644 --- a/sdk/python/examples/controls/types/clip_behavior/showcase.py +++ b/sdk/python/examples/controls/types/clip_behavior/showcase.py @@ -60,7 +60,6 @@ def showcase_card(clip_behavior: ft.ClipBehavior) -> ft.Container: def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER page.appbar = ft.AppBar(title="ClipBehavior Showcase") diff --git a/sdk/python/examples/controls/types/context_menu_trigger/showcase.py b/sdk/python/examples/controls/types/context_menu_trigger/showcase.py index 9b2b61a80c..c60db87f7a 100644 --- a/sdk/python/examples/controls/types/context_menu_trigger/showcase.py +++ b/sdk/python/examples/controls/types/context_menu_trigger/showcase.py @@ -57,7 +57,6 @@ def on_dismiss(_): async def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER if page.web: diff --git a/sdk/python/examples/controls/types/cross_axis_alignment/showcase.py b/sdk/python/examples/controls/types/cross_axis_alignment/showcase.py index be93e21d5f..5126081a8d 100644 --- a/sdk/python/examples/controls/types/cross_axis_alignment/showcase.py +++ b/sdk/python/examples/controls/types/cross_axis_alignment/showcase.py @@ -71,7 +71,6 @@ def showcase_card(alignment: ft.CrossAxisAlignment) -> ft.Container: def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER page.appbar = ft.AppBar(title="CrossAxisAlignment Showcase") diff --git a/sdk/python/examples/controls/types/cupertino_button_size/showcase.py b/sdk/python/examples/controls/types/cupertino_button_size/showcase.py index 4cf2ebd8fc..20b05de1c5 100644 --- a/sdk/python/examples/controls/types/cupertino_button_size/showcase.py +++ b/sdk/python/examples/controls/types/cupertino_button_size/showcase.py @@ -26,7 +26,6 @@ def showcase_card(size: ft.CupertinoButtonSize) -> ft.Container: def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER page.appbar = ft.AppBar(title="CupertinoButtonSize Showcase") diff --git a/sdk/python/examples/controls/types/cupertino_date_picker_date_order/showcase.py b/sdk/python/examples/controls/types/cupertino_date_picker_date_order/showcase.py index 8dea1d8079..ce0f1c575d 100644 --- a/sdk/python/examples/controls/types/cupertino_date_picker_date_order/showcase.py +++ b/sdk/python/examples/controls/types/cupertino_date_picker_date_order/showcase.py @@ -4,7 +4,6 @@ def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER def showcase_card(date_order: ft.CupertinoDatePickerDateOrder) -> ft.Container: diff --git a/sdk/python/examples/controls/types/cupertino_date_picker_mode/showcase.py b/sdk/python/examples/controls/types/cupertino_date_picker_mode/showcase.py index e5af7a3c4b..abb3824722 100644 --- a/sdk/python/examples/controls/types/cupertino_date_picker_mode/showcase.py +++ b/sdk/python/examples/controls/types/cupertino_date_picker_mode/showcase.py @@ -4,7 +4,6 @@ def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER def showcase_card(mode: ft.CupertinoDatePickerMode) -> ft.Container: diff --git a/sdk/python/examples/controls/types/cupertino_timer_picker_mode/showcase.py b/sdk/python/examples/controls/types/cupertino_timer_picker_mode/showcase.py index 859d51bf88..70d9d71519 100644 --- a/sdk/python/examples/controls/types/cupertino_timer_picker_mode/showcase.py +++ b/sdk/python/examples/controls/types/cupertino_timer_picker_mode/showcase.py @@ -22,7 +22,6 @@ def showcase_card(mode: ft.CupertinoTimerPickerMode) -> ft.Container: def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER page.appbar = ft.AppBar(title="CupertinoTimerPickerMode Showcase") diff --git a/sdk/python/examples/controls/types/date_picker_entry_mode/showcase.py b/sdk/python/examples/controls/types/date_picker_entry_mode/showcase.py index 88b6c5f928..e29813d6c3 100644 --- a/sdk/python/examples/controls/types/date_picker_entry_mode/showcase.py +++ b/sdk/python/examples/controls/types/date_picker_entry_mode/showcase.py @@ -4,7 +4,6 @@ def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER today = datetime.datetime.now() diff --git a/sdk/python/examples/controls/types/date_picker_mode/showcase.py b/sdk/python/examples/controls/types/date_picker_mode/showcase.py index e6822d2cc9..108b1ac274 100644 --- a/sdk/python/examples/controls/types/date_picker_mode/showcase.py +++ b/sdk/python/examples/controls/types/date_picker_mode/showcase.py @@ -4,7 +4,6 @@ def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER today = datetime.datetime.now() diff --git a/sdk/python/examples/controls/types/dismiss_direction/showcase.py b/sdk/python/examples/controls/types/dismiss_direction/showcase.py index 840cc866af..8d31d62adb 100644 --- a/sdk/python/examples/controls/types/dismiss_direction/showcase.py +++ b/sdk/python/examples/controls/types/dismiss_direction/showcase.py @@ -70,7 +70,6 @@ def reset_item(_): def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER page.appbar = ft.AppBar(title="DismissDirection Showcase") diff --git a/sdk/python/examples/controls/types/filter_quality/showcase.py b/sdk/python/examples/controls/types/filter_quality/showcase.py index d8577e1549..126d7e9492 100644 --- a/sdk/python/examples/controls/types/filter_quality/showcase.py +++ b/sdk/python/examples/controls/types/filter_quality/showcase.py @@ -35,7 +35,6 @@ def showcase_card(quality: ft.FilterQuality) -> ft.Container: def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER page.appbar = ft.AppBar(title="FilterQuality Showcase") diff --git a/sdk/python/examples/controls/types/floating_action_button_location/showcase.py b/sdk/python/examples/controls/types/floating_action_button_location/showcase.py index a97d1325a2..9d3225e7dc 100644 --- a/sdk/python/examples/controls/types/floating_action_button_location/showcase.py +++ b/sdk/python/examples/controls/types/floating_action_button_location/showcase.py @@ -44,7 +44,6 @@ def showcase_card(location: ft.FloatingActionButtonLocation) -> ft.Container: def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER page.appbar = ft.AppBar(title="FloatingActionButtonLocation Showcase") diff --git a/sdk/python/examples/controls/types/font_weight/showcase.py b/sdk/python/examples/controls/types/font_weight/showcase.py index 38b9d6e25f..1163ca05ba 100644 --- a/sdk/python/examples/controls/types/font_weight/showcase.py +++ b/sdk/python/examples/controls/types/font_weight/showcase.py @@ -21,7 +21,6 @@ def showcase_card(weight: ft.FontWeight) -> ft.Container: def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER page.appbar = ft.AppBar(title="FontWeight Showcase") diff --git a/sdk/python/examples/controls/types/gradient_tile_mode/showcase.py b/sdk/python/examples/controls/types/gradient_tile_mode/showcase.py index 9d364c8383..ce980fe2a8 100644 --- a/sdk/python/examples/controls/types/gradient_tile_mode/showcase.py +++ b/sdk/python/examples/controls/types/gradient_tile_mode/showcase.py @@ -29,7 +29,6 @@ def showcase_card(mode: ft.GradientTileMode) -> ft.Container: def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER page.appbar = ft.AppBar(title="GradientTileMode Showcase") diff --git a/sdk/python/examples/controls/types/image_repeat/showcase.py b/sdk/python/examples/controls/types/image_repeat/showcase.py index 57293f92c2..caeba1548c 100644 --- a/sdk/python/examples/controls/types/image_repeat/showcase.py +++ b/sdk/python/examples/controls/types/image_repeat/showcase.py @@ -31,7 +31,6 @@ def showcase_card(repeat: ft.ImageRepeat) -> ft.Container: def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER page.appbar = ft.AppBar(title="ImageRepeat Showcase") diff --git a/sdk/python/examples/controls/types/label_position/showcase.py b/sdk/python/examples/controls/types/label_position/showcase.py index 9382159a76..1383f40b30 100644 --- a/sdk/python/examples/controls/types/label_position/showcase.py +++ b/sdk/python/examples/controls/types/label_position/showcase.py @@ -40,7 +40,6 @@ def showcase_card(label_position: ft.LabelPosition) -> ft.Container: def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER page.appbar = ft.AppBar(title="LabelPosition Showcase") diff --git a/sdk/python/examples/controls/types/launch_mode/showcase.py b/sdk/python/examples/controls/types/launch_mode/showcase.py index a5fac4ade6..d3e3942c29 100644 --- a/sdk/python/examples/controls/types/launch_mode/showcase.py +++ b/sdk/python/examples/controls/types/launch_mode/showcase.py @@ -2,7 +2,6 @@ def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER launcher = ft.UrlLauncher() diff --git a/sdk/python/examples/controls/types/list_tile_style/showcase.py b/sdk/python/examples/controls/types/list_tile_style/showcase.py index b218aad6e5..57d20e386e 100644 --- a/sdk/python/examples/controls/types/list_tile_style/showcase.py +++ b/sdk/python/examples/controls/types/list_tile_style/showcase.py @@ -30,7 +30,6 @@ def showcase_card(style: ft.ListTileStyle) -> ft.Container: def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER page.appbar = ft.AppBar(title="ListTileStyle Showcase") diff --git a/sdk/python/examples/controls/types/list_tile_title_alignment/showcase.py b/sdk/python/examples/controls/types/list_tile_title_alignment/showcase.py index d77338d483..a5c95c98fd 100644 --- a/sdk/python/examples/controls/types/list_tile_title_alignment/showcase.py +++ b/sdk/python/examples/controls/types/list_tile_title_alignment/showcase.py @@ -33,7 +33,6 @@ def showcase_card(alignment: ft.ListTileTitleAlignment) -> ft.Container: def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER page.appbar = ft.AppBar(title="ListTileTitleAlignment Showcase") diff --git a/sdk/python/examples/controls/types/main_axis_alignment/showcase.py b/sdk/python/examples/controls/types/main_axis_alignment/showcase.py index 117aa9c0da..3fb3faed23 100644 --- a/sdk/python/examples/controls/types/main_axis_alignment/showcase.py +++ b/sdk/python/examples/controls/types/main_axis_alignment/showcase.py @@ -42,7 +42,6 @@ def showcase_card(alignment: ft.MainAxisAlignment) -> ft.Container: def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER page.appbar = ft.AppBar(title="MainAxisAlignment Showcase") diff --git a/sdk/python/examples/controls/types/mouse_cursor/showcase.py b/sdk/python/examples/controls/types/mouse_cursor/showcase.py index 9482373dbd..1550036d46 100644 --- a/sdk/python/examples/controls/types/mouse_cursor/showcase.py +++ b/sdk/python/examples/controls/types/mouse_cursor/showcase.py @@ -24,7 +24,6 @@ def showcase_card(cursor: ft.MouseCursor) -> ft.GestureDetector: def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER page.appbar = ft.AppBar(title="MouseCursor Showcase") diff --git a/sdk/python/examples/controls/types/navigation_bar_label_behavior/showcase.py b/sdk/python/examples/controls/types/navigation_bar_label_behavior/showcase.py index 213c0e2f75..cbe4c5aa95 100644 --- a/sdk/python/examples/controls/types/navigation_bar_label_behavior/showcase.py +++ b/sdk/python/examples/controls/types/navigation_bar_label_behavior/showcase.py @@ -29,7 +29,6 @@ def showcase_card(behavior: ft.NavigationBarLabelBehavior) -> ft.Container: def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER page.appbar = ft.AppBar(title="NavigationBarLabelBehavior Showcase") diff --git a/sdk/python/examples/controls/types/navigation_rail_label_type/showcase.py b/sdk/python/examples/controls/types/navigation_rail_label_type/showcase.py index 41d9ee08f0..366bb316e5 100644 --- a/sdk/python/examples/controls/types/navigation_rail_label_type/showcase.py +++ b/sdk/python/examples/controls/types/navigation_rail_label_type/showcase.py @@ -32,7 +32,6 @@ def showcase_card(label_type: ft.NavigationRailLabelType) -> ft.Container: def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER page.appbar = ft.AppBar(title="NavigationRailLabelType Showcase") diff --git a/sdk/python/examples/controls/types/orientation/showcase.py b/sdk/python/examples/controls/types/orientation/showcase.py index d6528d4908..2b6e3b7c67 100644 --- a/sdk/python/examples/controls/types/orientation/showcase.py +++ b/sdk/python/examples/controls/types/orientation/showcase.py @@ -4,7 +4,6 @@ def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER def showcase_card(orientation: ft.Orientation) -> ft.Container: @@ -17,7 +16,7 @@ def showcase_card(orientation: ft.Orientation) -> ft.Container: return ft.Container( width=300, padding=12, - border=ft.Border.all(1, ft.Colors.ERROR), + border=ft.Border.all(1, ft.Colors.RED), border_radius=10, bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, content=ft.Column( diff --git a/sdk/python/examples/controls/types/overlay_visibility_mode/showcase.py b/sdk/python/examples/controls/types/overlay_visibility_mode/showcase.py index 6f7af9dc35..2652401f6e 100644 --- a/sdk/python/examples/controls/types/overlay_visibility_mode/showcase.py +++ b/sdk/python/examples/controls/types/overlay_visibility_mode/showcase.py @@ -33,7 +33,6 @@ def showcase_card(mode: ft.OverlayVisibilityMode) -> ft.Container: def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER page.appbar = ft.AppBar(title="OverlayVisibilityMode Showcase") diff --git a/sdk/python/examples/controls/types/painting_style/showcase.py b/sdk/python/examples/controls/types/painting_style/showcase.py index e6b277fb74..4cf44871fe 100644 --- a/sdk/python/examples/controls/types/painting_style/showcase.py +++ b/sdk/python/examples/controls/types/painting_style/showcase.py @@ -35,7 +35,6 @@ def showcase_card(style: ft.PaintingStyle) -> ft.Container: def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER page.appbar = ft.AppBar(title="PaintingStyle Showcase") diff --git a/sdk/python/examples/controls/types/point_mode/showcase.py b/sdk/python/examples/controls/types/point_mode/showcase.py index 365fbbdf54..912f36213e 100644 --- a/sdk/python/examples/controls/types/point_mode/showcase.py +++ b/sdk/python/examples/controls/types/point_mode/showcase.py @@ -42,7 +42,6 @@ def showcase_card(mode: cv.PointMode) -> ft.Container: def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER page.appbar = ft.AppBar(title="PointMode Showcase") diff --git a/sdk/python/examples/controls/types/popup_menu_position/showcase.py b/sdk/python/examples/controls/types/popup_menu_position/showcase.py index da545eebcd..ba875fab69 100644 --- a/sdk/python/examples/controls/types/popup_menu_position/showcase.py +++ b/sdk/python/examples/controls/types/popup_menu_position/showcase.py @@ -32,7 +32,6 @@ def showcase_card(position: ft.PopupMenuPosition) -> ft.Container: def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER page.appbar = ft.AppBar(title="PopupMenuPosition Showcase") diff --git a/sdk/python/examples/controls/types/scroll_direction/showcase.py b/sdk/python/examples/controls/types/scroll_direction/showcase.py index 9408c8db03..b41c0ac979 100644 --- a/sdk/python/examples/controls/types/scroll_direction/showcase.py +++ b/sdk/python/examples/controls/types/scroll_direction/showcase.py @@ -2,7 +2,6 @@ def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER counts = {direction: 0 for direction in ft.ScrollDirection} diff --git a/sdk/python/examples/controls/types/scroll_mode/showcase.py b/sdk/python/examples/controls/types/scroll_mode/showcase.py index 7c0b7f0073..1964e2f87b 100644 --- a/sdk/python/examples/controls/types/scroll_mode/showcase.py +++ b/sdk/python/examples/controls/types/scroll_mode/showcase.py @@ -31,7 +31,6 @@ def showcase_card(scroll_mode: ft.ScrollMode) -> ft.Container: def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER page.appbar = ft.AppBar(title="ScrollMode Showcase") diff --git a/sdk/python/examples/controls/types/scroll_type/showcase.py b/sdk/python/examples/controls/types/scroll_type/showcase.py index ab9d67636c..f08cdaf0be 100644 --- a/sdk/python/examples/controls/types/scroll_type/showcase.py +++ b/sdk/python/examples/controls/types/scroll_type/showcase.py @@ -2,7 +2,6 @@ def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER counts = {event_type: 0 for event_type in ft.ScrollType} diff --git a/sdk/python/examples/controls/types/slider_interaction/showcase.py b/sdk/python/examples/controls/types/slider_interaction/showcase.py index b17902ef7e..12481437a6 100644 --- a/sdk/python/examples/controls/types/slider_interaction/showcase.py +++ b/sdk/python/examples/controls/types/slider_interaction/showcase.py @@ -41,7 +41,6 @@ def on_change(e: ft.Event[ft.Slider]): def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER page.appbar = ft.AppBar(title="SliderInteraction Showcase") diff --git a/sdk/python/examples/controls/types/snack_bar_behavior/showcase.py b/sdk/python/examples/controls/types/snack_bar_behavior/showcase.py index 7edc40d383..a2c6e95bf9 100644 --- a/sdk/python/examples/controls/types/snack_bar_behavior/showcase.py +++ b/sdk/python/examples/controls/types/snack_bar_behavior/showcase.py @@ -2,7 +2,6 @@ def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER def open_snack(behavior: ft.SnackBarBehavior): diff --git a/sdk/python/examples/controls/types/stroke_cap/showcase.py b/sdk/python/examples/controls/types/stroke_cap/showcase.py index c76a55f2d4..16137049a9 100644 --- a/sdk/python/examples/controls/types/stroke_cap/showcase.py +++ b/sdk/python/examples/controls/types/stroke_cap/showcase.py @@ -50,7 +50,6 @@ def showcase_card(stroke_cap: ft.StrokeCap) -> ft.Container: def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER page.appbar = ft.AppBar(title="StrokeCap Showcase") diff --git a/sdk/python/examples/controls/types/stroke_join/showcase.py b/sdk/python/examples/controls/types/stroke_join/showcase.py index 21d7667b2f..99269e5b49 100644 --- a/sdk/python/examples/controls/types/stroke_join/showcase.py +++ b/sdk/python/examples/controls/types/stroke_join/showcase.py @@ -39,7 +39,6 @@ def showcase_card(stroke_join: ft.StrokeJoin) -> ft.Container: def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER page.appbar = ft.AppBar(title="StrokeJoin Showcase") diff --git a/sdk/python/examples/controls/types/tab_alignment/showcase.py b/sdk/python/examples/controls/types/tab_alignment/showcase.py index 595c4a1521..2fedb81458 100644 --- a/sdk/python/examples/controls/types/tab_alignment/showcase.py +++ b/sdk/python/examples/controls/types/tab_alignment/showcase.py @@ -49,7 +49,6 @@ def showcase_card(alignment: ft.TabAlignment) -> ft.Container: def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER page.appbar = ft.AppBar(title="TabAlignment Showcase") diff --git a/sdk/python/examples/controls/types/tab_bar_indicator_size/showcase.py b/sdk/python/examples/controls/types/tab_bar_indicator_size/showcase.py index 46e3a0b706..75fc094ff7 100644 --- a/sdk/python/examples/controls/types/tab_bar_indicator_size/showcase.py +++ b/sdk/python/examples/controls/types/tab_bar_indicator_size/showcase.py @@ -55,7 +55,6 @@ def showcase_card(indicator_size: ft.TabBarIndicatorSize) -> ft.Container: def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER page.appbar = ft.AppBar(title="TabBarIndicatorSize Showcase") diff --git a/sdk/python/examples/controls/types/tab_indicator_animation/showcase.py b/sdk/python/examples/controls/types/tab_indicator_animation/showcase.py index 01a15c1a5d..a81654df91 100644 --- a/sdk/python/examples/controls/types/tab_indicator_animation/showcase.py +++ b/sdk/python/examples/controls/types/tab_indicator_animation/showcase.py @@ -55,7 +55,6 @@ def showcase_card(animation: ft.TabIndicatorAnimation) -> ft.Container: def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER page.appbar = ft.AppBar(title="TabIndicatorAnimation Showcase") diff --git a/sdk/python/examples/controls/types/text_align/showcase.py b/sdk/python/examples/controls/types/text_align/showcase.py index f3716b0098..4ade0fc511 100644 --- a/sdk/python/examples/controls/types/text_align/showcase.py +++ b/sdk/python/examples/controls/types/text_align/showcase.py @@ -30,7 +30,6 @@ def showcase_card(text_align: ft.TextAlign) -> ft.Container: def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER page.appbar = ft.AppBar(title="TextAlign Showcase") diff --git a/sdk/python/examples/controls/types/text_capitalization/showcase.py b/sdk/python/examples/controls/types/text_capitalization/showcase.py index 2e34595f77..f3988cc0e1 100644 --- a/sdk/python/examples/controls/types/text_capitalization/showcase.py +++ b/sdk/python/examples/controls/types/text_capitalization/showcase.py @@ -26,7 +26,6 @@ def showcase_card(cap: ft.TextCapitalization) -> ft.Container: def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER page.appbar = ft.AppBar(title="TextCapitalization Showcase") diff --git a/sdk/python/examples/controls/types/text_decoration_style/showcase.py b/sdk/python/examples/controls/types/text_decoration_style/showcase.py index 901b94f2c1..c67aa2cb00 100644 --- a/sdk/python/examples/controls/types/text_decoration_style/showcase.py +++ b/sdk/python/examples/controls/types/text_decoration_style/showcase.py @@ -36,7 +36,6 @@ def showcase_card(style: ft.TextDecorationStyle) -> ft.Container: def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER page.appbar = ft.AppBar(title="TextDecorationStyle Showcase") diff --git a/sdk/python/examples/controls/types/text_overflow/showcase.py b/sdk/python/examples/controls/types/text_overflow/showcase.py index 2d2faa9028..55e2ecdee7 100644 --- a/sdk/python/examples/controls/types/text_overflow/showcase.py +++ b/sdk/python/examples/controls/types/text_overflow/showcase.py @@ -31,7 +31,6 @@ def showcase_card(overflow: ft.TextOverflow) -> ft.Container: def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER page.appbar = ft.AppBar(title="TextOverflow Showcase") diff --git a/sdk/python/examples/controls/types/tile_affinity/showcase.py b/sdk/python/examples/controls/types/tile_affinity/showcase.py index d61d84de66..90c0d5c351 100644 --- a/sdk/python/examples/controls/types/tile_affinity/showcase.py +++ b/sdk/python/examples/controls/types/tile_affinity/showcase.py @@ -30,7 +30,6 @@ def showcase_card(affinity: ft.TileAffinity) -> ft.Container: def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER page.appbar = ft.AppBar(title="TileAffinity Showcase") diff --git a/sdk/python/examples/controls/types/time_picker_entry_mode/showcase.py b/sdk/python/examples/controls/types/time_picker_entry_mode/showcase.py index e3c1fecd0b..7f13ac974b 100644 --- a/sdk/python/examples/controls/types/time_picker_entry_mode/showcase.py +++ b/sdk/python/examples/controls/types/time_picker_entry_mode/showcase.py @@ -4,7 +4,6 @@ def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER picker = ft.TimePicker(value=time(hour=19, minute=30)) diff --git a/sdk/python/examples/controls/types/time_picker_hour_format/showcase.py b/sdk/python/examples/controls/types/time_picker_hour_format/showcase.py index 99f9477c26..de4b77318d 100644 --- a/sdk/python/examples/controls/types/time_picker_hour_format/showcase.py +++ b/sdk/python/examples/controls/types/time_picker_hour_format/showcase.py @@ -4,7 +4,6 @@ def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER time_picker = ft.TimePicker( diff --git a/sdk/python/examples/controls/types/url_target/showcase.py b/sdk/python/examples/controls/types/url_target/showcase.py index 6a1300f9c9..979c826adb 100644 --- a/sdk/python/examples/controls/types/url_target/showcase.py +++ b/sdk/python/examples/controls/types/url_target/showcase.py @@ -2,7 +2,6 @@ def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER async def open_url(target: ft.UrlTarget): @@ -15,7 +14,7 @@ def showcase_card(target: ft.UrlTarget) -> ft.Container: return ft.Container( width=280, padding=12, - border=ft.Border.all(1, ft.Colors.ERROR), + border=ft.Border.all(1, ft.Colors.RED), border_radius=10, bgcolor=ft.Colors.SURFACE_CONTAINER_LOW, content=ft.Column( diff --git a/sdk/python/examples/controls/types/visual_density/showcase.py b/sdk/python/examples/controls/types/visual_density/showcase.py index 229c84977b..6f26af3a78 100644 --- a/sdk/python/examples/controls/types/visual_density/showcase.py +++ b/sdk/python/examples/controls/types/visual_density/showcase.py @@ -34,7 +34,6 @@ def density_card(visual_density: ft.VisualDensity) -> ft.Container: def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER page.appbar = ft.AppBar(title="VisualDensity Showcase") diff --git a/sdk/python/examples/controls/types/window_event_type/showcase.py b/sdk/python/examples/controls/types/window_event_type/showcase.py index eb3668b3e7..c6a4584a7b 100644 --- a/sdk/python/examples/controls/types/window_event_type/showcase.py +++ b/sdk/python/examples/controls/types/window_event_type/showcase.py @@ -2,7 +2,6 @@ def main(page: ft.Page): - page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER log = ft.Column(