brianegan/flutter_architecture_samples
61.8
Adequate · 23 September 2026
13.3k
lines of production code
Dart
with C++, C
5
measurements over time
What this system is
This system is a comprehensive reference implementation of a Todo List application, designed to demonstrate various state management and architectural patterns in Flutter. It provides runnable examples for BLoC, Redux, MobX, MVI, and Signals, each fully configured for Android, iOS, and Web platforms. The codebase also includes shared core libraries for domain logic, repository abstractions, and local storage, alongside integration tests to verify behavior across all implementations.
How it got here
2017–2019 — Architecture and platform modernization
20 changes.
This period focused on modernizing the codebase by introducing multiple state management patterns (BLoC, MVI, Redux) and establishing a shared core library for domain logic and repository interfaces. Concurrently, all example applications were updated with full mobile and web platform configurations, while legacy code and outdated testing frameworks were removed or refactored.
2020–2025 — Flutter sample applications and tooling
6 changes.
This period focused on creating a comprehensive suite of Flutter sample applications, each demonstrating different state management and architectural patterns such as MobX, ChangeNotifier, Freezed, and Signals. The work also introduced supporting infrastructure, including a local storage repository module and shell scripts for project management and code analysis.
Features
Add Bloc Library sample app with state management examples
The bloc\_library directory now contains a complete sample application demonstrating state management using the Bloc pattern. This includes the core business logic (TodosBloc, FilteredTodosBloc, StatsBloc, TabBloc) and their corresponding events and states, alongside the Flutter UI components (AddEditScreen, DetailsScreen, HomeScreen) that interact with these blocs. The sample also provides platform-specific configuration files for Android and iOS, along with integration tests to verify the app's behavior.
_bloc\library · high confidence
Add Flutter sample app with native platform configurations
The bloc\_flutter directory now contains a complete Flutter application scaffold, including Android and iOS native project files (manifests, build configurations, and asset catalogs) that enable the app to run on mobile platforms. The Dart code implements a todo-list application using the BLoC pattern, featuring dependency injection, localization, and screen navigation for adding, editing, and viewing tasks.
_bloc\flutter · high confidence
Add MVI Flutter sample app with Android, iOS, and web support
The mvi\_flutter directory now contains a complete, runnable Flutter sample application implementing the Model-View-Intent (MVI) architecture. This includes the core Dart logic (main entry point, dependency injection, and screens), along with the necessary platform-specific configuration files for Android (AndroidManifest, styles, Gradle wrapper) and iOS (Xcode project, Info.plist, Swift/ObjC files). The app demonstrates a todo-list feature with local storage, supporting both light and dark themes.
_mvi\flutter · high confidence
Add MobX sample app with cross-platform support
The MobX sample application is added, providing a complete TodoMVC implementation using the MobX state management library. The change includes the core Dart/Flutter application code (screens for adding, editing, and viewing todos, along with the store and models) and the necessary platform-specific configuration files for Android (AndroidManifest.xml, styles, gradle) and iOS (Xcode project, Info.plist, launch screens). An integration test is also included to verify the application's behavior.
mobx · high confidence
Add Signals app with Flutter and native platform configurations
The Signals app is introduced as a new Flutter application, including the core Dart implementation (app, screens, and controllers) and the full suite of native platform files for Android and iOS. This includes the Android manifest, activity, and theme configurations; the iOS project structure, schemes, and asset catalogs; and the integration test suite, establishing the complete cross-platform foundation for the Signals feature.
signals · high confidence
Add change\_notifier\_provider sample with native platform configurations
The change\_notifier\_provider sample now includes full native platform configurations for Android and iOS, including AndroidManifest.xml, Gradle wrapper, and iOS project files (Xcode project, Info.plist, launch screens, and app icons). The sample also adds an integration test for the application. This provides a complete, runnable example of using ChangeNotifierProvider in a Flutter app across all supported platforms.
_change\_notifier\provider · high confidence
Add core BLoC and model implementations for the todos application
The library now includes the foundational components for managing application state and data flow. This includes the \Todo\ and \VisibilityFilter\ models, along with BLoCs (\TodoBloc\, \TodosListBloc\, \StatsBloc\, \UserBloc\) that handle user interactions and business logic. The \TodosInteractor\ bridges the UI layer with the \todos\_repository\_core\, managing operations like adding, updating, and deleting todos. A \Uuid\ generator is also provided for unique ID generation.
blocs/lib · high confidence
Add freezed\_provider\_value\_notifier example app
Added a new example application named freezed\_provider\_value\_notifier, which demonstrates an architecture using Flutter's ValueNotifier and the provider package for state management. The example includes a complete Flutter project structure with Android and iOS native configurations, along with Dart source files implementing screens for adding, editing, and viewing todos using a freezed-based immutable model.
_freezed\_provider\_value\notifier · high confidence
Add iOS and Android platform-specific configuration files for the Simple Bloc Flutter example
The Simple Bloc Flutter example now includes the necessary platform-specific configuration files for iOS and Android, enabling the app to build and run on those platforms. This includes AndroidManifest.xml, Gradle wrapper configuration, and Kotlin/Java activity classes for Android, along with Xcode project files, Info.plist, and Swift/ObjC bridging headers for iOS. These additions ensure the example is a complete, runnable Flutter project for mobile development.
_simple\_bloc\flutter · high confidence
Added scripts to manage and analyze Flutter projects
Two new shell scripts are introduced to support the Flutter-based samples. The update\_flutter.sh script automates the regeneration of Flutter project scaffolding by cleaning platform-specific directories, running 'fvm flutter create .', and removing default test files. The line\_counter.sh script counts non-comment, non-empty lines in Dart files across multiple sample directories to provide a code-size comparison of different architectural approaches.
scripts · high confidence
Extracted core repository interfaces and entities into a shared library
The repository abstraction layer has been moved into a new \todos\_repository\_core\ package, making the data layer interfaces and entities (such as \TodoEntity\, \UserEntity\, \TodosRepository\, and \ReactiveTodosRepository\) available for reuse across different app implementations. This change allows the domain layer to depend on these abstract classes, enabling apps to inject specific storage mechanisms (e.g., file, web, or Firebase) while keeping the core logic environment-agnostic.
_todos\_repository\core · high confidence
Initial release of the simple\_blocs package
The simple\_blocs package is now available as version 1.0.0. This release introduces a complete set of BLoC implementations for managing todo application state, including TodosListBloc, TodoBloc, StatsBloc, and UserBloc, along with the supporting TodosInteractor and domain models. The package includes a standard analysis configuration for consistent code quality and comprehensive test coverage for all blocs and the interactor.
_simple\blocs · high confidence
Introduce MVI architecture for the todo list application
Added the core MVI (Model-View-Intent) framework and domain logic for the todo list app. This includes the \mvi\_base\ library with models (\Todo\, \User\, \VisibilityFilter\), core MVI classes (\MviPresenter\, \MviView\), and interactors (\TodoListInteractor\, \UserInteractor\) that bridge the repository layer to the view. The change also introduces the \StatsPresenter\ for calculating active/completed counts, and provides a complete test suite for the presenters and interactors.
_mvi\base · high confidence
Introduce core utility libraries for the todos app
The \todos\_app\_core\ package now provides a set of shared utilities for the application, including a \Theme\ class with light and dark Material 3 themes, a \Uuid\ generator for unique IDs, an \Optional\ type for handling absent values, and localization support with English messages. These components are exported via the main library file, enabling other parts of the app to access these shared resources.
_todos\_app\core/lib · high confidence
Introduce local storage repository implementation for Flutter
Added a new \todos\_repository\_local\_storage\ module that provides concrete implementations for storing and retrieving todos. This includes a \FileStorage\ class for disk-based persistence, a \KeyValueStorage\ class for key-value based storage (using \shared\_preferences\), and a \ReactiveLocalStorageRepository\ that manages state changes via streams. The module also includes a \LocalStorageRepository\ that combines local and web client storage, and a \WebClient\ for simulating web service interactions. Comprehensive tests using Mockito are included to verify the behavior of these components.
_todos\_repository\_local\storage · high confidence
Redux sample app scaffolded with full platform configurations and state management
The Redux sample application has been fully scaffolded, providing a complete, runnable example of state management using the Redux pattern. This includes the core Dart implementation (actions, reducers, and containers), platform-specific configurations for Android (AndroidManifest, styles, Gradle), and iOS (Xcode project, Info.plist, launch screens), along with an integration test to verify the app's behavior. The app demonstrates how to manage a todo list's state through a central store, dispatching actions to update the UI via StoreConnector widgets.
redux · high confidence
Updated the inherited\_widget sample to support web and modernize platform configurations
The inherited\_widget sample has been updated to support the web platform, with new files added for iOS and Android to ensure the example builds and runs correctly on all supported targets. On the Dart side, the project now includes an integration test (app\_test.dart) that verifies the app's behavior, and the main entry point initializes shared preferences for local storage. Platform-specific configurations have been added or refreshed, including Android manifests, iOS project and workspace files, and Flutter-specific configuration files (e.g., .gitignore, .metadata, analysis\_options.yaml). These changes ensure the sample is consistent with the latest Flutter tooling and can be run on web, iOS, and Android.
_inherited\widget · high confidence
Removals
Removal of legacy MVC example files
The legacy 'flutter\_mvc' example implementation has been removed from the library. This includes the deletion of the main entry point (lib/flutter\_mvc.dart) and all associated source files in lib/src/, such as models, persistence, routes, strings, and theme definitions. This change eliminates the old MVC-based example from the public API.
lib/src · high confidence
Behavioural changes
Major update to the app specification and sample implementations
The app specification has been significantly expanded to include new features such as a Stats screen, Edit Todo screen, and advanced filtering, alongside stricter testing requirements. These changes are reflected in the updated README, which now lists the various architecture samples and their web demos, and the addition of a CONTRIBUTING.md file to guide future contributions.
(repo-wide) · high confidence
Regenerated the vanilla Flutter example with updated project structure
The vanilla example project has been regenerated, introducing updated native project files for Android and iOS, including new \.gitignore\ and \.metadata\ files, updated \AndroidManifest.xml\ configurations, and modernized Gradle wrapper scripts. The iOS project now includes updated Xcode workspace and scheme files, while the Dart side adds an \analysis\_options.yaml\ for stricter linting and an integration test file (\app\_test.dart\) that utilizes the \integration\_tests\ package to validate the app's state management.
vanilla · medium confidence
Removal of iOS native entry-point and configuration files
The iOS example project has had its native iOS source files (AppDelegate, main.m) and the .gitignore configuration removed. This indicates a shift in how the iOS platform is managed or built within this example, likely moving away from a custom native iOS implementation towards a more standardized or template-driven approach.
example/vanilla/ios · medium confidence
Removed obsolete Android boilerplate and legacy Flutter files from the vanilla example
The vanilla example has been cleaned up by removing outdated Android configuration files (android.iml, vanilla\_android.iml, .gitignore, and MainActivity.java) and the original main.dart entry point. This removes legacy setup code that is no longer needed for the example, simplifying the project structure.
example/vanilla · high confidence
Renamed and documented the core shared primitives module
The \todos\_app\_core\ module, which provides shared primitives such as routes, theme, and localizations for each implementation, has been renamed from \todos\_app\_base\ and is now located at \/todos\_app\_core\. A new \README.md\ has been added to document its purpose, and a \.flutter-plugins-dependencies\ file has been generated to track plugin dependencies.
_todos\_app\core · medium confidence
Updated Flutter project scaffolding and configuration files
The \scoped\_model\ example project has been updated with current Flutter template files, including \analysis\_options.yaml\ with strict linting rules, platform-specific configurations for Android and iOS, and integration test scaffolding. This ensures the example adheres to modern Dart/Flutter standards and supports testing on all platforms.
_scoped\model · high confidence
Test coverage
Added unit tests for BLoC components; Migrated integration tests to the new Flutter integration\_test framework.
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Score
- CAI 59 → 62 (+3.2)
- Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 100 → 95 (-5.3)
- Architecture 98 → 98 (-0.0)
- Maturity 57 → 61 (+4.1)
- Readiness 46 → 50 (+3.9)
- Security 85 → 92 (+7.1)
- Domain Modelling 100 → 100 (+0.0)
- Accessibility 68 → 68 (+0.0)
Resolved (15)
- Change coupling: extra_actions_element.dart ↔ filters_element.dart (integration_tests/lib/page_objects/elements/extra_actions_element.dart)
- Change coupling: extra_actions_element.dart ↔ stats_element.dart (integration_tests/lib/page_objects/elements/extra_actions_element.dart)
- Change coupling: extra_actions_element.dart ↔ todo_item_element.dart (integration_tests/lib/page_objects/elements/extra_actions_element.dart)
- Change coupling: stats_element.dart ↔ todo_item_element.dart (integration_tests/lib/page_objects/elements/stats_element.dart)
- Change coupling: test_element.dart ↔ add_test_screen.dart (integration_tests/lib/page_objects/elements/test_element.dart)
- Change coupling: test_element.dart ↔ details_test_screen.dart (integration_tests/lib/page_objects/elements/test_element.dart)
- Change coupling: test_element.dart ↔ edit_test_screen.dart (integration_tests/lib/page_objects/elements/test_element.dart)
- Change coupling: test_element.dart ↔ home_test_screen.dart (integration_tests/lib/page_objects/elements/test_element.dart)
- Coverage not included — suite not readable by the collector
- Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
- No exposed public API
- Off-boarding risk: anonymized user #1
- Test reliability not included
- The 'Updating App State' section describes how add() triggers mapEventToState and notifies the bloc, but it does not explain what happens when a new event arrives after an initial hydration (e.g. whether the stream is restarted or buffered). (bloc_library/README.md)
- complexity unreadable for .dart, .kt, .py, .swift — churn × complexity hotspots could not be measured
New (164)
- Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
- Documentation: no installation or build instructions
- Documentation: no installation or build instructions (bloc_flutter/README.md)
- Documentation: no installation or build instructions (bloc_library/README.md)
- Documentation: no project overview
- Documentation: no usage examples
- Documentation: no usage examples (bloc_flutter/README.md)
- Duplicated block (10 lines × 2) (inherited_widget/lib/screens/detail_screen.dart)
- Duplicated block (10 lines × 3) (bloc_flutter/lib/screens/add_edit_screen.dart)
- Duplicated block (10 lines × 4) (change_notifier_provider/lib/home/home_screen.dart)
- Duplicated block (10 lines × 4) (mvi_flutter/lib/widgets/todo_list.dart)
- Duplicated block (10–11 lines × 5) (bloc_flutter/lib/screens/home_screen.dart)
- Duplicated block (11 lines × 2) (inherited_widget/lib/widgets/todo_list.dart)
- Duplicated block (11 lines × 2) (mvi_flutter/lib/widgets/todo_list.dart)
- Duplicated block (11 lines × 2) (redux/lib/presentation/todo_list.dart)
- Duplicated block (11 lines × 3) (bloc_library/lib/screens/add_edit_screen.dart)
- Duplicated block (11 lines × 3) (bloc_library/lib/screens/add_edit_screen.dart)
- Duplicated block (11 lines × 3) (change_notifier_provider/lib/home/home_screen.dart)
- Duplicated block (11 lines × 4) (change_notifier_provider/lib/edit_todo_screen.dart)
- Duplicated block (11 lines × 7) (bloc_flutter/lib/widgets/stats_counter.dart)
- …and 144 more
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
brianegan/flutter_architecture_samples was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 23 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit d898d1329e04e5b5fbdef1285b39ef975a6b8efa — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-955b9cee9818.