Skip to content

⬆ bump flet from 0.85.3 to 0.86.4 - #477

Open
dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/pip/flet-0.86.4
Open

⬆ bump flet from 0.85.3 to 0.86.4#477
dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/pip/flet-0.86.4

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Aug 1, 2026

Copy link
Copy Markdown
Contributor

Bumps flet from 0.85.3 to 0.86.4.

Release notes

Sourced from flet's releases.

v0.86.4

Bug fixes

  • Fix services registered after an embedded FletApp is opened never becoming usable on the host page — calling one failed with Timeout waiting for invoke method listener for <Service>(id).<method>. ServiceRegistry subclasses Service, so it registered itself on construction; when an embedded app's page built its own registry while the host page was still the current context, the embedded registry was registered as a service inside the host's registry. The client has no binding for a control of type ServiceRegistry, so building it threw Unknown service inside the host's service loop and aborted it, leaving every service positioned after that entry unbound — permanently, since the entry stays in the list. A registry is the container for services, not a service, so it no longer self-registers; the client-side loop also isolates per-service failures now, so a single unbuildable entry can't stop the rest from binding. Reproduced with a host app embedding a FletApp and registering a Clipboard afterwards by @​FeodorFitsner.

Full Changelog: v0.86.3...v0.86.4

v0.86.3

Improvements

  • An embedded FletApp can now run over the in-process dart_bridge transport instead of a socket. Set url="dartbridge://" and the client allocates a native channel, delivers its port through the new FletApp.on_connect event, and the host serves that port with a FletDartBridgeServer — so a Flet program hosted inside another Flet app (a gallery, a preview) exchanges messages at memcpy speed with no socket file, no TCP port, and no AF_UNIX path-length limit (which broke embedded apps on the iOS simulator, where the container path overflows sun_path). High-throughput DataChannels used by embedded apps (RawImage, MatplotlibChart) get their own dedicated bridge too. The transport is opt-in and falls back to the existing URL-scheme channels: on web and desktop dev builds, where dart_bridge is unavailable, hosts keep using a socket URL by @​FeodorFitsner.

  • flet run can now pass custom arguments to your app script: everything after a -- separator is forwarded to the script instead of being parsed by Flet, and arrives there as sys.argv[1:] - e.g. flet run --web main.py -- --dataset big.csv --verbose. Previously there was no way to do this: the app was always launched as python -u <script> with no extra arguments, so a flag meant for the app was consumed by the CLI's own parser and rejected with flet: error: unrecognized arguments: --verbose. The arguments are re-applied on every hot reload and work in all run modes (desktop, --web, --ios, --android, and -m module invocations). Arguments that don't look like options can be passed without the separator (flet run main.py big.csv), and mistyped Flet options are still reported as errors - now with a hint to use -- when they were meant for the app. See Passing arguments to your app by @​FeodorFitsner.

