Flutter 3.13 is here!
This release introduces new widgets (2D scrolling, yay!) and brings improvements on many different fronts (performance, accessibility, Material support, improved iOS widgets, and more!).
Alongside it, Dart 3.1 is available too, and in this newsletter, I’ll give you an overview of all the highlights.
But there’s more.
A few weeks ago, the FlutterCon speaker videos were published. Having attended the conference back in July, I can assure you that this video archive is a goldmine, and below you’ll find some my favourite talks. ❤️
Finally, I’ll also share some of the latest articles from the community. 🙂
Ready? Let's go!
What’s new in Flutter 3.13
In a nutshell, here are the top highlights from the new release:
- Impeller performance improvements on iOS (though some latency issues still persist - see issues #110431 and #113494)
- More customization and new capabilities in the Material Framework, along with platform-adaptive dialogs and improved date pickers on iOS
- A new
AppLifeCycleListener
class (with improved APIs over theWidgetBindingObserver
) - Two-dimensional scrolling APIs and packages to unlock new interactions such as diagonal scrolling (check out this cool demo!)
- New slivers for composing unique scrolling effects
- New DevTools features
For all the details, read the official blog post:
📝 Dart 3.1 & a retrospective on functional style programming in Dart 3
With the release of version 3.0, Dart has truly become a multi-paradigm language that allows you to write code with an object-oriented style (using class hierarchies) or functional style (using types and pattern matching).
As a minor release, Dart 3.1 doesn’t introduce any new language features, and it won’t affect the way you write Dart code.
As a result, the official announcement is more of a retrospective about how the new language features can help you model your data and improve the way you write and structure your Dart code.
If you want to better understand the difference between the object-oriented and functional approaches when writing code, this is a great read:
📹 Flutter Resources for iOS developers
If you’re coming from the iOS world and you want to port your apps to Android with a single codebase, Flutter is the ideal choice.
To help with this, the Flutter team has published a new in-depth video explaining how Flutter works on iOS:
Additionally, these useful resources are available in the official documentation:
- Learning Dart as a Swift developer
- Flutter for SwiftUI Developers
- Objective-C and Swift interop using package:ffigen
The FlutterCon Videos are Now Available!
As I mentioned in the previous newsletter, FlutterCon 23 has been an amazing conference, packed with many in-depth talks.
So it’s great to see that all the Flutter video recordings have been published:
Admittedly, the official website is a bit clunky to navigate. But fear not, for I have listed all the talks and resources on this (updated) repo:
With so many great talks, I really struggled to pick my favourites.
So here’s a shortlist of the ones I found most engaging, creative, and informative. 👇
🎤 Leaving the nest: The Next 10 Years of Flutter
I know very few people who can kickstart industry-leading products such as Flutter, and have the long term vision to see them thrive over many years.
One of these people is Eric Seidel. And it was great to hear his take on where Flutter might go over the next 10 years, what expectations the next 10M Flutter developers will have, and how to meet those expectations.
In the talk, Eric also gave a demo of Shorebird, a new tool that enables code push for Flutter apps:
🎤 Demystifying Text Rendering in Flutter
This was a highly entertaining talk by Raouf Raniche about how text rendering works, and how even big companies like Spotify mess it up in their apps.
Covered topics include:
- How various font metrics affect the text line height
- How character positioning and selection works on LTR, RTL, top-to-bottom layouts
- How text rendering works in Flutter, known gotchas, and things you should consider to “get it right”
For all the details, here’s the full talk:
🎤 From Network Failures to Offline Success: A Journey of Visible App
Dominik is a Flutter GDE who’s been working on Visible, an app for people with chronic illnesses (such as long COVID).
And in his talk, he talks about the challenges his team encountered when dealing with network connectivity as the app grew in scale and how they overcame them by making the app offline-first.
The biggest takeaway is that offline is not an error. Rather, it is one possible (and rather common) application state that should not be left as an afterthought.
For all the details, watch this:
🎤 Building Kahoot visually with FlutterFlow and Firebase
This was a super-fun talk and live demo, where Pooja Bhaumik showed us how to build the Kahoot quiz app using FlutterFlow.
What made the talk so interesting is that Pooja did not focus on the UI - but rather showed how to use FlutterFlow to handle business logic and Firebase data access, including:
- How to connect a
ListView
to a Firebase Backend Query - How to handle Firebase Authentication and chain multiple actions using visual workflows
- How to render UI based on complex conditions that depend on the application state
She did all this without writing any code. And to top it off, she showed how to use the finished product by running a live quiz with the audience. 🤯
Check it out:
🎤 Building a large-scale Flutter mobile banking application with 25 Flutter Devs
During FlutterCon, the LeanCode guys delivered not one but two very interesting talks.
The first one was about Patrol, a powerful tool for UI integration testing in Flutter (here’s the talk: Reimagining Flutter UI tests with Patrol).
The second one was about their experience in building a large-scale app with a team of 25 Flutter developers.
Without a doubt, building large apps with large teams presents some unique challenges, including:
- Deciding who owns the code
- How to structure the code (project structure, packages and features, etc.)
- What tools to use to make life easier (Melos, Patrol, StoryBook)
- How to establish a design system that could be used by multiple teams (and how to ensure the app conforms to the designs using golden tests)
Here’s the full talk:
🎤 Shaders - Beyond the Gimmick
Fragment Shaders are a very interesting topic, and I’ve already shared various resources about them in previous newsletters.
So I particularly enjoyed this talk where Renan Araujo showed:
- What shaders are and how they work
- How to add them to a Flutter application
- A few examples (basic interpolation, fancy gradients using meshes and animations, image textures, UI sampling)
Definitely worth a watch if you want to know what Flutter is capable of:
🎤 Migrating a Flutter app to Material 3
If you want to migrate your Flutter app to Material 3 but don’t know how to, this talk by Taha Tesser covers all the things you need to know, including:
- The
userMaterial3
flag and what happens when you enable it - Ways to update the color scheme and typography
- Elevation and how it affects the look of your widgets
- Switching to the new Material 3 widgets
Here are all the details:
🎤 Animating a production app with tens of thousands of users
When it comes to Flutter animations, Marcin Szałek is one of the most knowledgeable devs out there.
And in this talk, he shows how he added advanced animations to a real-life production app that allows users to send money to friends, by covering:
- How to build a simple micro-interaction example and gradually add more complex effects, ensuring the end result can be reused in multiple places.
- How to implement an animated splash screen, which can be used to delight users when they first install the app.
If you want to learn how to make your apps beautiful with the built-in Flutter animation APIs, don’t miss this:
🎤 Custom_lint: write lints and fixes
When Remi Rousselet comes on stage, there is always something amazing to learn.
And in this talk, he delivered a live coding demo, showing how (relatively) easy it is how to write custom lint rules and fixes for your Dart projects.
As part of this, you will learn:
- How to create custom lint rules
- How to report errors that will appear in the code editor (based on some rules)
- How to add quick fix options and the logic for applying them
Here’s the full talk:
🎤 Other excellent talks
With so many amazing talks, it was hard to make a shortlist. Here are a few more of my favourites:
- Flutter Tips and Tricks by Simon Lightfoot
- Exploring Records and Patterns by Pascal Welsh
- Stop Treating Accessibility as an Afterthought: Concrete Steps to Build Inclusive Apps by Manuela Sakura Rommel
- Understanding Flutter's handling of Gestures by Guillaume Diallo
- Control your Flutter application on the fly with Firebase Remote Config by Mangirdas Kazlauskas
And once again, you can find the entire list here:
Other community articles
Aside from the Flutter 3.13 announcement and all the FlutterCon talks, I also want to share these useful articles from the community. 👇
📝 A new way of listening to the app lifecycle events in Flutter
In this new article, Mangirdas Kazlauskas takes us through the new AppLifeCycleListener
class introduced in Flutter 3.13, showing how it’s now possible to listen to transitions between states, making it easier to run some code only for the transitions you are interested in.
Additionally, it shows how we can use the onExitRequested
callback to ask if the application should exit in cases where the exit is cancelable:
📝 Static Code Analysis
As part of her new newsletter, Daria Orlova published a great article about:
- The static code analysis tools her team uses to follow established code practices and have more confidence in the quality of the codebase.
- Some useful lint rules you can enable in your projects
- An example of how she implemented a custom lint rule with the custom_lint package (no doubt, this was inspired by Remi’s talk at FlutterCon 🙂)
Overall, I quite like her humorous and informal writing style, and you can read the full article here:
Until Next Time
For most of the last month, I’ve been on holiday with my family, and I haven't published new articles as a result.
But now I’m back in business and can’t wait to share new content (and some new, upcoming projects) with you all! 💪
So stay tuned for updates and happy coding!