Flutter Forward 2023: Going Beyond
Flutter is a multi-platform software created by Google that allows us to develop mobile applications for both Android and iOS, desktop applications that run on Linux, Windows and macOs, and even for the web, always sharing the same code base.
Since its presentation a few years ago (2017), the acceptance of Flutter among developers has been increasing day by day, so that today we can find thousands of applications both in the Apple Store and in Google Play developed with Flutter.
Since its launch, the evolution of Flutter has been permanent and, yesterday, at Flutter Forward, the new features that are to be incorporated were presented.
Flutter 3.7 and Dart 2.19
Flutter 3.7 is the recent release that has added a lot of features and enhancements, like:
- Material 3 support has improved
- New graphical components are added: Menu bars, context menus…
- New iOS features: iOS release validation, bitcode deprecation…
- Better rendering engine (Impeller)
- Improvements in memory management Dart 2.19 has also some news. One of the most significant is that simplifies concurrency with Isolate.run().
Improvements on Flutter development
In the Flutter Forward a series of important improvements were presented in which they are working to improve its use.
Breakthrough graphics performance
Impeller, Flutter’s rendering engine, has been largely rewritten. In this way, the graphic performance has been significantly improved, apart from correcting some pre-existing errors. Initially these improvements are being implemented for mobile platforms (working on the Android 3D Vulkan API and on Metal in the case of iOS). The following video shows the difference between the old motor and the new one.
Source: Tim Sneath
Seamless integration web and mobile
In the Flutter Forward improvements have been presented in the integration of Flutter at the web level and mobile applications.
A new feature has been introduced, called element embedding, which allows you to insert Flutter content on any website. With this, what is achieved is that our Flutter content becomes a Web component (forming part of the DOM), as can be seen in the demo that was presented.
Until now, to make use of native components of the iOS or Android platforms, the communication was done through messages and it was necessary to have knowledge of Kotlin (Android) or Swift (iOS) to complete the access to the native libraries used. Now they are working on simplifying this whole process, and that Dart is in charge of automatically creating all these communications.
Early to new and emerging architectures
Currently, we can develop applications with Flutter for Android, iOS, Linux, macOS, Windows and devices, and also for the web. But progress has been made in Dart’s support for new architectures, such as WebAssembly or RISC-V.
Continued focus on developer experience
Flutter Forward has talk about how is focusing on developer experience:
- Improved DevTools is presented.
- Has introduced Dart 3, which is a major language update that introduces null sound security and removes deprecated features.
- Alpha quality builds of Dart 3 and Flutter have been released for developers to test packages and apps.
- The team is investing in developer expertise for Flutter, including the News Toolkit to speed up mobile development for news publishers and other content providers. The News Toolkit includes everything you need to build an article-centric app, complete with navigation, search, authentication, ad integrations, notifications, profiles, and subscriptions.
All this are great news for Flutter developers. If you would deep more in where is Flutter heading, you can check his roadmap.
This post will go over how to use NavigationStack and NavigationLink, which are the two main components for managing the navigation stack and navigating between views in an app.
One of the key features of SwiftUI is its use of property wrappers, which are used to control the flow of data through the view hierarchy.
What are Opaque Types In Swift, an opaque type is a type that is defined in one module (such as a framework or library) but can only be used as a specific, concrete type within that module.