Bug fixes

  • Fix iOS apps built with flet build ipa crashing at startup with Failed to lookup symbol 'serious_python_run': dlsym(RTLD_DEFAULT, serious_python_run): symbol not found. serious_python shipped dart_bridge — which provides the in-process Dart↔Python transport — as a static library linked into the app executable. An iOS executable exports nothing to the dynamic symbol table by default and the release build strips local symbols, so the dlsym lookups that Dart (DynamicLibrary.process()) and Python (import dart_bridge) perform at runtime could not resolve. Only release/archive (device) builds under the Swift Package Manager path were affected — debug and simulator builds don't dead-strip, so the failure did not reproduce there, and Android was never affected (its dart_bridge is a dynamic .so, which exports its symbols). Bumps serious_python to 4.4.0, which ships dart_bridge as a dynamic framework — embedded and signed into the app like Python.xcframework, with its symbols exported — and re-pins the bundled python-build snapshot to 20260726 (dart_bridge 1.5.1 → 1.6.1, Pyodide 3.14 314.0.2 → 314.0.3); the bundled Python versions (3.12.13 / 3.13.14 / 3.14.6) are unchanged by @​FeodorFitsner.

  • Fix MatplotlibChart freezing permanently when its platform view is disposed with a frame in flight — the common trigger is switching to another tab inside the app, which races the frame stream: DataChannel.send on a disposed channel silently drops, so the frame's [0xFF] frame-applied ack never arrives and _send_and_wait's unbounded await parks MatplotlibChart._receive_loop — the sole consumer of the frame queue — for the rest of the session, with no exception raised; remounting opens a fresh channel but the stale ack futures were never resolved, so the chart stayed frozen. _capture_channel now resolves all pending ack futures when a new channel is captured (a fresh channel means every pending ack belongs to the disposed one), unparking the producer instantly on remount, and the ack await is bounded by FRAME_ACK_TIMEOUT (5s; a healthy ack lands in milliseconds) — on expiry the frame is dropped and its future removed from the ack FIFO so subsequent acks keep resolving the right entries (#6709, #6710) by @​ForsakenDurian.

  • Fix a system/edge-swipe back gesture exiting the whole host app instead of navigating back when it lands on an embedded FletApp (an app rendered inside another Flet app — e.g. a gallery host running example apps in-process). The embedded app's WidgetsApp (MaterialApp/CupertinoApp) ran the default NavigationNotification handler, which reported SystemNavigator.setFrameworkHandlesBack(false) for a nested app that couldn't pop (typically a single-view example) and swallowed the notification, so the OS finished the whole activity on back and the host never got to report that it could pop. An embedded page now lets that notification bubble to the host (which re-reports canHandlePop) and chains a ChildBackButtonDispatcher to the host Router, so a system back propagates to the host and pops the view that embeds it by @​FeodorFitsner.

  • Fix page.window.maximized = True intermittently reverting to unmaximized right after startup on macOS, when set in the same patch as page.title (e.g. page.title = "My App"; page.window.maximized = True in main()) by @​davidlawson.

  • Fix flet build picking a non-decodable icon/splash image when several files share a base name, producing a machine-dependent NoDecoderForImageFormatException from flutter_launcher_icons. When an app's assets held, say, both icon.png and icon.svg, find_platform_image selected the first match from glob.glob(...) — whose order is filesystem-dependent — so the same app could pick icon.png on one machine and icon.svg on another (SVG is vector and can't be decoded by the raster icon/splash generators), turning a working build into a crash purely based on directory listing order. Candidates are now filtered to formats the generators can actually decode (.svg is dropped everywhere; .icns stays macOS-only and .ico Windows-only) and ranked so a raster image (.png first) always wins, making the choice deterministic across machines. When the only supplied image is an SVG (no raster sibling), it's skipped with a build-log warning and the default Flet icon is used instead of crashing by @​FeodorFitsner.

  • Fix modal controls (AlertDialog, CupertinoAlertDialog, BottomSheet, CupertinoBottomSheet) crashing to a black screen with "setState()/markNeedsBuild() called during build" when they close in the same frame that another route or overlay opens — e.g. dismissing a bottom sheet and showing a SnackBar from one handler. The close path popped the route synchronously during build, so the exit animation notified a listener that was mid-build. Each modal now tracks its own ModalRoute and closes it in a post-frame callback, popping that route (never the topmost one); View's confirm-pop pops its own route too, so a modal dismissed in the same tick as a view pop can no longer dismiss the wrong one by @​FeodorFitsner.

Full Changelog: v0.86.2...v0.86.3

v0.86.2

