Flutter 3.3: What’s New

- By Nasir Zaidi

On 31 August, on the first day of Flutter Vikings in Oslo, the release of Flutter 3.3 was announced which contained a set of updates, fixes, and new features. This release builds upon the feature set of Flutter 3.0, support for Dart 2.18, Material 3 modifications, tablet and desktop support and much more.

Flutter has been growing in popularity immensely over the past few years and it is gradually transcending the notion of it being only a mobile app SDK. Let’s get into the promising features Flutter 3.3 delivers.

Scribble

Scribble is a lightweight library for freehand drawing in Flutter supporting pressure, and variable line width. Flutter 3.3 has announced Support for Scribble on iPad using Apple Pencil.

This feature is enabled by default on CupertinoTextField(iOS text field.), TextField (text input widget) and EditableText (lets user edit text). In order to enable this feature on your iPad, you would have to upgrade to Flutter 3.3.

Dart 2.18

Objective-C and Swift codes are used to call APIs on iOS and macOS devices. Dart 2.18 extends its support to these languages and can now call both these languages. Dart supports this interoperability mechanism in any app from the CLI app to backend code to a Flutter UI.

This new mechanism utilizes the fact that Objective-C and Swift code can be exposed as C code based on API bindings. The Dart API wrapper generation tool, ffigen can create these bindings from API headers.

Touchpad input

Flutter 3.3 provides improved support for touchpad input. This not only provides richer and smoother control but also reduces misinterpretation in certain cases owing to Flutter’s focus on mobile platforms, apps are designed for a wide range of rich touch gestures.

Using a pointer to directly manipulate content is very intuitive on a touch screen, but clicking and dragging with a mouse to perform that very same interaction is not intuitive. Proper implementation of trackpad gestures will greatly improve the experience of these interactions.

Global Selection

Flutter web apps were not quite top quality when it came to selecting text. Flutter widgets are not selectable by default. The global selection widget, however, introduces an area for user selections with adaptive selection controls, creating a SelectableRegion which gives the users platform-specific selection controls.

Text input

The text input plugin is a low-level interface to the system's text input control. To start interacting with the system's text input control, call attach to establish a TextInputConnection between the system's text input control and a TextInputClient.

To improve support for rich text editing, Flutter 3.3 brings the ability to receive granular text updates from the platform’s TextInputPlugin.

Previously, the TextInputClient only delivered the new editing state with no delta between the old and new, TextEditingDeltas and the DeltaTextInputClient fill this information gap.

Material Design 3

As part of Android 12, Google announced incorporating Material Design 3 into Flutter which included the color theming engine, wallpaper-based themes, and drafting of the app’s color scheme. It introduces other things too, including support for Material Design 3.

Flutter 3.3 includes updates to IconButton (A picture printed on a Material widget that reacts to touches by filling with color), Chips (Compact elements that represent an attribute, text, entity, or action, and variants for AppBar (toolbar).

Windows

Previously, unlike other platforms, the Windows desktop application’s version was set by a file specific to the Windows app.

Windows desktop app versions can now be set from your project pubspec.yaml file and build arguments, makinging it easier to enable auto-updates so that your clients always receive the most recent version of a program.

go_router

go_router is a Declarative Routing Package for Flutter. This package uses the Flutter framework's Router API to provide a convenient, URL-based API for navigating between different screens.

In order to support building apps with complex navigation needs, Flutter 3.3 has released a new version of the go_router package, making it simpler to design routing logic that is compatible with mobile, desktop, and the web.

The go_router package simplifies routing by providing a declarative, URL-based API, making it easier to navigate and handle deep links.

VS Code extension enhancements

Visual Code extensions let you add languages, debuggers, and tools to your installation to support your development workflow.

Flutter 3.3 includes several updates for VS Code extension including improvements for adding dependencies. Using the command Dart: Add Dependency, you can add multiple, comma-separated dependencies.

Improvements to Cached Raster

The Cached Raster function creates a preprocessed cache at the point in the function chain where it's added. Flutter 3.3 increases the performance of loading images from assets by eliminating copies and reducing Dart garbage collection pressure. Previously, when loading asset images, the ImageProvider API required the compressed data to be copied multiple times.

iOS pointer compression disabled

In the Dart 2.10 release, Dart’s pointer compression optimization on iOS was enabled. Pointer compression works by reserving a large virtual memory region for Dart’s heap, leading to a reduction in heap size.

Since the total virtual memory allocation allowed on iOS is less than on other platforms, this large reservation reduces the amount of memory available for use by other components that reserve their own memory, for example, Flutter plugins.

While disabling pointer compression increases the memory consumed by Dart objects, it also increases the memory available for non-Dart parts of a Flutter application, which is more desirable overall.

PlatformDispatcher.onError

The Platform Dispatcher class is the most basic interface to the host operating system's interface. This is the central entry point for platform messages and configuration events from the platform.

In previous Flutter versions, you had to manually configure a custom Zone in order to catch app errors. However, custom Zones slowed down app load time as they would reduce the number of optimizations in Dart’s libraries.

Flutter 3.3 replaces custom Zone with the PlatformDispatcher.onError callback,

Bitcode Deprecated

Bitcode is an Apple technology that enables you to recompile your app to reduce its size. The recompilation happens when you upload your app to App Store Connect.

Bitcode will no longer be accepted for iOS app submission and projects with bitcode enabled will emit a build warning in this version of Xcode. Flutter will also be dropping support for Bitcode in a future stable release.

Previous
Previous

Most Popular Technology Frameworks in 2022

Next
Next

Flutter Vikings 2022: What to Expect