Skip to content

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

Step 1: Generate the Asset Generator Command

bash
archipelago generate asset_generator

You will be prompted for:

  • appNameMyApp (must match your monorepo app name)
  • isForMonorepotrue

Or use a config file:

json
{
  "appName": "MyApp",
  "isForMonorepo": true
}
bash
archipelago generate asset_generator --config asset_gen_config.json

Step 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 classification

Step 3: Generate Asset Enums

After adding assets to your asset package, run:

bash
dart run devtools asset-gen

This 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

CustomizationWhere to Change
Supported asset typesasset_type_resolver.dart — add new file extensions
Enum naming conventionenum_generator.dart — adjust camelCase conversion
Scan directoriesasset_gen_command.dart — configure which dirs to scan
Output locationasset_gen_command.dart — change generated file path

Next Steps

Built by Banua Coder