Flutter 3 is a heavyweight milestone for us to officially support the full platform, just three months after its release, let’s have Flutter 3.3 official today! We haven’t slowed down the iteration of updates in the last three months — we’ve consolidated 5687 pull requests for Flutter since the launch of Flutter 3. hmi panel lcm

This update brings the Flutter web platform, desktop platform, text processing performance, and other updates.

We’ll also cover updates to go_router packages, DevTools, and VS Code extensions. Read them with us to learn more!

Framework updates

Global selection

Until now, Flutter’s text selection interaction on the web has not met expectations. Unlike Flutter apps, native web apps build each node into a tree structure. In traditional web apps, you can easily use drag gestures to select nodes on a web page, which you can’t easily do in a Flutter web app.

Everything has changed since today. We’ve introduced widgets, and their sub-widgets are now free to choose from!

Just wrap around what the route displays (for example), Flutter will take care of everything for you, and you’ll enjoy this powerful new feature.SelectionAreaScaffold

For a more comprehensive and in-depth look at this amazing new feature, visit the SelectionArea API page.

Trackpad operation

Flutter 3.3 optimizes support for trackpads. Flutter not only provides richer and smoother controls, but also reduces the number of case-specific mistouchings. If you’d like to learn about examples of accidental touches, you can check out the Flutter Useful Tutorials page. Scroll the page to dartpad at the bottom and follow these steps:

Zoom out of the window so that scroll bars appear in the upper half
Hover the pointer over the upper half
Use the trackpad to scroll
Prior to Flutter 3.3, scrolling with the trackpad dragged elements because Flutter sent down simulated gesture events
Starting with Flutter 3.3, scrolling with the trackpad scrolls the list correctly because Flutter passes “scrolling” events, which are not recognized by the card and processed accordingly
For more information, visit the design documentation for Flutter trackpad gestures and review the following pull requests:

PR 89944: Trackpad gestures are supported in the framework
PR 31591: Touch Edition gestures on iPad
PR 34060: ChromeOS/Android trackpad gestures
PR 31594: Trackpad gestures for Win32
PR 31592: Linux trackpad gestures
PR 31593: Trackpad gestures on Mac

Handwriting function

Thanks for the input from community member fbcouch. This feature is enabled by default on , , and . Simply upgrade Flutter to 3.3 to bring this new feature to your users.

Text input

In order to optimize support for rich text editing, in this update we have added the ability to receive more granular updates from the underlying platform. Previously, only new edit states could be passed, but the amount of change between the old and new states could not be broken down, and the information difference that filled this part could be filled. By accessing these variations, you can build custom styles for the input area, which expands and shrinks as you type. For more information, you can check out the Rich Text Editor example.TextInputPluginTextInputClientTextEditingDeltaDeltaTextInputClient

 

Material Design 3 support

The Flutter team continues to integrate more Material Design 3 components into Flutter. This update includes Medium and Expanded Styles for IconButton.

To track the progress of the integration of Material Design 3, you can check out Bringing Material 3 to Flutter on GitHub.

IconButton example

Flutter 3.3 is generally available

Chip example

Flutter 3.3 is generally available

 

Desktop platform

Windows

When you previously built a Windows desktop app, the version of the app could only be set in a file. This behavior is inconsistent with the behavior of setting versions on other platforms.

The version of the Windows desktop app can now be set with and build parameters. It helps provide app update functionality to your users in your app when it pushes an update.pubspec.yaml

To learn more about setting the Windows desktop app version number, check out the documentation. Projects created prior to Flutter 3.3 require manual adjustments to use this feature.

Packages update
go_router Publish

When your app contains complex navigation needs, it can make you dizzy. To extend Flutter’s navigation API, the team released a new version of the go_router package that makes your routing logic design more concise across all platforms.

go_router package is maintained by the Flutter team and makes navigation and deep links easier with declarative and URL-based APIs. The latest version 5.0 allows apps to be redirected through asynchronous code, which also includes some breaking changes.

See the official documentation for more: Routing and Navigation.

 

VS Code plugin enhancements

VS Code’s Flutter extension also brings updates that add dependencies. You can use commands with commas to add multiple dependencies at once.Dart: Add Dependency

You can check out the following for updates to all of VS Code’s Flutter plugins since the last stable version of Flutter was released:

VS Code extensions v3.46
VS Code extensions v3.44
VS Code extensions v3.42

Flutter Developer Tools updates

