From a15428269fed90c185ad07b98b975b078e8ad232 Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Mon, 30 Mar 2026 00:48:44 +0200 Subject: [PATCH 01/10] add error handling for unbounded width in ResponsiveRow --- client/pubspec.lock | 10 +++++----- packages/flet/lib/src/controls/responsive_row.dart | 8 ++++++++ .../flet/src/flet/controls/material/navigation_rail.py | 2 +- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/client/pubspec.lock b/client/pubspec.lock index fb025ef92e..a3ef746ff1 100644 --- a/client/pubspec.lock +++ b/client/pubspec.lock @@ -359,7 +359,7 @@ packages: path: "../packages/flet" relative: true source: path - version: "0.83.0" + version: "0.83.1" flet_ads: dependency: "direct main" description: @@ -911,10 +911,10 @@ packages: dependency: transitive description: name: matcher - sha256: "12956d0ad8390bbcc63ca2e1469c0619946ccb52809807067a7020d57e647aa6" + sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861 url: "https://pub.dev" source: hosted - version: "0.12.18" + version: "0.12.19" material_color_utilities: dependency: transitive description: @@ -1628,10 +1628,10 @@ packages: dependency: transitive description: name: test_api - sha256: "93167629bfc610f71560ab9312acdda4959de4df6fac7492c89ff0d3886f6636" + sha256: "8161c84903fd860b26bfdefb7963b3f0b68fee7adea0f59ef805ecca346f0c7a" url: "https://pub.dev" source: hosted - version: "0.7.9" + version: "0.7.10" torch_light: dependency: transitive description: diff --git a/packages/flet/lib/src/controls/responsive_row.dart b/packages/flet/lib/src/controls/responsive_row.dart index e4fd0f15cb..6eba012733 100644 --- a/packages/flet/lib/src/controls/responsive_row.dart +++ b/packages/flet/lib/src/controls/responsive_row.dart @@ -25,6 +25,14 @@ class ResponsiveRowControl extends StatelessWidget with FletStoreMixin { return withPageSize((context, view) { var result = LayoutBuilder( builder: (BuildContext context, BoxConstraints constraints) { + if (!constraints.hasBoundedWidth) { + return const ErrorControl( + "Error displaying ResponsiveRow: width is unbounded.", + description: + "Set a fixed width, a non-zero expand, or place it inside a control with bounded width.", + ); + } + // breakpoints final rawBreakpoints = control.get("breakpoints", view.breakpoints)!; diff --git a/sdk/python/packages/flet/src/flet/controls/material/navigation_rail.py b/sdk/python/packages/flet/src/flet/controls/material/navigation_rail.py index 7828ceaede..410ec3c80e 100644 --- a/sdk/python/packages/flet/src/flet/controls/material/navigation_rail.py +++ b/sdk/python/packages/flet/src/flet/controls/material/navigation_rail.py @@ -56,7 +56,7 @@ class NavigationRailDestination(Control): Represents a destination in a `NavigationRail`. """ - icon: Optional[IconDataOrControl] = None + icon: IconDataOrControl """ The [name of the icon](https://docs.flet.dev/types/icons) or `Control` of the \ destination. From 442e8c6e246247483c2ac1fcdbaa2beb8c827575 Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Mon, 30 Mar 2026 00:49:24 +0200 Subject: [PATCH 02/10] add test for unbounded width error in ResponsiveRow --- .../unbounded_width_shows_error.png | Bin 0 -> 20963 bytes .../controls/core/test_responsive_row.py | 27 +++++++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 sdk/python/packages/flet/integration_tests/controls/core/golden/macos/responsive_row/unbounded_width_shows_error.png diff --git a/sdk/python/packages/flet/integration_tests/controls/core/golden/macos/responsive_row/unbounded_width_shows_error.png b/sdk/python/packages/flet/integration_tests/controls/core/golden/macos/responsive_row/unbounded_width_shows_error.png new file mode 100644 index 0000000000000000000000000000000000000000..5f8fc7f3741d9e50fee31d88582a13666ecda2b1 GIT binary patch literal 20963 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 QX=ep%i(BUJOcAmF1vrLpO8@`> literal 0 HcmV?d00001 diff --git a/sdk/python/packages/flet/integration_tests/controls/core/test_responsive_row.py b/sdk/python/packages/flet/integration_tests/controls/core/test_responsive_row.py index c97c4b2cf3..462e824f4d 100644 --- a/sdk/python/packages/flet/integration_tests/controls/core/test_responsive_row.py +++ b/sdk/python/packages/flet/integration_tests/controls/core/test_responsive_row.py @@ -1,10 +1,17 @@ import pytest +import pytest_asyncio import flet as ft import flet.testing as ftt -@pytest.mark.asyncio(loop_scope="module") +# Create a new flet_app instance for each test method +@pytest_asyncio.fixture(scope="function", autouse=True) +def flet_app(flet_app_function): + return flet_app_function + + +@pytest.mark.asyncio(loop_scope="function") async def test_responsive_row_basic(flet_app: ftt.FletTestApp, request): await flet_app.assert_control_screenshot( request.node.name, @@ -16,3 +23,21 @@ async def test_responsive_row_basic(flet_app: ftt.FletTestApp, request): ], ), ) + + +@pytest.mark.asyncio(loop_scope="function") +async def test_unbounded_width_shows_error(flet_app: ftt.FletTestApp, request): + flet_app.page.theme_mode = ft.ThemeMode.LIGHT + await flet_app.assert_control_screenshot( + request.node.name, + ft.Row( + controls=[ + ft.ResponsiveRow( + controls=[ + ft.Text("Item 1"), + ft.TextField(label="Field 1"), + ] + ) + ] + ), + ) From 5291b2105e0dd2bd9da38f3e5e37a0952921ef51 Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Mon, 30 Mar 2026 01:08:39 +0200 Subject: [PATCH 03/10] add tests for unbounded height in various components --- .../macos/page_view/unbounded_height.png | Bin 0 -> 19959 bytes .../golden/macos/pagelet/unbounded_height.png | Bin 0 -> 20050 bytes ...th_shows_error.png => unbounded_width.png} | Bin .../controls/core/test_page_view.py | 35 +++++++++++++++++- .../controls/core/test_pagelet.py | 16 ++++++++ .../controls/core/test_responsive_row.py | 4 +- .../navigation_rail/unbounded_height.png | Bin 0 -> 22895 bytes .../tabs/unbounded_tabbarview_height.png | Bin 0 -> 24763 bytes .../controls/material/test_navigation_rail.py | 29 +++++++++++++++ .../controls/material/test_tabs.py | 32 ++++++++++++++++ 10 files changed, 113 insertions(+), 3 deletions(-) create mode 100644 sdk/python/packages/flet/integration_tests/controls/core/golden/macos/page_view/unbounded_height.png create mode 100644 sdk/python/packages/flet/integration_tests/controls/core/golden/macos/pagelet/unbounded_height.png rename sdk/python/packages/flet/integration_tests/controls/core/golden/macos/responsive_row/{unbounded_width_shows_error.png => unbounded_width.png} (100%) create mode 100644 sdk/python/packages/flet/integration_tests/controls/material/golden/macos/navigation_rail/unbounded_height.png create mode 100644 sdk/python/packages/flet/integration_tests/controls/material/golden/macos/tabs/unbounded_tabbarview_height.png diff --git a/sdk/python/packages/flet/integration_tests/controls/core/golden/macos/page_view/unbounded_height.png b/sdk/python/packages/flet/integration_tests/controls/core/golden/macos/page_view/unbounded_height.png new file mode 100644 index 0000000000000000000000000000000000000000..a592ce77b54c5a9199ad70a2b69901b3c75e2c25 GIT binary patch literal 19959 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%0D+ZW4b{0NnS$un`j2?xBs`-K+|L=1OFLQq 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 literal 0 HcmV?d00001 diff --git a/sdk/python/packages/flet/integration_tests/controls/core/golden/macos/pagelet/unbounded_height.png b/sdk/python/packages/flet/integration_tests/controls/core/golden/macos/pagelet/unbounded_height.png new file mode 100644 index 0000000000000000000000000000000000000000..124d2a6572796e6b5ff4b90c2b0bdb06dda95633 GIT binary patch literal 20050 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

_kr%=W(P&@8NwGHKU(R2wRe!-< zeWM*AB`REn*og%~*#-q!WKD1l{n<(&WYSRJ{JQ|b#WGQ?^L(CURDCLNowQ%$zBe<) z7cIaVEJ=IXSfu#8{U~|mj(+8Xq6qYQGux)IVYY3|rZ#l(U6>&0UY_WIi>`^QPXp)UO7KxgRS{dE-L3jpU)@I6 zXJr#5ec^}CSUZY!2WeuJxR?tdkP0cWubh{s(Tvmh6AOOl4LQuOLtGy??HAuUrtX(g z`8_qxDN5OKVwqE1%SP=KQ-**kOTts0b;hh)j>cp+Mv2!B0cxc<~&n zr=zoh8J^!97=s{@Z%vS776S4reE@&+)9weMc+C017Q2Iwb|%+Qp>3$dd;l2^JNzIw zM4_Mqt*5II19>-M6Sd!Co^nEu+0iw$gZF|B zx)>F3fywcu@OKIaEE?<7=VhA-Jp_2R6T5Yw0`6qbm< zsyFcdz)xa7OKbMSD!%ZoJsyXgm1hUF3cWTSxTzgI7yXQT!wgO#rstL5`SleL=W-Or zz2ns2ge=2w!mjq!rS%m_8bjIQY5Ke6T&olxezmwzvG9nB-Bt!Xul*#Mw%imVP@3%xv^M7qZ=KuSwieu`}5CK^8 zZ##M(>BeUVB&s9-*W*3QHCa_hK`gkrpZdR549##I?%*&YP1|KaUD^9W|Ldo5n#qz2 zI+qC0iU+Oh+3`~T*D6D_0W)2%lf$wK0}k|eC*}Ll-yQ`b$~c_#)H_XLwErD-svs41 kPf2k1cyxPC?DjAe6?Dk3#GwNPDkkG-sp&zhRqP`E13l?3LI3~& literal 0 HcmV?d00001 diff --git a/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/tabs/unbounded_tabbarview_height.png b/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/tabs/unbounded_tabbarview_height.png new file mode 100644 index 0000000000000000000000000000000000000000..1b69a0efda5bf29b40ffef206b1ffa2ab1c1b301 GIT binary patch literal 24763 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 XH5s2zy45Yf7@n58u3C|bW$^z2%l|>K literal 0 HcmV?d00001 diff --git a/sdk/python/packages/flet/integration_tests/controls/material/test_navigation_rail.py b/sdk/python/packages/flet/integration_tests/controls/material/test_navigation_rail.py index 49ea3d6252..4aa08c52ea 100644 --- a/sdk/python/packages/flet/integration_tests/controls/material/test_navigation_rail.py +++ b/sdk/python/packages/flet/integration_tests/controls/material/test_navigation_rail.py @@ -82,3 +82,32 @@ async def test_no_selected_icon(flet_app: ftt.FletTestApp, request): ), ), ) + + +@pytest.mark.asyncio(loop_scope="function") +async def test_unbounded_height(flet_app: ftt.FletTestApp, request): + flet_app.page.theme_mode = ft.ThemeMode.LIGHT + await flet_app.assert_control_screenshot( + request.node.name, + ft.Column( + controls=[ + ft.NavigationRail( + selected_index=0, + label_type=ft.NavigationRailLabelType.ALL, + min_width=100, + destinations=[ + ft.NavigationRailDestination( + icon=ft.Icons.FAVORITE_BORDER, + selected_icon=ft.Icons.FAVORITE, + label="First", + ), + ft.NavigationRailDestination( + icon=ft.Icons.SETTINGS_OUTLINED, + selected_icon=ft.Icon(ft.Icons.SETTINGS), + label=ft.Text("Settings"), + ), + ], + ) + ] + ), + ) diff --git a/sdk/python/packages/flet/integration_tests/controls/material/test_tabs.py b/sdk/python/packages/flet/integration_tests/controls/material/test_tabs.py index d8b8e011d6..c357d0446b 100644 --- a/sdk/python/packages/flet/integration_tests/controls/material/test_tabs.py +++ b/sdk/python/packages/flet/integration_tests/controls/material/test_tabs.py @@ -271,3 +271,35 @@ async def test_disabled_tabs(flet_app: ftt.FletTestApp): await flet_app.tester.pump_and_settle() assert tabs.selected_index == 1 assert clicked_indexes == [1] + + +@pytest.mark.asyncio(loop_scope="function") +async def test_unbounded_tabbarview_height(flet_app: ftt.FletTestApp, request): + flet_app.page.theme_mode = ft.ThemeMode.LIGHT + await flet_app.assert_control_screenshot( + name=request.node.name, + control=ft.Column( + controls=[ + ft.Tabs( + length=1, + content=ft.Column( + controls=[ + ft.TabBar( + tabs=[ + ft.Tab(label="Tab 1"), + ] + ), + ft.TabBarView( + controls=[ + ft.Container( + content=ft.Text("Tab 1 content"), + alignment=ft.Alignment.CENTER, + ) + ], + ), + ], + ), + ) + ] + ), + ) From 4839259cf5bf20f726a4e6429e7d7cdd65cb3b20 Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Mon, 30 Mar 2026 11:26:27 +0200 Subject: [PATCH 04/10] improve logging.md --- .../packages/flet/docs/cookbook/logging.md | 68 ++++++++++++++----- 1 file changed, 51 insertions(+), 17 deletions(-) diff --git a/sdk/python/packages/flet/docs/cookbook/logging.md b/sdk/python/packages/flet/docs/cookbook/logging.md index 76cd8d8d0e..9b9aeeb6c8 100644 --- a/sdk/python/packages/flet/docs/cookbook/logging.md +++ b/sdk/python/packages/flet/docs/cookbook/logging.md @@ -1,38 +1,72 @@ -This article explains how to control level of the logs messages generated by Flet library and its underlying components. -You may need to enable detailed logging to troubleshoot Flet library or when submitting a new Flet issue. +This article explains how to control the level of log messages generated by Flet +library and its underlying components. +You may need to enable detailed logging to troubleshoot Flet or when submitting +a new Flet issue. ## Python -Flet Python modules expose named loggers: `flet_core` and `flet`. +Flet Python uses the following named loggers: -To enable detailed/verbose Flet logging in your program add this code before calling `ft.run()`: +- `flet` - general framework and transport logging. +- `flet_object_patch` - detailed control tree diff/patch logging. +- `flet_components` - declarative component lifecycle logging. + +For normal use, configure logging before calling `ft.run()`: ```python import logging + +logging.basicConfig(level=logging.INFO) +``` + +This gives you the usual `flet` logs without too much noise. + +To see more detail from the main `flet` logger, either raise the root logging level: + +```python +import logging + logging.basicConfig(level=logging.DEBUG) ``` -This will enable loggers across all Flet modules (`flet_core` and `flet`). +or set the `flet` logger explicitly: -To reduce verbosity you may suppress logging messages from `flet_core` module, but adding: +```python +import logging + +logging.basicConfig(level=logging.INFO) +logging.getLogger("flet").setLevel(logging.DEBUG) +``` + +`flet_object_patch` and `flet_components` set their own level to `INFO`, so +they do not inherit the root `DEBUG` level unless you enable them explicitly. + +To enable the most verbose diagnostics, set the corresponding loggers to `DEBUG`: ```python -logging.getLogger("flet_core").setLevel(logging.INFO) +import logging + +logging.basicConfig(level=logging.DEBUG) +logging.getLogger("flet_object_patch").setLevel(logging.DEBUG) +logging.getLogger("flet_components").setLevel(logging.DEBUG) ``` -Debug logging is usually needed for troubleshooting purposes, when submitting a new Flet issue. +Use this level mostly for troubleshooting and issue reports. -In the most cases you should be fine with `INFO` logging level. +## Built-in Web Server -## Fletd server +When running a web app, Flet starts its built-in web transport on top of +FastAPI and Uvicorn. -You can control the logging of Fletd - built-in Flet web server. +The effective level of the `flet` Python logger is passed to the built-in web +server, so configure `flet` logging before starting the app: -When `flet` Python logger level is configured its value is implicitly passed to Fletd server and -you can see its log messages in the output. +```python +import logging -However, you can use `FLET_LOG_LEVEL` environment variable to override Fletd log level: -`debug`, `info`, `warning`, `debug`, `panic`, `fatal`. +logging.basicConfig(level=logging.INFO) +logging.getLogger("flet").setLevel(logging.DEBUG) +``` -Additionally, to redirect Flet logs output to a file you can set `FLET_LOG_TO_FILE` environment variable to `true`. -Flet logs will be saved to `/tmp/flet-server.log` on macOS and Linux and to `%TEMP%\flet-server.log` on Windows. +If you host a Flet ASGI app with your own server process, such as `uvicorn` or +`gunicorn`, configure that server's logging separately using its own options. From fa5cf52f28410551dc3fc467339f7c17d95a2feb Mon Sep 17 00:00:00 2001 From: TheEthicalBoy <98978078+ndonkoHenri@users.noreply.github.com> Date: Mon, 30 Mar 2026 13:07:40 +0200 Subject: [PATCH 05/10] revert `NavigationRailDestination.icon` type change Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../packages/flet/src/flet/controls/material/navigation_rail.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/python/packages/flet/src/flet/controls/material/navigation_rail.py b/sdk/python/packages/flet/src/flet/controls/material/navigation_rail.py index 410ec3c80e..7828ceaede 100644 --- a/sdk/python/packages/flet/src/flet/controls/material/navigation_rail.py +++ b/sdk/python/packages/flet/src/flet/controls/material/navigation_rail.py @@ -56,7 +56,7 @@ class NavigationRailDestination(Control): Represents a destination in a `NavigationRail`. """ - icon: IconDataOrControl + icon: Optional[IconDataOrControl] = None """ The [name of the icon](https://docs.flet.dev/types/icons) or `Control` of the \ destination. From 349d4781c1ca169c12d500d0a153c123dbb9ad28 Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Mon, 30 Mar 2026 15:11:35 +0200 Subject: [PATCH 06/10] fix #3805: treat ResponsiveRow child controls with `col=0` as hidden --- .../flet/lib/src/controls/responsive_row.dart | 23 ++++++++++++-- .../packages/flet/docs/publish/macos.md | 2 +- ..._col_controls_are_hidden_at_breakpoint.png | Bin 0 -> 2406 bytes .../controls/core/test_responsive_row.py | 30 ++++++++++++++++++ 4 files changed, 52 insertions(+), 3 deletions(-) create mode 100644 sdk/python/packages/flet/integration_tests/controls/core/golden/macos/responsive_row/zero_col_controls_are_hidden_at_breakpoint.png diff --git a/packages/flet/lib/src/controls/responsive_row.dart b/packages/flet/lib/src/controls/responsive_row.dart index 6eba012733..2c224c6e6b 100644 --- a/packages/flet/lib/src/controls/responsive_row.dart +++ b/packages/flet/lib/src/controls/responsive_row.dart @@ -33,7 +33,9 @@ class ResponsiveRowControl extends StatelessWidget with FletStoreMixin { ); } - // breakpoints + // Resolve the active breakpoint map once per layout pass. Responsive + // properties such as `columns`, `spacing`, and child `col` values are + // all interpreted against this map. final rawBreakpoints = control.get("breakpoints", view.breakpoints)!; final breakpoints = {}; @@ -53,13 +55,28 @@ class ResponsiveRowControl extends StatelessWidget with FletStoreMixin { for (var ctrl in control.children("controls")) { final col = ctrl.getResponsiveNumber("col", 12)!; var bpCol = getBreakpointNumber(col, view.size.width, breakpoints); + + // `col=0` means "do not occupy any columns" for the current + // breakpoint, so the child should not participate in layout. + if (bpCol <= 0) { + continue; + } + totalCols += bpCol; - // calculate child width + // Convert virtual columns into a fixed pixel width for this child. + // We first remove the total horizontal gaps from the available width, + // then divide the remaining width across the configured columns. var colWidth = (constraints.maxWidth - bpSpacing * (bpColumns - 1)) / bpColumns; var childWidth = colWidth * bpCol + bpSpacing * (bpCol - 1); + // Guard against tiny/invalid available widths so Flutter never sees + // negative box constraints. + if (childWidth < 0) { + childWidth = 0; + } + controls.add(ConstrainedBox( constraints: BoxConstraints(minWidth: childWidth, maxWidth: childWidth), @@ -70,6 +87,8 @@ class ResponsiveRowControl extends StatelessWidget with FletStoreMixin { var wrap = (totalCols > bpColumns); try { + // Keep a single row when everything fits; otherwise switch to Wrap so + // children can continue on the next line. return wrap ? Wrap( direction: Axis.horizontal, diff --git a/sdk/python/packages/flet/docs/publish/macos.md b/sdk/python/packages/flet/docs/publish/macos.md index 402c4ab58e..2d0211d8bc 100644 --- a/sdk/python/packages/flet/docs/publish/macos.md +++ b/sdk/python/packages/flet/docs/publish/macos.md @@ -228,7 +228,7 @@ Its value is determined in the following order of precedence: 3. Values injected by [cross-platform permission bundles](index.md#permissions), if any. 4. Defaults: - ```toml + ```toml [tool.flet.macos.entitlement] "com.apple.security.app-sandbox" = false "com.apple.security.cs.allow-jit" = true diff --git a/sdk/python/packages/flet/integration_tests/controls/core/golden/macos/responsive_row/zero_col_controls_are_hidden_at_breakpoint.png b/sdk/python/packages/flet/integration_tests/controls/core/golden/macos/responsive_row/zero_col_controls_are_hidden_at_breakpoint.png new file mode 100644 index 0000000000000000000000000000000000000000..4c7f5269945ee4cb829d66e71b3710cc5004c7fd GIT binary patch literal 2406 zcmai0dpwivAAUx}B4x=TRxyVN70b#Yv|(zPGzpD4=1@5-XN{6WawuNXG?8*#iM*P# zV&O$%TFNZmS`K0Ln&Z~H_5Sz!=Xd>a-_QMg@8|pZey;nuuKSzrVr;DUhlaPFo_Z(JoR##7p_63D=+qXIpE4I;c7W0Ma|qNGq3U^7o10 zOqT#P$t4cisK99DUa?OutR z%2bHrqb^EL>B0>am4`~?g>mc|t}*T05e)gjMI~oqW{_lZDd}i-nw&(7o&8^pqA!ep zsfq`&4%MAF^SZ509ener)tSAr8{Ar+)b1E17g4T2!Cz7pWkpFFh5=!XHSiX$+}aVr z(MrPQC>cG!Me9K>Ex`|#+P?cN(6M;g!J0M<5mlt_3J1Y27cyfn%4igM^F!m*N!hl( z4ROfK3dzB|vn@IIUX!XcYWFb14_xQa2uvm3WZK$L-?JbuONL&1A#h`lxrQiB_!)@P z$|EoiA)79?eOc>D^|e^LY}c-$5=D0cC_Vv}>I3luI(%LoYpH8cz~=U5i|C!2YMpjLY_)Lxr)VhWSjalmB+Sv6(WlC;PJWsVu}iC^jl!o1DC@!Gw;bBAB=NN zPVbsq_u63eMF^_Dy)Ab4t&RC23&}WUu7l^hvkncjal2$8i+S+PmnCe9rmWjU;2|2} z`TD0j-xE-;UiX$JLr@au%M?Y_@AP_FA~=k16g27YZt}-hO0jdtc0i%3TY=33_@02N zB;{!tU??DidEY?YQ}G9`@4~#tuCDQtA+B1s9A~LHD4#d4AIdD&Wp~g2oymzWGf#Hx z7KgW%yG?WyMN}#ec_b`UE&u%7wgt!Fo6?DpxOXwCZ%z+3tx(hUnkuFYPZJjio>3Ml z$=*}1_V0Z#o5mh~sOo^J8e4{(av$zP`H7BS)(y1$B7KHLJ20=RG#4th!41cY0c=I` ziN!^5g3-d8?W`t%b%I zRVd~4XRdv4C#z1qv0Loie6^W|RyyL{dof^j+-`6@pIy${@+heA!q@wW6lr$)Fj>K& zpdT7?TjH5Dj~(wuA5NEN>FOvs5zWjHS$y-bRS)a6(O+MVP_{bDY^$A!h=Yu!+ z(Va2VaV{sG%2gegWc1Mg7%U(k{`s>N2Fz7GaVsZ^b9N0Z3-bKEoEV3X(SA;f^yC*%Zs|ZD_*ecTdYIn4z=FTWokRCM(mqmh|2k}Un;=)>++l}9YzsT74(y_2WhSR^93 zjNCqd{tAAO5aH5OY_)gl4k@Z%dfIeT?hUj?cD+V0 z;`rK^Om?~A+j0YRmY%>@{shUdqs1z9RF)=FvJ`4L@%xp}=e!h|Y3n3o%P2{Q?Q~g8 zZhMwHW5hLFvxV^SHOl}7UhTwSL&9fVC*i=f)i?VaF0r*4)2{eg47+jGqDG9Q{jsd6N;$ed_R&l|BWxLJFBz;$6%lTH%|Gv; zJ8b7x+BB1~+bZ=G$_NH#?%++E+;aDLHIt{-yQ6IaT3JbOnBm&5Ub5YFVlm6~0S)$& z%BN^Cdk|{g8M6yO`#gsIz;4=UMuB8reAp~cW~@Qtw42%z;hLjr_KTZ)EK>J4imr-* z;+)Co)VX)Ci7kS%K+#P-qa~!!oezzS34o{t-viziCFNbRtl+iWyxf5;@f$(*R^0et zv-lpv&Y)_P-IGcaJKn0kxh?GP-J*Pq!2jBSG{I!Fmzn6z|8Eq$Ej2|Fe%$pxokrg; YVCa*^n9sh1d|{&mpivG;s Date: Mon, 30 Mar 2026 16:09:20 +0200 Subject: [PATCH 07/10] docs: clarify behavior of `col=0` in ResponsiveRow --- sdk/python/packages/flet/src/flet/controls/control.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/sdk/python/packages/flet/src/flet/controls/control.py b/sdk/python/packages/flet/src/flet/controls/control.py index 6c0cf39070..eac4b234c1 100644 --- a/sdk/python/packages/flet/src/flet/controls/control.py +++ b/sdk/python/packages/flet/src/flet/controls/control.py @@ -64,6 +64,9 @@ class Control(BaseControl): Can be a number or a dictionary configured to have a different value for specific breakpoints, for example `col={"sm": 6}`. + A value of `0` hides the control for that breakpoint, so it does not occupy any + columns in the parent [`ResponsiveRow`][flet.]. + This control spans the 12 virtual columns by default. /// details | Dimensions From 3a645befe564087ecd3794307163452048c5eb2f Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Wed, 1 Apr 2026 00:38:08 +0200 Subject: [PATCH 08/10] fix: add validation rules for ResponsiveRow columns to ensure positive values --- .codex/skills/flet-validation/SKILL.md | 2 ++ .../src/flet/controls/core/responsive_row.py | 17 ++++++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/.codex/skills/flet-validation/SKILL.md b/.codex/skills/flet-validation/SKILL.md index c8b26bfdf2..1ee4190174 100644 --- a/.codex/skills/flet-validation/SKILL.md +++ b/.codex/skills/flet-validation/SKILL.md @@ -141,6 +141,8 @@ When a property has validation, document it in that property’s docstring (goog `sdk/python/packages/flet/src/flet/utils/validation.py`. - Each `V.*` helper includes `Property docstring Raises wording`. - Keep property `Raises` entries as negations of the annotation rule. + - For strict inequalities, say `"strictly"`. + For example: `V.gt(x)` -> `ValueError: If it is not strictly greater than \`x\`.` - For sign-neutral divisibility helpers (`factor_of`, `multiple_of`), add explicit sign rules (`V.gt(0)` or `V.lt(0)`) when direction matters, and include separate `Raises` entries for those sign rules. diff --git a/sdk/python/packages/flet/src/flet/controls/core/responsive_row.py b/sdk/python/packages/flet/src/flet/controls/core/responsive_row.py index 5713b3065e..d2d7628e61 100644 --- a/sdk/python/packages/flet/src/flet/controls/core/responsive_row.py +++ b/sdk/python/packages/flet/src/flet/controls/core/responsive_row.py @@ -12,6 +12,7 @@ ResponsiveNumber, ResponsiveRowBreakpoint, ) +from flet.utils.validation import V, ValidationRules __all__ = ["ResponsiveNumber", "ResponsiveRow", "ResponsiveRowBreakpoint"] @@ -44,7 +45,6 @@ class ResponsiveRow(LayoutControl, AdaptiveControl): ], ) ``` - """ controls: list[Control] = field(default_factory=list) @@ -52,9 +52,24 @@ class ResponsiveRow(LayoutControl, AdaptiveControl): A list of Controls to display. """ + __validation_rules__: ValidationRules = ( + V.ensure( + lambda ctrl: ( + ctrl.columns > 0 + if isinstance(ctrl.columns, (int, float)) + else all(v > 0 for v in ctrl.columns.values()) + ), + message="columns must be greater than 0 for all breakpoints", + ), + ) + columns: ResponsiveNumber = 12 """ The number of virtual columns to layout children. + + Raises: + ValueError: If it is not strictly greater than `0`. + ValueError: If any breakpoint-specific value is not strictly greater than `0`. """ alignment: MainAxisAlignment = MainAxisAlignment.START From c5568ab7422449fd53d8d97b7ddb0e8984ecd2e3 Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Wed, 1 Apr 2026 14:08:46 +0200 Subject: [PATCH 09/10] fix #5209: clarify possible container expansion due to alignment being set --- .../flet/src/flet/controls/material/container.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/sdk/python/packages/flet/src/flet/controls/material/container.py b/sdk/python/packages/flet/src/flet/controls/material/container.py index b67ff5e2ba..4fd8c173bb 100644 --- a/sdk/python/packages/flet/src/flet/controls/material/container.py +++ b/sdk/python/packages/flet/src/flet/controls/material/container.py @@ -58,7 +58,15 @@ class Container(LayoutControl, AdaptiveControl): alignment: Optional[Alignment] = None """ - Defines the alignment of the [`content`][(c).] inside the container. + Defines the alignment of the [`content`][(c).] inside this container. + + Note: + If `alignment` is non-`None`, this container may expand to fill the + available space from its parent (before positioning its [`content`][(c).] + within itself according to the given `alignment`) instead of shrinking to its + [`content`][(c).]. If you need this container to keep a fixed size, give it + container an explicit `width` and/or `height` values, or constrain it via + its parent. """ bgcolor: Optional[ColorValue] = None From 6b8132fa698c43d95582f6a36ab53b7edc3a6cb8 Mon Sep 17 00:00:00 2001 From: Feodor Fitsner Date: Sun, 5 Apr 2026 15:33:14 -0700 Subject: [PATCH 10/10] Update changelogs with ResponsiveRow fixes Add entries to top-level and packages/flet CHANGELOGs documenting fixes: explicit error for unbounded width in ResponsiveRow, treating child controls with col=0 as hidden at the current breakpoint, and clarifying Container expansion behavior when alignment is set. References issues/PRs #1951, #3805, #5209, #6354 and author @ndonkoHenri. --- CHANGELOG.md | 1 + packages/flet/CHANGELOG.md | 2 ++ 2 files changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ef7c19a85d..33154db03f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ ### Bug fixes * Fix `flet build` and `flet publish` dependency parsing for `project.dependencies` and Poetry constraints with `<`/`<=`, and add coverage for normalized requirement handling ([#6332](https://github.com/flet-dev/flet/issues/6332), [#6340](https://github.com/flet-dev/flet/pull/6340)) by @td3447. +* Handle unbounded width in `ResponsiveRow` with an explicit error, treat child controls with `col=0` as hidden, and clarify `Container` expansion behavior when `alignment` is set ([#1951](https://github.com/flet-dev/flet/issues/1951), [#3805](https://github.com/flet-dev/flet/issues/3805), [#5209](https://github.com/flet-dev/flet/issues/5209), [#6354](https://github.com/flet-dev/flet/pull/6354)) by @ndonkoHenri. ### Other changes diff --git a/packages/flet/CHANGELOG.md b/packages/flet/CHANGELOG.md index 9e1c06f85c..66dc292520 100644 --- a/packages/flet/CHANGELOG.md +++ b/packages/flet/CHANGELOG.md @@ -6,6 +6,8 @@ ### Bug fixes +* Handle unbounded width in `ResponsiveRow` with an explicit error and treat child controls with `col=0` as hidden at the current breakpoint ([#1951](https://github.com/flet-dev/flet/issues/1951), [#3805](https://github.com/flet-dev/flet/issues/3805), [#6354](https://github.com/flet-dev/flet/pull/6354)) by @ndonkoHenri. + ### Other changes ## 0.84.0