Black Friday Sale

Flutter Foundations Course

Buy now and get 33% off the regular price!

View Course

July 2022: Revamped Newsletter, Flutter Top Picks, Server-side Dart, Zapp Editor

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":

    Looking up a deactivated widget's ancestor is unsafe
    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

    Want More?

    Invest in yourself with my high-quality Flutter courses.

    The Complete Dart Developer Guide

    The Complete Dart Developer Guide

    Learn Dart Programming in depth. Includes: basic to advanced topics, exercises, and projects. Fully updated to Dart 2.15.

    The Complete Flutter Course Bundle

    The Complete Flutter Course Bundle

    Learn about State Management, App Architecture, Navigation, Testing, and much more by building a full-stack Flutter eCommerce app on iOS, Android, and web.

    Flutter Animations Masterclass - Full Course

    Flutter Animations Masterclass - Full Course

    Master Flutter animations and build a completely custom habit tracking application.