Setting Up Type-Safe Asset Generation
What you'll learn
- Generating the asset-gen command for your monorepo toolkit
- Auto-generating type-safe Dart enums from asset directories
- Eliminating string-based asset references
- Running asset generation in CI
Prerequisites
- An existing Archipelago monorepo (see Monorepo Scaffolding)
- A monorepo_toolkit already generated at
devtools/ - An asset package (see Flutter Asset Package)
Step 1: Generate the Asset Generator Command
bash
archipelago generate asset_generatorYou will be prompted for:
- appName —
MyApp(must match your monorepo app name) - isForMonorepo —
true
Or use a config file:
json
{
"appName": "MyApp",
"isForMonorepo": true
}bash
archipelago generate asset_generator --config asset_gen_config.jsonStep 2: Understand the Generated Structure
The brick adds the asset-gen command to your monorepo toolkit:
devtools/
└── lib/src/
└── commands/
└── asset_gen/
├── asset_gen_command.dart # CLI entry point
├── asset_scanner.dart # Directory scanner
├── enum_generator.dart # Dart enum code generator
└── asset_type_resolver.dart # File type classificationStep 3: Generate Asset Enums
After adding assets to your asset package, run:
bash
dart run devtools asset-genThis scans your asset directories and generates type-safe enums:
dart
// Generated: packages/my_app_assets/lib/src/generated/svg_assets.dart
enum SvgAsset {
icHome('packages/my_app_assets/assets/svg/ic_home.svg'),
icProfile('packages/my_app_assets/assets/svg/ic_profile.svg'),
icSettings('packages/my_app_assets/assets/svg/ic_settings.svg');
const SvgAsset(this.path);
final String path;
}Step 4: Use Generated Enums
Reference assets with compile-time safety instead of raw strings:
dart
// Before (error-prone)
SvgPicture.asset('assets/svg/ic_home.svg');
// After (type-safe)
SvgPicture.asset(SvgAsset.icHome.path);Key Customization Points
| Customization | Where to Change |
|---|---|
| Supported asset types | asset_type_resolver.dart — add new file extensions |
| Enum naming convention | enum_generator.dart — adjust camelCase conversion |
| Scan directories | asset_gen_command.dart — configure which dirs to scan |
| Output location | asset_gen_command.dart — change generated file path |
Next Steps
- Generate an asset package to hold your assets
- Optimize assets before generating enums