This template is a single codebase with fixed architectural ideas and replaceable implementations behind contracts and adapters.
Use what ships in the repo:
- State + DI: Riverpod
- Routing: GoRouter
- HTTP: Dio behind
INetworkClient(ApiClientcompatibility layer) - Storage:
IKeyValueStore/ITokenStorewith secure + shared prefs adapters - Sample features:
auth, optionaltasksandfeature_flagsmodules as references
Follow Getting started, then add features under lib/features/<name>/ using the same layer layout.
Keep domain (entities, repository interfaces, use cases) and contracts in lib/core/contracts/. Replace or wrap vendor code in adapters and rebind providers in the composition root (lib/core/di/providers.dart, feature *_providers.dart, lib/main.dart).
Do not import Flutter widgets, Dio, GoRouter, or Riverpod from domain/. If a use case needs a port, express it as an interface in domain or use an existing core contract.
| Topic | Document |
|---|---|
| Contract locations and adapters | contracts-map.md |
| All capabilities in one place | super-starter-hub.md |
| Architectural decisions | adr/README.md |
| Incremental migration | migrations/README.md |
| Risks and verification | migrations/quality-gates-and-risks.md |
| Fork, rename, optional strip | Fork and customize |
This repository does not maintain parallel starters (e.g. duplicate apps for BLoC vs Riverpod). That avoids doc and code drift. Path B means you supply the adapter and provider bindings while keeping the same layer boundaries.