Bug fixes

  • Fix code edits not taking effect under flet debug android: after re-running the command, the app kept executing the previously-unpacked, stale code instead of your changes. flet debug rebuilds and reinstalls the same-version APK on each iteration (flutter run does an update install that preserves app data), and serious_python's on-device extraction cache — keyed only on versionName+versionCode — never saw the version change, so it skipped re-unpacking the new app.zip. Bumps serious_python to 4.3.4, which folds the APK's lastUpdateTime into that cache key so every (re)install re-extracts the current code while ordinary relaunches still hit the cache. flet build apk was never affected (#6682) by @​FeodorFitsner.
  • Fix an embedded FletApp (an app rendered inside another Flet app — e.g. a preview or gallery host that runs example apps in-process) not refreshing its UI in response to events. Auto-update mode was tracked as components_mode on a single process-global context singleton, so a host app that rendered via page.render/page.render_views turned components mode on process-wide and context.auto_update_enabled() then returned False for the embedded app too — any handler that mutated a control without calling .update() (the common imperative style, including all page.services sensor readings) silently never re-rendered. Event dispatch also ran in a fresh task whose page context var could carry a different session's page, so context-derived state resolved against the wrong session. components_mode is now stored per-Session, and Session.dispatch_event binds the page context to its own session before invoking handlers, so multiple Flet apps sharing one process keep independent update behavior by @​FeodorFitsner.
  • Modernize examples for 0.86: replace the removed TextField.error_text with error (chat tutorial, mind_queue, palette_editor), and declare the device permissions each sensor example needs to run on-device — NSMotionUsageDescription on iOS for the motion/barometer sensors and android.permission.VIBRATE for HapticFeedback by @​FeodorFitsner.
  • Fix opening a flet run --ios / --android app URL in a desktop browser: the page loaded but stayed on the boot screen, endlessly retrying a WebSocket connection to ws://<host>:<port>/ws. Mobile-mode apps are mounted under a non-root path (e.g. /counter/main.py), so the real WebSocket route lives at /counter/main.py/ws - but since 1.0 Alpha the FastAPI wrapper always passed the bare default ws endpoint name into FletStaticFiles, bypassing its mount-path-aware fallback, and index.html got patched with flet.webSocketEndpoint="ws", which the web client resolves against the server root. The native iOS/Android client derives the path from the page URL and was unaffected. A relative WebSocket endpoint is now resolved against the app mount path when patching index.html, fixing browser access to any Flet web app mounted under a non-root path (--ios/--android, flet run --name, or a flet_web.fastapi app mounted at a sub-path) by @​FeodorFitsner.
  • Fix web RawImage and MatplotlibChart animations flooding the console with uncatchable engine exceptions (and breaking the animation) after the browser tab was backgrounded for a while and then refocused. On Flet web the frame producer runs in a Pyodide worker (or on a remote server over a WebSocket) that the browser never throttles, while the client's Flutter frame pipeline is suspended whenever the tab is hidden - so setState schedules frames that never paint and the post-frame callbacks that dispose replaced ui.Images never fire. Decoded images and pending disposals then pile up unbounded in the Dart heap and flush into the engine all at once on resume, one exception per queued frame. This is a client-side accumulation independent of transport, so it also affected native windows minimized with an animation running. Fixed in two layers: (1) a shared FrameStreamVisibility client-side mixin - used by both RawImage and flet-charts' MatplotlibChartCanvas - stops decoding/uploading and frees replaced images immediately while hidden (keeping only cheap offscreen state up to date, so incremental matplotlib diffs stay correct), then presents just the latest frame on resume; (2) a new page.wait_until_visible() gate (driven by on_app_lifecycle_state_change, alongside a page.app_visible property) that the streaming controls await internally, so producer loops park while hidden instead of rendering frames a suspended client can only discard (#6691) by @​FeodorFitsner.
  • Fix flet build / flet publish flooding non-interactive logs (CI, cloud build, any piped stdout) with thousands of progress-spinner frames, and fix the --no-rich-output flag not actually producing plain output. The CLI's rich Console was created with force_terminal=True whenever the FLET_CLI_NO_RICH_OUTPUT env var was unset, which forces the Live status spinner to repaint even when stdout isn't a TTY — so in a pipe every animation frame lands on its own line (e.g. hundreds of ( ● ) Initializing web build... lines). And the --no-rich-output CLI flag never reached that console at all: it's parsed per-command, after the module-level console is already built, so it only suppressed emojis while color and the spinner kept going. Now the console auto-detects the terminal (force_terminal=None) — interactive terminals keep the animated spinner while piped output stays quiet — and both FLET_CLI_NO_RICH_OUTPUT and --no-rich-output (detected from sys.argv at import) force fully plain output by @​FeodorFitsner.

Improvements

  • Flutter updated to 3.44.7.
  • Fix flet_video.Video resetting its volume (and pitch, playback_rate, shuffle_playlist, playlist_mode, subtitle_track) to the player's defaults after toggling visible off then on — e.g. volume jumped back to 100. Hiding a Video disposes its native media_kit player and showing it recreates a fresh one at default settings; the "last-applied" tracking now lives with the player (not the persistent control model) and is reset on recreation, so build() re-applies every setting to the new player (#6683, #6694) by @​ndonkoHenri.
  • Fix SearchBar.on_tap_outside_bar not firing when the user tapped outside the open search view. That case now has a dedicated SearchBar.on_tap_outside_view event (fired when tapping outside the open view, e.g. to dismiss it), and on_tap_outside_bar is documented to match what it actually does: fire while the bar is focused and the view is closed, like TextField.on_tap_outside (#6593, #6697) by @​ndonkoHenri.
  • Add a --android-legacy-packaging flag (and [tool.flet.android].legacy_packaging setting) to flet build apk/aab for opting into legacy Android native-library packaging. By default (modern packaging), native .so files are stored uncompressed and page-aligned in the APK and memory-mapped directly at runtime, which typically gives a smaller install and Play Store download but a larger raw .apk file. Enabling this option sets useLegacyPackaging = true so the .so are compressed inside the APK and extracted to disk on install: the raw .apk file is smaller (handy when side-loading), at the cost of a larger on-device install and slower native-library loading. The extraction directory is exposed to Python as ANDROID_NATIVE_LIBRARY_DIR, which can help custom native-library consumers that require a real filesystem path. See Native library packaging by @​FeodorFitsner.

Full Changelog: v0.86.1...v0.86.2

... (truncated)

Changelog

Sourced from flet's changelog.

0.86.4

Bug fixes

  • Fix services registered after an embedded FletApp is opened never becoming usable on the host page — calling one failed with Timeout waiting for invoke method listener for <Service>(id).<method>. ServiceRegistry subclasses Service, so it registered itself on construction; when an embedded app's page built its own registry while the host page was still the current context, the embedded registry was registered as a service inside the host's registry. The client has no binding for a control of type ServiceRegistry, so building it threw Unknown service inside the host's service loop and aborted it, leaving every service positioned after that entry unbound — permanently, since the entry stays in the list. A registry is the container for services, not a service, so it no longer self-registers; the client-side loop also isolates per-service failures now, so a single unbuildable entry can't stop the rest from binding. Reproduced with a host app embedding a FletApp and registering a Clipboard afterwards by @​FeodorFitsner.

0.86.3

Improvements

  • An embedded FletApp can now run over the in-process dart_bridge transport instead of a socket. Set url="dartbridge://" and the client allocates a native channel, delivers its port through the new FletApp.on_connect event, and the host serves that port with a FletDartBridgeServer — so a Flet program hosted inside another Flet app (a gallery, a preview) exchanges messages at memcpy speed with no socket file, no TCP port, and no AF_UNIX path-length limit (which broke embedded apps on the iOS simulator, where the container path overflows sun_path). High-throughput DataChannels used by embedded apps (RawImage, MatplotlibChart) get their own dedicated bridge too. The transport is opt-in and falls back to the existing URL-scheme channels: on web and desktop dev builds, where dart_bridge is unavailable, hosts keep using a socket URL by @​FeodorFitsner.

  • flet run can now pass custom arguments to your app script: everything after a -- separator is forwarded to the script instead of being parsed by Flet, and arrives there as sys.argv[1:] - e.g. flet run --web main.py -- --dataset big.csv --verbose. Previously there was no way to do this: the app was always launched as python -u <script> with no extra arguments, so a flag meant for the app was consumed by the CLI's own parser and rejected with flet: error: unrecognized arguments: --verbose. The arguments are re-applied on every hot reload and work in all run modes (desktop, --web, --ios, --android, and -m module invocations). Arguments that don't look like options can be passed without the separator (flet run main.py big.csv), and mistyped Flet options are still reported as errors - now with a hint to use -- when they were meant for the app. See Passing arguments to your app by @​FeodorFitsner.

Bug fixes

  • Fix iOS apps built with flet build ipa crashing at startup with Failed to lookup symbol 'serious_python_run': dlsym(RTLD_DEFAULT, serious_python_run): symbol not found. serious_python shipped dart_bridge — which provides the in-process Dart↔Python transport — as a static library linked into the app executable. An iOS executable exports nothing to the dynamic symbol table by default and the release build strips local symbols, so the dlsym lookups that Dart (DynamicLibrary.process()) and Python (import dart_bridge) perform at runtime could not resolve. Only release/archive (device) builds under the Swift Package Manager path were affected — debug and simulator builds don't dead-strip, so the failure did not reproduce there, and Android was never affected (its dart_bridge is a dynamic .so, which exports its symbols). Bumps serious_python to 4.4.0, which ships dart_bridge as a dynamic framework — embedded and signed into the app like Python.xcframework, with its symbols exported — and re-pins the bundled python-build snapshot to 20260727 (dart_bridge 1.5.1 → 1.6.1, Pyodide 3.14 314.0.2 → 314.0.3); the bundled Python versions (3.12.13 / 3.13.14 / 3.14.6) are unchanged by @​FeodorFitsner.

  • Fix MatplotlibChart freezing permanently when its platform view is disposed with a frame in flight — the common trigger is switching to another tab inside the app, which races the frame stream: DataChannel.send on a disposed channel silently drops, so the frame's [0xFF] frame-applied ack never arrives and _send_and_wait's unbounded await parks MatplotlibChart._receive_loop — the sole consumer of the frame queue — for the rest of the session, with no exception raised; remounting opens a fresh channel but the stale ack futures were never resolved, so the chart stayed frozen. _capture_channel now resolves all pending ack futures when a new channel is captured (a fresh channel means every pending ack belongs to the disposed one), unparking the producer instantly on remount, and the ack await is bounded by FRAME_ACK_TIMEOUT (5s; a healthy ack lands in milliseconds) — on expiry the frame is dropped and its future removed from the ack FIFO so subsequent acks keep resolving the right entries (#6709, #6710) by @​ForsakenDurian.

  • Fix a system/edge-swipe back gesture exiting the whole host app instead of navigating back when it lands on an embedded FletApp (an app rendered inside another Flet app — e.g. a gallery host running example apps in-process). The embedded app's WidgetsApp (MaterialApp/CupertinoApp) ran the default NavigationNotification handler, which reported SystemNavigator.setFrameworkHandlesBack(false) for a nested app that couldn't pop (typically a single-view example) and swallowed the notification, so the OS finished the whole activity on back and the host never got to report that it could pop. An embedded page now lets that notification bubble to the host (which re-reports canHandlePop) and chains a ChildBackButtonDispatcher to the host Router, so a system back propagates to the host and pops the view that embeds it by @​FeodorFitsner.

  • Fix page.window.maximized = True intermittently reverting to unmaximized right after startup on macOS, when set in the same patch as page.title (e.g. page.title = "My App"; page.window.maximized = True in main()) by @​davidlawson.

  • Fix flet build picking a non-decodable icon/splash image when several files share a base name, producing a machine-dependent NoDecoderForImageFormatException from flutter_launcher_icons. When an app's assets held, say, both icon.png and icon.svg, find_platform_image selected the first match from glob.glob(...) — whose order is filesystem-dependent — so the same app could pick icon.png on one machine and icon.svg on another (SVG is vector and can't be decoded by the raster icon/splash generators), turning a working build into a crash purely based on directory listing order. Candidates are now filtered to formats the generators can actually decode (.svg is dropped everywhere; .icns stays macOS-only and .ico Windows-only) and ranked so a raster image (.png first) always wins, making the choice deterministic across machines. When the only supplied image is an SVG (no raster sibling), it's skipped with a build-log warning and the default Flet icon is used instead of crashing by @​FeodorFitsner.

  • Fix modal controls (AlertDialog, CupertinoAlertDialog, BottomSheet, CupertinoBottomSheet) crashing to a black screen with "setState()/markNeedsBuild() called during build" when they close in the same frame that another route or overlay opens — e.g. dismissing a bottom sheet and showing a SnackBar from one handler. The close path popped the route synchronously during build, so the exit animation notified a listener that was mid-build. Each modal now tracks its own ModalRoute and closes it in a post-frame callback, popping that route (never the topmost one); View's confirm-pop pops its own route too, so a modal dismissed in the same tick as a view pop can no longer dismiss the wrong one by @​FeodorFitsner.

0.86.2

Bug fixes

  • Fix code edits not taking effect under flet debug android: after re-running the command, the app kept executing the previously-unpacked, stale code instead of your changes. flet debug rebuilds and reinstalls the same-version APK on each iteration (flutter run does an update install that preserves app data), and serious_python's on-device extraction cache — keyed only on versionName+versionCode — never saw the version change, so it skipped re-unpacking the new app.zip. Bumps serious_python to 4.3.4, which folds the APK's lastUpdateTime into that cache key so every (re)install re-extracts the current code while ordinary relaunches still hit the cache. flet build apk was never affected (#6682) by @​FeodorFitsner.
  • Fix an embedded FletApp (an app rendered inside another Flet app — e.g. a preview or gallery host that runs example apps in-process) not refreshing its UI in response to events. Auto-update mode was tracked as components_mode on a single process-global context singleton, so a host app that rendered via page.render/page.render_views turned components mode on process-wide and context.auto_update_enabled() then returned False for the embedded app too — any handler that mutated a control without calling .update() (the common imperative style, including all page.services sensor readings) silently never re-rendered. Event dispatch also ran in a fresh task whose page context var could carry a different session's page, so context-derived state resolved against the wrong session. components_mode is now stored per-Session, and Session.dispatch_event binds the page context to its own session before invoking handlers, so multiple Flet apps sharing one process keep independent update behavior by @​FeodorFitsner.
  • Modernize examples for 0.86: replace the removed TextField.error_text with error (chat tutorial, mind_queue, palette_editor), and declare the device permissions each sensor example needs to run on-device — NSMotionUsageDescription on iOS for the motion/barometer sensors and android.permission.VIBRATE for HapticFeedback by @​FeodorFitsner.
  • Fix opening a flet run --ios / --android app URL in a desktop browser: the page loaded but stayed on the boot screen, endlessly retrying a WebSocket connection to ws://<host>:<port>/ws. Mobile-mode apps are mounted under a non-root path (e.g. /counter/main.py), so the real WebSocket route lives at /counter/main.py/ws - but since 1.0 Alpha the FastAPI wrapper always passed the bare default ws endpoint name into FletStaticFiles, bypassing its mount-path-aware fallback, and index.html got patched with flet.webSocketEndpoint="ws", which the web client resolves against the server root. The native iOS/Android client derives the path from the page URL and was unaffected. A relative WebSocket endpoint is now resolved against the app mount path when patching index.html, fixing browser access to any Flet web app mounted under a non-root path (--ios/--android, flet run --name, or a flet_web.fastapi app mounted at a sub-path) by @​FeodorFitsner.
  • Fix web RawImage and MatplotlibChart animations flooding the console with uncatchable engine exceptions (and breaking the animation) after the browser tab was backgrounded for a while and then refocused. On Flet web the frame producer runs in a Pyodide worker (or on a remote server over a WebSocket) that the browser never throttles, while the client's Flutter frame pipeline is suspended whenever the tab is hidden - so setState schedules frames that never paint and the post-frame callbacks that dispose replaced ui.Images never fire. Decoded images and pending disposals then pile up unbounded in the Dart heap and flush into the engine all at once on resume, one exception per queued frame. This is a client-side accumulation independent of transport, so it also affected native windows minimized with an animation running. Fixed in two layers: (1) a shared FrameStreamVisibility client-side mixin - used by both RawImage and flet-charts' MatplotlibChartCanvas - stops decoding/uploading and frees replaced images immediately while hidden (keeping only cheap offscreen state up to date, so incremental matplotlib diffs stay correct), then presents just the latest frame on resume; (2) a new page.wait_until_visible() gate (driven by on_app_lifecycle_state_change, alongside a page.app_visible property) that the streaming controls await internally, so producer loops park while hidden instead of rendering frames a suspended client can only discard (#6691) by @​FeodorFitsner.
  • Fix flet build / flet publish flooding non-interactive logs (CI, cloud build, any piped stdout) with thousands of progress-spinner frames, and fix the --no-rich-output flag not actually producing plain output. The CLI's rich Console was created with force_terminal=True whenever the FLET_CLI_NO_RICH_OUTPUT env var was unset, which forces the Live status spinner to repaint even when stdout isn't a TTY — so in a pipe every animation frame lands on its own line (e.g. hundreds of ( ● ) Initializing web build... lines). And the --no-rich-output CLI flag never reached that console at all: it's parsed per-command, after the module-level console is already built, so it only suppressed emojis while color and the spinner kept going. Now the console auto-detects the terminal (force_terminal=None) — interactive terminals keep the animated spinner while piped output stays quiet — and both FLET_CLI_NO_RICH_OUTPUT and --no-rich-output (detected from sys.argv at import) force fully plain output by @​FeodorFitsner.

Improvements

  • Flutter updated to 3.44.7.
  • Fix flet_video.Video resetting its volume (and pitch, playback_rate, shuffle_playlist, playlist_mode, subtitle_track) to the player's defaults after toggling visible off then on — e.g. volume jumped back to 100. Hiding a Video disposes its native media_kit player and showing it recreates a fresh one at default settings; the "last-applied" tracking now lives with the player (not the persistent control model) and is reset on recreation, so build() re-applies every setting to the new player (#6683, #6694) by @​ndonkoHenri.
  • Fix SearchBar.on_tap_outside_bar not firing when the user tapped outside the open search view. That case now has a dedicated SearchBar.on_tap_outside_view event (fired when tapping outside the open view, e.g. to dismiss it), and on_tap_outside_bar is documented to match what it actually does: fire while the bar is focused and the view is closed, like TextField.on_tap_outside (#6593, #6697) by @​ndonkoHenri.
  • Add a --android-legacy-packaging flag (and [tool.flet.android].legacy_packaging setting) to flet build apk/aab for opting into legacy Android native-library packaging. By default (modern packaging), native .so files are stored uncompressed and page-aligned in the APK and memory-mapped directly at runtime, which typically gives a smaller install and Play Store download but a larger raw .apk file. Enabling this option sets useLegacyPackaging = true so the .so are compressed inside the APK and extracted to disk on install: the raw .apk file is smaller (handy when side-loading), at the cost of a larger on-device install and slower native-library loading. The extraction directory is exposed to Python as ANDROID_NATIVE_LIBRARY_DIR, which can help custom native-library consumers that require a real filesystem path. See Native library packaging by @​FeodorFitsner.

0.86.1

Improvements

  • flet-mcp's get_api tool now covers top-level callables — the app entry point (run), reactive hooks (use_state, use_ref, use_effect, …), and decorators (component, memo, observable) — which previously returned not found because only classes were indexed. A new functions bucket in the API builder extracts each package's re-exported public callables and renders them with a signature: line. get_api also resolves enum member lookups inline: get_api("Colors", query="RED") now returns the matching members instead of erroring with a redirect to search_enum_members. Both changes remove wasted agent round-trips observed in production usage by @​FeodorFitsner.

Bug fixes

... (truncated)

Commits
  • 06b395c Fix services registered after an embedded FletApp never binding (0.86.4) (#6728)
  • fa2ed21 Pass the app's bundle id to serious_python's darwin packaging (#6731)
  • 4d3b6bf Bump flet package version to 0.86.3 (#6727)
  • a5f12d8 Run embedded FletApps over the in-process dart_bridge transport (#6723)
  • b9d3844 fix(flet-charts): drop stray tests/init.py that broke test collection (#6...
  • 2ce46bb fix(flet-charts): release stale frame-ack futures so MatplotlibChart survives...
  • cf5af0f Pass custom arguments to the app script from flet run (#6721)
  • db3bcf6 Fix embedded FletApp back gesture exiting host app (#6715)
  • 97e95f1 Fix window.maximized reverting to unmaximized on macOS when set with page.tit...
  • fca8295 flet build: deterministic, decodable icon/splash selection (#6707)
  • Additional commits viewable in compare view

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

Bumps [flet](https://github.com/flet-dev/flet) from 0.85.3 to 0.86.4.
- [Release notes](https://github.com/flet-dev/flet/releases)
- [Changelog](https://github.com/flet-dev/flet/blob/main/CHANGELOG.md)
- [Commits](flet-dev/flet@v0.85.3...v0.86.4)

---
updated-dependencies:
- dependency-name: flet
  dependency-version: 0.86.4
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
@dependabot dependabot Bot added dependencies Pull requests that update a dependency file python Pull requests that update python code labels Aug 1, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file python Pull requests that update python code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants