
An overview of the major features introduced in Dart 3, including: records, patterns, switch expressions, sealed classes, and class modifiers. https://codewithandrea.com/articles/whats-new-dart-3-introduction/

An in-depth overview of what abstractions to use to write backend-agnostic code that is more testable and maintainable, along with their tradeoffs. https://codewithandrea.com/articles/abstraction-repository-pattern-flutter/

An overview of Firebase as a BaaS platform, including available features, supported platforms, pricing, portability, documentation, and developer experience. https://codewithandrea.com/videos/firebase-pros-cons-flutter/

A simple guide showing how to use the FirestoreListView widget to enable pagination when loading large collections of documents from Firestore. https://codewithandrea.com/articles/firestore-pagination-list-view/

The new Riverpod Lint package adds useful lints and refactoring options that make writing Flutter apps a breeze. Here's how to make the most of it. https://codewithandrea.com/articles/flutter-riverpod-lint/

Since Dart 2.17, we can add members and additional methods when declaring an enum. Here's how. https://codewithandrea.com/tips/dart-2.17-enums-with-members/

AsyncNotifier does not have a mounted property and this can cause some problems in practice. This article explores some solutions and their tradeoffs. https://codewithandrea.com/articles/async-notifier-mounted-riverpod/

Since Flutter 3.7, BuildContext has a mounted property that we can check after an asynchronous gap. Here's how to use it. https://codewithandrea.com/tips/flutter-3.7-using-context-mounted/
AsyncNotifier does not have a mounted property and this can cause some problems in practice. This article explores some solutions and their tradeoffs. https://codewithandrea.com/articles/async-notifier-mounted/

Since Flutter 3.7, BuildContext has a mounted property that we can check after an asynchronous gap. Here's how to use it. https://codewithandrea.com/tips/using-context-mounted-flutter-3.7/