![How to test functions that throw in Flutter](https://www.cdn5.niftycent.com/d/k/Q/X/N/v/g/how-to-test-functions-that-throw-in-flutter.webp)
When writing tests for functions that throw, we should not invoke them directly, but rather pass them as arguments using a tear-off. https://codewithandrea.com/tips/flutter-test-expect-tear-off/
![Flutter App Architecture: The Presentation Layer](https://www.cdn5.niftycent.com/d/D/v/r/b/y/E/flutter-app-architecture-the-presentation-layer.webp)
How to implement controller classes that can hold business logic, manage widget state, and interact with repositories in the data layer. https://codewithandrea.com/articles/flutter-presentation-layer/
![How to update a Map of key-value pairs in Dart](https://www.cdn5.niftycent.com/d/e/j/M/W/Y/Q/how-to-update-a-map-of-key-value-pairs-in-dart.webp)
Ever needed to update a value if a given key already exists, or set it if it doesn't? Here's how to use the Map.update() method to solve this. https://codewithandrea.com/tips/dart-map-update-method/
![Use AsyncValue.guard rather than try/catch inside your StateNotifier subclasses](https://www.cdn5.niftycent.com/d/e/r/0/4/Y/x/use-asyncvalue-guard-rather-than-try-catch-inside-your-statenotifier-subclasses.webp)
If you have many StateNotifier subclasses, using try/catch can be tedious. With AsyncValue.guard you get the same result with less boilerplate. https://codewithandrea.com/tips/async-value-guard-try-catch/
![How to Generate and Analyze a Flutter Test Coverage Report in VSCode](https://www.cdn5.niftycent.com/d/1/d/9/q/K/6/how-to-generate-and-analyze-a-flutter-test-coverage-report-in-vscode.webp)
How to use the flutter tool generate a test coverage report for your app or package, and improve your testing workflow with two helpful VSCode extensions. https://codewithandrea.com/articles/flutter-test-coverage/
![Flutter Navigation with GoRouter: Go vs Push](https://www.cdn5.niftycent.com/d/e/r/0/n/a/v/flutter-navigation-with-gorouter-go-vs-push.webp)
An in-depth explanation of the difference between Go and Push when using GoRouter for declarative routing. https://codewithandrea.com/articles/flutter-navigation-gorouter-go-vs-push/
![Flutter Project Structure: Feature-first or Layer-first?](https://www.cdn5.niftycent.com/d/k/z/P/7/6/n/flutter-project-structure-feature-first-or-layer-first.webp)
An overview of the "features inside layers" vs "layers inside features" approach when choosing a project structure for medium/large Flutter apps. https://codewithandrea.com/articles/flutter-project-structure/
![Flutter App Architecture with Riverpod: An Introduction](https://www.cdn5.niftycent.com/d/1/B/A/z/x/g/flutter-app-architecture-with-riverpod-an-introduction.webp)
An introduction to a new App Architecture based on Riverpod, and comparison with other popular ones such as MVC, MVVM, Bloc, Stacked & Clean Architecture. https://codewithandrea.com/articles/flutter-app-architecture-riverpod-introduction/
![Flutter Riverpod Tip: Use AsyncValue rather than FutureBuilder or StreamBuilder](https://www.cdn5.niftycent.com/d/D/y/N/R/r/d/flutter-riverpod-tip-use-asyncvalue-rather-than-futurebuilder-or-streambuilder.webp)
The AsyncValue class from the Riverpod package offers a much nicer API compared to AsyncSnapshot from the FutureBuilder and StreamBuilder widgets. Here's how to use it. https://codewithandrea.com/articles/flutter-use-async-value-not-future-stream-builder/
![VSCode Shortcuts, Extensions & Settings for Flutter Development](https://www.cdn5.niftycent.com/d/k/8/x/p/w/N/vscode-shortcuts-extensions-settings-for-flutter-development.webp)
A curated list of VSCode productivity tips to speed-up your Flutter development workflow. https://codewithandrea.com/articles/vscode-shortcuts-extensions-settings-flutter-development/