Hello and welcome to Flutter 2.10. It has been less than two months since our last release, but even in that short time google have release Flutter stable version again.
Check out my previous blogs on flutter
Google have several exciting things to announce as part of this release, including a big update on Flutter’s support for Windows, several significant performance improvements, new support for icons and colors in the framework, and some tooling improvements. In addition, reduction in support for older versions of iOS, and a short list of breaking changes. Let’s get into it!
Ready for production apps on Windows
First and foremost, the Flutter 2.10 release brings with it the stable release of Windows support. You no longer need to flip a flag to get the functionality that produces Windows apps on the stable channel of Flutter — now it’s available by default!
This release includes extensive improvements for text handling, keyboard handling, and keyboard shortcuts, as well as new integrations directly into Windows, with support for command-line arguments, globalized text entry, and accessibility.
This release of Flutter includes initial support for dirty region management provided by Flutter community member knopp. He’s enabled partial repaints for a single dirty region on iOS/Metal. This change reduced 90th and 99th percentile rasterization times on a few benchmarks by an order of magnitude, and reduced GPU utilization on these benchmarks from more than 90% to less than 10%.
Flutter developers expect to bring the benefits of partial repaints to other platforms in future releases.
In the Flutter 2.8 release, they landed our own internal picture recording format. Now in Flutter 2.10, they have started building optimizations with it. As an example, one common case of opacity layers is now implemented much more efficiently. Even in the worst case, frame raster times in our benchmarks fell to under a third of their previous value.
As always, performance enhancements, reduced memory usage, and reduced latency are a priority for the Flutter team. Look forward to further improvements in future releases.
In addition to performance improvements, they have also added some platform-specific features and enhancements. One new enhancement is smoother keyboard animations in iOS.
A 64-bit architecture represents pointers as a 4-byte data structure. When you have a lot of objects, the space taken up by the pointers themselves adds to the overall memory usage of your app, especially if you have larger, more complicated apps that have more GC churn. However, your iOS app is very unlikely to have enough objects to require a significant portion of even the 32-bit address space (2 billion objects), let alone the enormity of the 64-bit address space (9 million billion objects).
Compressed pointers were provided in Dart 2.15 and in this release of Flutter, it is used to reduce the memory usage for 64-bit iOS apps.
This release contains a number of improvements for Android as well. By default, when you create a new app, Flutter defaults to support the latest version of Android, version 12 (API level 31). Also, in this release, They’ve enabled multidex support automatically. If your app supports Android SDK versions below 21, and it exceeds the 64K method limit, simply pass the
--multidex flag to
flutter build appbundle or
flutter build apk and your app will support multidex.
And last but not least, Remember Gradle error messages can be intimidating. For this reason, the Flutter tool now suggests resolution steps to common issues. For example, if you add a plugin to your app that requires you to increase the minimum supported Android SDK version, you now see a “Flutter Fix” suggestion in the logs.
This release contains some improvements on the web as well. For example, in previous releases, when scrolling to the edge of a multiline
TextField on the web, it wouldn’t scroll properly. This release introduces edge scrolling for text selection: when the selection moves outside of the text field, the field scrolls to view the scroll extent. This new behavior is available for both web and desktop apps.
In addition, this release of Flutter includes another notable improvement in the web. In previous versions, If you have a large number of native HTML widgets in your app, such as links, that adds up to a lot of overhead. With this release, they have created a new “non-painting platform view” for the web that essentially removes that overhead. And later taken advantage of this optimization in the
Link widget, which means if you have many links in your Flutter web app, they no longer represent any significant overhead at all.
This release is the beginning of the transition to Material 3, which includes the ability to generate an entire color scheme from a single seed color.
With any color, you can construct an instance of the new
final lightScheme = ColorScheme.fromSeed(seedColor: Colors.green);
final darkScheme = ColorScheme.fromSeed(seedColor: Colors.green, brightness: Brightness.dark);
There’s also a new
colorSchemeSeed parameter to the
ThemeData factory constructor that allows you to generate the theme’s color scheme:
final lightTheme = ThemeData(colorSchemeSeed: Colors.orange, …);
final darkTheme = ThemeData(colorSchemeSeed: Colors.orange, brightness: Brightness.dark, …);
In addition, this release includes the
ThemeData.useMaterial3 flag, which switches components to the new Material 3 look.
Update including one ease-of-use feature if you use DevTools from the command line. Instead of using
pub global activate to download and execute the latest version, you can now simply use
dart devtools and get the version that is up-to-date with the version of Flutter that you’re using.
Removing dev channel
In the Flutter 2.8 release, they announced that they were doing the work to remove the dev channel, simplifying your choices, and removing engineering overhead. In this release, Dev channel has been removed.
Lastly there as been so much change in latest stable release of flutter and more on their way.