Skip to content
CAI
Software that uses CAICheck a score

adryanev/flutter-mobile-clean-architecture-template

69.7

Adequate · 21 September 2026

706

lines of production code

Dart

primary language

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a Flutter-based mobile and web application scaffolded with a clean architecture, utilizing GoRouter for navigation and BLoC/Cubit for state management. It provides foundational utilities for form validation, dependency injection, and internationalization across English and Indonesian locales. The project explicitly supports Android, iOS, and web platforms, while having removed Windows desktop and default web entry points.

Features

Added shared domain entities and form validation inputs

New shared domain entities (UniqueId, StringSingleLine) and Formz-based input validators (EmailInput, PasswordInput, PasswordConfirmationInput) have been added to the shared library. These components provide standardized validation logic and state management for common form fields, enabling consistent user input handling across the application.

lib/shared · high confidence

Introduces core domain, presentation, and utility foundations

Adds the foundational architecture for the application, including domain entities like ValueObject and use cases, along with failure handling via a sealed Failure class and specific error types. The update also introduces a dependency injection setup with AppModule and StorageModule, utility classes for colors, dimensions, and constants, and extension methods for Flutter's BuildContext to display flash messages and snackbars.

lib/core · high confidence

Architecture

Restructures Counter feature into Clean Architecture layers

The Counter feature has been reorganized to follow a clean architecture pattern, moving presentation logic into dedicated directories (presentation/blocs, presentation/pages) and establishing empty placeholder files for data, domain, and repository layers. The CounterCubit now uses dependency injection via @injectable, and the CounterPage widget has been updated to use context extensions and a failure message handler mixin, reflecting a shift in how the feature is structured and accessed.

lib/features/counter · high confidence

Behavioural changes

Add environment-based dependency injection initialization

The application now initializes dependency injection via the \get\_it\ and \injectable\ packages before running the app. The \bootstrap\ function in \lib/bootstrap.dart\ has been updated to accept an \environment\ parameter, which is passed to \configureDependencies\ from the new \lib/injector.dart\. Each entry point (\main\_development.dart\, \main\_production.dart\, \main\_staging.dart\) now passes its specific environment constant (e.g., \Environment.development\) to the bootstrap process, enabling environment-specific dependency configuration.

lib · high confidence

Added font assets and license documentation

The application now includes the Poppins font files and their associated SIL Open Font License (OFL) text in the assets directory, alongside placeholder files for icons and images.

assets · medium confidence

Migrate app shell to GoRouter and add FlashCubit integration

The app shell has been refactored to use GoRouter for navigation, replacing the previous setup where the home screen was defined directly on the MaterialApp. The main App widget now wraps the UI in MultiBlocProvider and MultiBlocListener to handle FlashCubit state changes, which trigger snackbar notifications. Additionally, the theme now uses Material 3, applies the Poppins font family, and enforces no text scaling.

lib/app · medium confidence

Removal of default web application entry point and manifest

The default web entry point (index.html) and the associated PWA manifest (manifest.json) have been removed from the web directory. This change eliminates the standard web build output files, indicating a shift away from the default web template configuration.

web · medium confidence

Removed Windows desktop platform support

The Windows desktop platform has been removed from the project. All Windows-specific build files (CMakeLists.txt, .rc, .cpp, .h, and manifest files) and the associated .gitignore have been deleted. As a result, the application can no longer be built or run on Windows desktop environments.

windows · high confidence

Updated Android Gradle wrapper to version 8.14

The Android build system has been updated to use Gradle 8.14 (previously 7.4). This change affects how the Android module is built and may require updates to build scripts or plugins to ensure compatibility with the newer Gradle version.

android · high confidence

Updated Flutter project template with new tooling and configuration files

The project template has been updated to include a Makefile with build, test, and analysis commands for Android, iOS, and web flavors, alongside configuration files for the Flutter Version Manager (.fvmrc), build runner (build.yaml), native splash screen (flutter\_native\_splash.yaml), and localization (l10n.yaml). The analysis options have been upgraded to use very\_good\_analysis 5.1.0, and the .gitignore has been expanded to exclude generated files for Android, iOS, Windows, and Linux platforms.

(repo-wide) · high confidence

Updated localization files and generated code for English and Indonesian

The application's internationalization (i18n) setup has been updated to support English and Indonesian. New translation keys for email validation, password validation, and password confirmation have been added to the English locale, while the Indonesian locale provides corresponding translations. The generated Dart code in lib/l10n/generated/ has been regenerated to include these new strings, and the main l10n module now exports the updated localizations. The Spanish localization file has been removed.

lib/l10n · medium confidence

iOS app lifecycle and scene management updated for modern iOS

The iOS project has been updated to support modern iOS scene management. A new SceneDelegate has been added to handle scene lifecycle events, and the Info.plist has been updated with the necessary UIApplicationSceneManifest configuration to register the scene delegate. Additionally, the app delegate now implements the FlutterImplicitEngineDelegate protocol to manage plugin registration for the implicit engine, and the Xcode project has been upgraded to support Swift Package Manager for Flutter plugins.

ios · high confidence

Test coverage

Added comprehensive test coverage for core domain entities, failures, and shared formz components

Added new test files for ValueObject, value validators, and various failure classes (UnexpectedValueError, Failure, ValueFailure) to verify their behavior and properties. Added tests for use cases (UseCase, StreamUseCase) and context extensions (displayFlash, dartz extensions). Added tests for shared domain entities (StringSingleLine, UniqueId) and Formz input components (EmailInput, PasswordInput, PasswordConfirmationInput). Updated existing tests for CounterCubit and CounterPage to reflect new import paths and structure. Added a fixture reader helper and updated the app test to use a router-based pump method.

test · high confidence

Dependencies

Update Flutter project configuration and dependencies

The project's build configuration has been modernized to use the new Android Gradle plugin (AGP) 8.11.1 and Kotlin 2.2.20, replacing the legacy \apply plugin\ syntax with the declarative \plugins\ block. The Android build is updated to use Java 17 and the \dev.flutter.flutter-gradle-plugin\. Additionally, the \pubspec.yaml\ has been updated to support Dart SDK 3.11.0+, and numerous dependencies (including \go\_router\, \bloc\, \mocktail\, and \freezed\) have been upgraded to their latest compatible versions.

(dependencies) · high confidence

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

This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.

Score

  • CAI 69 → 70 (+0.3)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 100 → 100 (+0.0)
  • Architecture 100 → 100 (+0.0)
  • Maturity 63 → 63 (-0.5)
  • Readiness 65 → 62 (-2.9)
  • Security 67 → 77 (+10.2)
  • Domain Modelling 100 → 100 (+0.0)

Resolved (12)

  • Coverage not included — suite not readable by the collector
  • Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • No exposed public API
  • PR-triggered workflow without a permissions block
  • Test reliability not included
  • The Launch Screen Assets README is thin and only describes how to replace images in the xcassets directory. (ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md)
  • complexity unreadable for .dart, .kt, .swift — churn × complexity hotspots could not be measured
  • early-stage repository — too few commits for a meaningful bus factor
  • early-stage repository — too little history to judge knowledge freshness

New (11)

  • Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
  • Documentation: no architecture or design documentation (README.md)
  • Documentation: no usage examples (README.md)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • Workflow token grant is wider than its jobs use
  • Workflow token permissions not restricted

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

adryanev/flutter-mobile-clean-architecture-template 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 21 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 6818951dcf8149a43748d5c35d89d3f2c6933edd — 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-fa71c66cabd8.