Feature SDKs (Free)
introduction_sdk Free
- Tier
- Freeversion 2.0.4
- Command
archipelago generate introduction_sdk- Generates
features/introduction
Introduction/onboarding feature with welcome, feature highlights, and get started pages.
What it is
A simple, UI-only onboarding flow (welcome → features → get-started) shown on first app launch, claiming the initial route ahead of other features via InitialPathClaim. Use it when a project needs a first-run walkthrough before landing on auth/home.
Unlike most feature bricks, introduction_sdk generates a single flat package — there is no _api/_impl split, because nothing else in the app needs to depend on its contract independently of its implementation.
Variables
| Variable | Type | Default | Description |
|---|---|---|---|
| appName | string | MyApp | The name of your application |
| prefix | string | App | Prefix for generated UI component class names |
| uiKitPackageName | string | app_ui_kit | Name of the UI kit package |
| isForMonorepo | boolean | true | Whether this will be part of a monorepo structure |
Usage
Interactive
archipelago generate introduction_sdkNon-interactive (CI)
archipelago generate introduction_sdk --config my_config.jsonGenerated Structure
features/
└── introduction/
├── README.md
├── build.yaml
├── lib/
│ ├── introduction.dart
│ └── src/
│ ├── introduction_sdk.dart # IntroductionSDK + IntroductionSDKImpl
│ ├── di/
│ │ └── introduction_global_module.dart
│ ├── presentation/
│ │ ├── introduction_shell_page.dart
│ │ ├── welcome_page.dart
│ │ ├── features_page.dart
│ │ └── get_started_page.dart
│ └── router/
│ └── introduction_router.dart
└── pubspec.yamlPublic API
abstract interface class IntroductionSDK() {
bool get isCompleted;
Future<void> launch(BuildContext context);
void markIntroductionCompleted();
void skipIntroduction(); // convenience — calls markIntroductionCompleted()
}final completed = getIt<IntroductionSDK>().isCompleted;
await getIt<IntroductionSDK>().launch(context); // replaceAll to the introduction shellIntroductionManifest declares the routes and claims /introduction via InitialPathClaim(priority: 10, resolve: () => isCompleted() ? null : '/introduction'). Priority 10 is checked first, so onboarding wins until it is completed.
DI and wiring
IntroductionGlobalModuleregistersIntroductionManifestwithFeatureSDKRegistryandIntroductionSDKas a lazy singleton. The manifest's claim readsisCompletedthrough a provider closure, so the SDK is built when the router resolves the initial path, not when the manifest is registered.post_gen.dartaddsfeatures/introductionto the Dart workspace, adds a path dependency to the host app'spubspec.yaml, and registersIntroductionGlobalModuleintolib/di/injector.dartviaServiceLocatorUpdater. It records the brick as installed inarchipelago.yaml.
Limitations
- Completion state is not persisted.
IntroductionSDKImpl._hasCompletedis an in-memoryboolonly —initialize()andmarkIntroductionCompleted()both carry// TODO(user):comments to load/save it via a preferences service that the brick does not generate. As shipped, a user who completes onboarding sees it again on every cold start. Wire persistence yourself (e.g. throughstorage_sdk) before shipping. - Hard dependencies on
auth_sdkandhome_sdk, not self-generated.pubspec.yamldeclaresauth_api(../auth/auth_api) andhome_api(../home/home_api) path dependencies;WelcomePage/GetStartedPagecallAuthSDK.requireAuthentication()andHomeSDK.goToHome().pre_gendoes not runSubBrickGeneratorfor them, so standalone generation without those bricks yields an unresolvable workspace.flutter_modular_monorepoavoids this by expandingstarterFeaturesto its dependency closure.
Changelog
Run archipelago brick info introduction_sdk to see the latest published version. Enterprise customers can read the full CHANGELOG.md in the brick source repository.