DevTools has also included several updates since the last time Flutter released a stable release, including improvements in user experience and performance for data table presentations, as well as a reduction in stuttering when scrolling through long lists of events (#4175.

Here’s what’s announced for each devTools release since Flutter 3.0:

Flutter DevTools 2.16.0 release notes
Flutter DevTools 2.15.0 release notes
Flutter DevTools 2.14.0 release notes

Performance improvements
Raster caching improvements

This update improves the performance of loading asset images, reduces copying of image data and the pressure of Dart garbage collection (GC). Previously, when loading a resource image, you needed to copy the compressed data multiple times. First, when the image is opened, the data is copied to the native heap memory and the array of structures is exposed to Dart. The data is then copied again when the array of structures is converted to the built-in storage.ImageProviderui.ImmutableBuffer

With the addition of ui. Introduction of ImmutableBuffer.fromAsset. This loading process is also faster because it bypasses the overhead of additional scheduling required by the previous method channel. Especially in our benchmark test, images loaded up to about 2 times faster.

Flutter 3.3 is generally available

For more information, check out the official documentation: Add ImageProvider.loadBuffer.

Framework stability

Disables iOS memory pointer compression

In the release of Flutter 2.10 Stable, we enabled Dart’s memory pointer compression optimization for iOS. However, Yeatse reminded us on GitHub that this optimization contained consequences that we didn’t expect. Dart implements pointer compression by maintaining a large virtual memory for the heap. Because the total virtual memory allowed on iOS is less than other platforms, there is less virtual memory that other components such as the Flutter plug-in can hold.

While disabling pointer compression increases the memory consumed by the Dart object, it also restores the memory of the non-Dart portion available to the Flutter app, making it a better scenario overall.

Apps can increase the maximum amount of virtual memory allocated, but this action is only available on newer iOS versions and doesn’t work with other iOS device versions supported by Flutter. When we are able to use this optimization everywhere, we re-evaluate it.

 

API improvements
PlatformDispatcher.onError

In previous releases, you needed to manually configure a custom Zone to catch all exceptions and errors for your app. However, custom Zones do not apply to some optimizations in the Dart core library and slow down the startup time of the app. In this update, you can catch all errors and exceptions by setting the PlatformDispatcher.onError callback instead of a custom Zone. For more information, check out the official documentation that has been updated: Handling Errors in Flutter.

 

FragmentProgram update

Fragment shaders written in GLSL and declared in section are now automatically compiled into formats that the engine can correctly recognize and are automatically bound to the app’s resources. With this change, developers no longer need to use third-party tools to compile shaders. In the future, the engine’s FragmentProgram API may only accept tool builds from Flutter. We haven’t applied this change yet, but as planned in the design documentation for fragmentProgram API improvements, it is possible to implement it in the future.pubspec.yamlshader:

For more information, you can check out this Flutter shader example.

 

Layout decimal processing

In previous releases, the Flutter engine aligned the composition layer precisely with pixels to improve Flutter’s rendering performance on older iPhones (32-bit). After we added support for the desktop platform, we noticed that this action would cause visible jitter because the desktop platform was lower than the device pixel ratio would normally be. For example, on lower DPR devices, prompts produce noticeable jitter as they tap in. After determining that the updated iPhone device didn’t need this optimization, we removed it from the Flutter engine to improve render fidelity on the desktop side.

We also found that by removing these pixel alignments, the subtle rendering differences that had previously occurred during the golden image test became more stable.

 

Stop supporting 32-bit iOS

As mentioned when we released Flutter 3.0, version 3.0 was the last to support 32-bit iOS devices as well as iOS 9 and 10 due to reduced usage. This change will affect iPhone 4S, iPhone 5, iPhone 5C, and iPad devices of the 2nd, 3rd, and 4th generations. Flutter 3.3 stable and later stable versions will no longer support 32-bit iOS devices as well as iOS 9 & 10. This means that apps built with Flutter 3.3 and later will no longer run on these devices.

 

Support for macOS 10.11 and 10.12 is coming to an end

In the upcoming official release schedule for the fourth quarter of 2022, we will be forgoing support for macOS versions 10.11 and 10.12. This means that after this, the stable version of the Flutter SDK will not be able to run on these versions, and the minimum supported version of Flutter for macOS will rise to 10.13 High Sierra.

 

Stop supporting Bitcode

The upcoming release of Xcode 14 will no longer support submitting iOS apps with Bitcode, and this version of Xcode will warn projects with bitcode enabled. As a result, Flutter will remove support for bitcode in future stable releases. We don’t want to affect a lot of developers, so Flutter won’t turn on bitcode by default. However, if you manually turned on bitcode in your Xcode project, turn it off as soon as possible after upgrading to Xcode 14.

You can turn it off by opening and setting Enable Bitcode to No in the build setting. Hybrid development apps can turn it off in the Xcode project that hosts the project.ios/Runner.xcworkspace

Flutter 3.3 is generally available

You can check out the Apple documentation to learn more about bitcode distribution.

 

epilogue

The Google Flutter team is very grateful to every member of the community for all their efforts to make the Flutter experience better, we look forward to continuing to work the work that has been done, and we always value our most important and valuable asset – every member of the community!

By hmimcu