Believe it or not, I've been publishing a monthly newsletter for all my subscribers since October 2019!
And most recently, I've been thinking about ways to make this more accessible, engaging, and valuable for everyone.
So today, I'm pleased to announce the first edition of my new monthly newsletter! 📥✨
This comes with a brand new format, including two main sections:
- Flutter Top Picks: every month, I'll share a selection of resources and top picks that have caught my attention.
- Latest on Code With Andrea: this is similar to the past editions, with a summary of my latest Flutter articles and tips.
But there's more. All upcoming newsletters will be available online, and I'm working on a new dedicated page on my site where you'll be able to find all past editions.
With that said, I hope you'll enjoy all the content I have prepared for you.
On to the links! 👇
Flutter Top Picks
Over the last few months, many exciting things have happened in the Flutter ecosystem. Here's a summary of what piqued my interest.
🧱 Mason (Flutter Package)
You may have heard about Mason before.
It's an open-source CLI tool that makes it easy to generate custom code from templates that use dynamic variables.
Sounds complicated? Don't worry, as there are some great resources to get started.
This post from Felix Angelov at Very Good Ventures offers a good overview:
And most recently, the Flutter team published an official video about it:
🧱 Custom Lint package
As of today, we can already import the official Flutter Lint rules, and decide which ones to enable/disable in our project by customising the analysis_options.yaml
file.
Beyond flutter_lints, other linting packages are available too. This article by Mike Rydstrom compares them and offers some great recommendations about which lints to use in your own projects:
But up until today, it was not possible very hard to create our own custom rules.
To overcome this, the Invertase team has launched a new custom_lint package that makes it a lot easier to create your own custom lints (thanks, Remi! 👏). For all the details, check the official announcement (which also includes a detailed video):
🛠 Dart on the server with Dart Frog
Many people dream of writing full-stack apps using Dart on the client and server.
And the team at Very Good Ventures has been busy building a minimalistic, experimental backend framework for Dart, built on top of the shelf and mason packages.
This is inspired by other popular frameworks such as remix.run, Next.js, and express.js.
Here's the original announcement:
🎬 Full-stack Dart with Simon Lightfoot (The Boring Flutter Development Show)
Continuing on the topic of server-side Dart, Simon Lightfoot and Craig Labenz have recently recorded a new episode showing how to:
- work with WebSockets in Flutter
- deploy your own real-time Dart Backend on Google Cloud Run (using Docker)
Here's the video:
And here's part two as well:
I'm quite excited to follow more interesting developments on this space in the coming months. 🚀
📝 Learning Dart as a JavaScript developer
The Dart team has recently published a comprehensive guide for all JS developers moving over to Dart.
This is an excellent resource not just for JS developers, but for everyone who wants to improve their knowledge of the Dart language.
So make sure you add this to your bookmarks:
🎬 Synchronous BuildContexts | Decoding Flutter
As Flutter developers, I'm sure that we've all made the mistake of accessing a BuildContext
after awaiting for a Future
to complete.
This can cause a scary runtime exception known as "Looking up a deactivated widget's ancestor is unsafe":
And it happens because we should only ever use BuildContext
synchronously.
I've covered this in one of my recent tweets, and this video by the Flutter team explains the issue in great detail so that you can do the right thing going forward:
🛠 Zapp.run: Build Flutter apps in your browser
The Invertase team has been on fire this month! 🔥
Their latest product is Zapp.run, a very promising IDE for building Flutter apps on the browser.
While Zapp was launched only last week, it already offers some very handy features that put it ahead of Dartpad, including:
- project explorer
- install any pub.dev package (that runs on web)
- integrated debugger
- preview and share
- GitHub integration
What's more, the team is already adding multiple device previews and other cool features that can all be tracked on the public roadmap.
And while Zapp is not as powerful as VSCode, it's a great way to share live examples with others! 🙌
For all the details, check out the official announcement:
Alternatively, watch this video for a full overview of the features in the editor:
Latest on Code With Andrea
Aside from re-launching this newsletter, this is what I've been up to. 👇
💻 Flutter Tips & Tricks (GitHub Repo)
Over the last few months, I've been sharing many Flutter tips and tricks on Twitter (here are the top 10 to date).
But Twitter is not the easiest place to find older content, so I've decided to make all my tips available on this new GitHub repo:
As of today, the repo already contains 60 Flutter tips, and I plan to add many more! So make sure to save this in your bookmarks! 👍
And FYI, I also have an entire page about Flutter tips right here on this site. 🙂
📝 Singletons in Flutter: How to Avoid Them and What to do Instead
Singletons are a very controversial and debated topic in the software development community:
- Some people say you should avoid them at all costs. ❌
- Others are more pragmatic and use them only in specific cases. 🔍
- And some use them willy-nilly like there's no tomorrow. 😅
To bring some clarity, I've written this article that covers them in great detail and presents some alternatives:
📝 Flutter Riverpod: How to Register a Listener during App Startup
Have you ever needed to register a listener as soon as the app starts?
This is useful if you need to process incoming stream events (such as messages from FirebaseMessaging
or dynamic links from FirebaseDynamicLinks
).
But if you're not careful, you can end up with messy code in your main
method.
Luckily, the Riverpod package can help, and we can use it to initialize complex objects that have one or more dependencies while keeping our app startup logic neat and tidy.
This article covers all the details:
🎓 Update: Flutter Foundations Course
As of today, I have published over 80% of my Flutter Foundations course. Since its launch, over 900 people have enrolled and given great feedback.
If you also want to learn about many advanced topics that you'll need as a professional Flutter developer, you can still enroll and get a 25% discount with this link:
Until next time
That's all for today!
If you've enjoyed this newsletter or have suggestions about how I could improve it, let me know on Twitter. 🐦
And if you'd like to receive the next ones directly in your inbox, you can sign up here. 👇
Happy coding!
Andrea