Skip to content
CAI
Software that uses CAICheck a score

brianegan/flutter_architecture_samples

61.8

Adequate · 23 September 2026

13.3k

lines of production code

Dart

with C++, C

5

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

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.