diff --git a/example/lib/gen/assets.gen.dart b/example/lib/gen/assets.gen.dart index 7d9b07c5..8da72ec5 100644 --- a/example/lib/gen/assets.gen.dart +++ b/example/lib/gen/assets.gen.dart @@ -19,6 +19,9 @@ class $AssetsFlareGen { /// File path: assets/flare/Penguin.flr FlareGenImage get penguin => const FlareGenImage('assets/flare/Penguin.flr'); + + /// List of all assets + List get values => [penguin]; } class $AssetsImagesGen { @@ -43,6 +46,10 @@ class $AssetsImagesGen { /// File path: assets/images/profile.png AssetGenImage get profilePng => const AssetGenImage('assets/images/profile.png'); + + /// List of all assets + List get values => + [chip1, chip2, logo, profileJpg, profilePng]; } class $AssetsJsonGen { @@ -50,6 +57,9 @@ class $AssetsJsonGen { /// File path: assets/json/fruits.json String get fruits => 'assets/json/fruits.json'; + + /// List of all assets + List get values => [fruits]; } class $AssetsMovieGen { @@ -57,6 +67,9 @@ class $AssetsMovieGen { /// File path: assets/movie/the_earth.mp4 String get theEarth => 'assets/movie/the_earth.mp4'; + + /// List of all assets + List get values => [theEarth]; } class $AssetsRiveGen { @@ -64,6 +77,9 @@ class $AssetsRiveGen { /// File path: assets/rive/vehicles.riv RiveGenImage get vehicles => const RiveGenImage('assets/rive/vehicles.riv'); + + /// List of all assets + List get values => [vehicles]; } class $AssetsUnknownGen { @@ -77,6 +93,9 @@ class $AssetsUnknownGen { /// File path: assets/unknown/unknown_mime_type.bk String get unknownMimeType => 'assets/unknown/unknown_mime_type.bk'; + + /// List of all assets + List get values => [changelog, readme, unknownMimeType]; } class $AssetsImagesChip4Gen { @@ -85,6 +104,9 @@ class $AssetsImagesChip4Gen { /// File path: assets/images/chip4/chip4.jpg AssetGenImage get chip4 => const AssetGenImage('assets/images/chip4/chip4.jpg'); + + /// List of all assets + List get values => [chip4]; } class $AssetsImagesIconsGen { @@ -103,6 +125,9 @@ class $AssetsImagesIconsGen { /// File path: assets/images/icons/paint.svg SvgGenImage get paint => const SvgGenImage('assets/images/icons/paint.svg'); + + /// List of all assets + List get values => [dartTest, fuchsia, kmm, paint]; } class MyAssets { diff --git a/packages/core/lib/generators/assets_generator.dart b/packages/core/lib/generators/assets_generator.dart index aff8c2d6..933c8192 100644 --- a/packages/core/lib/generators/assets_generator.dart +++ b/packages/core/lib/generators/assets_generator.dart @@ -167,6 +167,7 @@ _Statement? _createAssetTypeStatement( name: name, value: 'AssetGenImage(\'${posixStyle(assetType.path)}\')', isConstConstructor: true, + isDirectory: false, needDartDoc: true, ); } else if (FileSystemEntity.isDirectorySync(childAssetAbsolutePath)) { @@ -177,6 +178,7 @@ _Statement? _createAssetTypeStatement( name: name, value: '$childClassName()', isConstConstructor: true, + isDirectory: true, needDartDoc: false, ); } else if (!assetType.isIgnoreFile) { @@ -190,6 +192,7 @@ _Statement? _createAssetTypeStatement( name: name, value: '\'${posixStyle(assetType.path)}\'', isConstConstructor: false, + isDirectory: false, needDartDoc: true, ); } else { @@ -200,6 +203,7 @@ _Statement? _createAssetTypeStatement( name: name, value: integration.classInstantiate(posixStyle(assetType.path)), isConstConstructor: integration.isConstConstructor, + isDirectory: false, needDartDoc: true, ); } @@ -259,6 +263,7 @@ String _dotDelimiterStyleDefinition( name: assetType.baseName.camelCase(), value: '$className()', isConstConstructor: true, + isDirectory: true, needDartDoc: true, )); } @@ -340,7 +345,7 @@ String _flatStyleAssetsClassDefinition( statements.map((statement) => '''${statement.toDartDocString()} ${statement.toStaticFieldString()} ''').join('\n'); - return _assetsClassDefinition(className, statementsBlock); + return _assetsClassDefinition(className, statements, statementsBlock); } String _dotDelimiterStyleAssetsClassDefinition( @@ -349,15 +354,38 @@ String _dotDelimiterStyleAssetsClassDefinition( ) { final statementsBlock = statements.map((statement) => statement.toStaticFieldString()).join('\n'); - return _assetsClassDefinition(className, statementsBlock); + return _assetsClassDefinition(className, statements, statementsBlock); } -String _assetsClassDefinition(String className, String statementsBlock) { +String _assetValuesDefinition(List<_Statement> statements) { + final values = statements.where((element) => !element.isDirectory); + if (values.isEmpty) return ''; + final names = values.map((value) => value.name).join(', '); + var type = values.first.type; + for (var value in values) { + if (type != value.type) { + type = 'dynamic'; + break; + } + } + + return ''' + /// List of all assets + List<$type> get values => [$names];'''; +} + +String _assetsClassDefinition( + String className, + List<_Statement> statements, + String statementsBlock, +) { + final valuesBlock = _assetValuesDefinition(statements); return ''' class $className { $className._(); $statementsBlock + $valuesBlock } '''; } @@ -373,11 +401,14 @@ String _directoryClassGenDefinition( ''' : statement.toGetterString()) .join('\n'); + final valuesBlock = _assetValuesDefinition(statements); + return ''' class $className { const $className(); $statementsBlock + $valuesBlock } '''; } @@ -463,6 +494,7 @@ class _Statement { required this.name, required this.value, required this.isConstConstructor, + required this.isDirectory, required this.needDartDoc, }); @@ -471,6 +503,7 @@ class _Statement { final String name; final String value; final bool isConstConstructor; + final bool isDirectory; final bool needDartDoc; String toDartDocString() => '/// File path: ${posixStyle(filePath)}'; diff --git a/packages/core/test_resources/actual_data/assets.gen.dart b/packages/core/test_resources/actual_data/assets.gen.dart index 19104536..48ee5e83 100644 --- a/packages/core/test_resources/actual_data/assets.gen.dart +++ b/packages/core/test_resources/actual_data/assets.gen.dart @@ -18,6 +18,9 @@ class $PicturesGen { /// File path: pictures/chip5.jpg AssetGenImage get chip5 => const AssetGenImage('pictures/chip5.jpg'); + + /// List of all assets + List get values => [chip5]; } class $AssetsFlareGen { @@ -25,6 +28,9 @@ class $AssetsFlareGen { /// File path: assets/flare/Penguin.flr FlareGenImage get penguin => const FlareGenImage('assets/flare/Penguin.flr'); + + /// List of all assets + List get values => [penguin]; } class $AssetsImagesGen { @@ -50,6 +56,10 @@ class $AssetsImagesGen { /// File path: assets/images/profile.png AssetGenImage get profilePng => const AssetGenImage('assets/images/profile.png'); + + /// List of all assets + List get values => + [chip1, chip2, logo, profileJpg, profilePng]; } class $AssetsJsonGen { @@ -57,6 +67,9 @@ class $AssetsJsonGen { /// File path: assets/json/fruits.json String get fruits => 'assets/json/fruits.json'; + + /// List of all assets + List get values => [fruits]; } class $AssetsMovieGen { @@ -64,6 +77,9 @@ class $AssetsMovieGen { /// File path: assets/movie/the_earth.mp4 String get theEarth => 'assets/movie/the_earth.mp4'; + + /// List of all assets + List get values => [theEarth]; } class $AssetsUnknownGen { @@ -71,6 +87,9 @@ class $AssetsUnknownGen { /// File path: assets/unknown/unknown_mime_type.bk String get unknownMimeType => 'assets/unknown/unknown_mime_type.bk'; + + /// List of all assets + List get values => [unknownMimeType]; } class $AssetsImagesChip3Gen { @@ -79,6 +98,9 @@ class $AssetsImagesChip3Gen { /// File path: assets/images/chip3/chip3.jpg AssetGenImage get chip3 => const AssetGenImage('assets/images/chip3/chip3.jpg'); + + /// List of all assets + List get values => [chip3]; } class $AssetsImagesChip4Gen { @@ -87,6 +109,9 @@ class $AssetsImagesChip4Gen { /// File path: assets/images/chip4/chip4.jpg AssetGenImage get chip4 => const AssetGenImage('assets/images/chip4/chip4.jpg'); + + /// List of all assets + List get values => [chip4]; } class $AssetsImagesIconsGen { @@ -105,6 +130,9 @@ class $AssetsImagesIconsGen { /// File path: assets/images/icons/paint.svg SvgGenImage get paint => const SvgGenImage('assets/images/icons/paint.svg'); + + /// List of all assets + List get values => [dartTest, fuchsia, kmm, paint]; } class Assets { diff --git a/packages/core/test_resources/actual_data/assets_camel_case.gen.dart b/packages/core/test_resources/actual_data/assets_camel_case.gen.dart index ba0ababb..b7e30a92 100644 --- a/packages/core/test_resources/actual_data/assets_camel_case.gen.dart +++ b/packages/core/test_resources/actual_data/assets_camel_case.gen.dart @@ -58,6 +58,23 @@ class Assets { /// File path: pictures/chip5.jpg static const AssetGenImage picturesChip5 = AssetGenImage('pictures/chip5.jpg'); + + /// List of all assets + List get values => [ + imagesChip1, + imagesChip2, + imagesChip3Chip3, + imagesChip4Chip4, + imagesIconsDartTest, + imagesIconsFuchsia, + imagesIconsKmm, + imagesIconsPaint, + imagesLogo, + imagesProfileJpg, + imagesProfilePng, + jsonFruits, + picturesChip5 + ]; } class AssetGenImage { diff --git a/packages/core/test_resources/actual_data/assets_change_class_name.gen.dart b/packages/core/test_resources/actual_data/assets_change_class_name.gen.dart index f8f1b01a..850a4664 100644 --- a/packages/core/test_resources/actual_data/assets_change_class_name.gen.dart +++ b/packages/core/test_resources/actual_data/assets_change_class_name.gen.dart @@ -28,6 +28,10 @@ class $AssetsImagesGen { /// File path: assets/images/profile.png AssetGenImage get profilePng => const AssetGenImage('assets/images/profile.png'); + + /// List of all assets + List get values => + [chip1, chip2, logo, profileJpg, profilePng]; } class MyAssets { diff --git a/packages/core/test_resources/actual_data/assets_flare_integrations.gen.dart b/packages/core/test_resources/actual_data/assets_flare_integrations.gen.dart index efc2f067..8758121f 100644 --- a/packages/core/test_resources/actual_data/assets_flare_integrations.gen.dart +++ b/packages/core/test_resources/actual_data/assets_flare_integrations.gen.dart @@ -16,6 +16,9 @@ class $AssetsFlareGen { /// File path: assets/flare/Penguin.flr FlareGenImage get penguin => const FlareGenImage('assets/flare/Penguin.flr'); + + /// List of all assets + List get values => [penguin]; } class Assets { diff --git a/packages/core/test_resources/actual_data/assets_no_integrations.gen.dart b/packages/core/test_resources/actual_data/assets_no_integrations.gen.dart index 223347a2..6873d722 100644 --- a/packages/core/test_resources/actual_data/assets_no_integrations.gen.dart +++ b/packages/core/test_resources/actual_data/assets_no_integrations.gen.dart @@ -14,6 +14,9 @@ class $PicturesGen { /// File path: pictures/chip5.jpg AssetGenImage get chip5 => const AssetGenImage('pictures/chip5.jpg'); + + /// List of all assets + List get values => [chip5]; } class $AssetsImagesGen { @@ -39,6 +42,10 @@ class $AssetsImagesGen { /// File path: assets/images/profile.png AssetGenImage get profilePng => const AssetGenImage('assets/images/profile.png'); + + /// List of all assets + List get values => + [chip1, chip2, logo, profileJpg, profilePng]; } class $AssetsJsonGen { @@ -46,6 +53,9 @@ class $AssetsJsonGen { /// File path: assets/json/fruits.json String get fruits => 'assets/json/fruits.json'; + + /// List of all assets + List get values => [fruits]; } class $AssetsImagesChip3Gen { @@ -54,6 +64,9 @@ class $AssetsImagesChip3Gen { /// File path: assets/images/chip3/chip3.jpg AssetGenImage get chip3 => const AssetGenImage('assets/images/chip3/chip3.jpg'); + + /// List of all assets + List get values => [chip3]; } class $AssetsImagesChip4Gen { @@ -62,6 +75,9 @@ class $AssetsImagesChip4Gen { /// File path: assets/images/chip4/chip4.jpg AssetGenImage get chip4 => const AssetGenImage('assets/images/chip4/chip4.jpg'); + + /// List of all assets + List get values => [chip4]; } class $AssetsImagesIconsGen { @@ -78,6 +94,9 @@ class $AssetsImagesIconsGen { /// File path: assets/images/icons/paint.svg String get paint => 'assets/images/icons/paint.svg'; + + /// List of all assets + List get values => [dartTest, fuchsia, kmm, paint]; } class Assets { diff --git a/packages/core/test_resources/actual_data/assets_package_exclude_files.gen.dart b/packages/core/test_resources/actual_data/assets_package_exclude_files.gen.dart index ae41764c..e4abf974 100644 --- a/packages/core/test_resources/actual_data/assets_package_exclude_files.gen.dart +++ b/packages/core/test_resources/actual_data/assets_package_exclude_files.gen.dart @@ -14,6 +14,9 @@ class $PicturesGen { /// File path: pictures/chip5.jpg AssetGenImage get chip5 => const AssetGenImage('pictures/chip5.jpg'); + + /// List of all assets + List get values => [chip5]; } class $AssetsImagesGen { @@ -29,6 +32,9 @@ class $AssetsImagesGen { /// File path: assets/images/profile.jpg AssetGenImage get profile => const AssetGenImage('assets/images/profile.jpg'); + + /// List of all assets + List get values => [chip1, chip2, profile]; } class $AssetsJsonGen { @@ -36,6 +42,9 @@ class $AssetsJsonGen { /// File path: assets/json/fruits.json String get fruits => 'assets/json/fruits.json'; + + /// List of all assets + List get values => [fruits]; } class $AssetsImagesChip4Gen { @@ -44,6 +53,9 @@ class $AssetsImagesChip4Gen { /// File path: assets/images/chip4/chip4.jpg AssetGenImage get chip4 => const AssetGenImage('assets/images/chip4/chip4.jpg'); + + /// List of all assets + List get values => [chip4]; } class Assets { diff --git a/packages/core/test_resources/actual_data/assets_package_parameter.gen.dart b/packages/core/test_resources/actual_data/assets_package_parameter.gen.dart index 5d86a8f2..907fc584 100644 --- a/packages/core/test_resources/actual_data/assets_package_parameter.gen.dart +++ b/packages/core/test_resources/actual_data/assets_package_parameter.gen.dart @@ -24,6 +24,9 @@ class $AssetsImagesChip3Gen { /// File path: assets/images/chip3/chip3.jpg AssetGenImage get chip3 => const AssetGenImage('assets/images/chip3/chip3.jpg'); + + /// List of all assets + List get values => [chip3]; } class $AssetsImagesIconsGen { @@ -36,6 +39,9 @@ class $AssetsImagesIconsGen { /// File path: assets/images/icons/fuchsia.svg SvgGenImage get fuchsia => const SvgGenImage('assets/images/icons/fuchsia.svg'); + + /// List of all assets + List get values => [dartTest, fuchsia]; } class Assets { diff --git a/packages/core/test_resources/actual_data/assets_rive_integrations.gen.dart b/packages/core/test_resources/actual_data/assets_rive_integrations.gen.dart index 2a6cf65c..e167c04d 100644 --- a/packages/core/test_resources/actual_data/assets_rive_integrations.gen.dart +++ b/packages/core/test_resources/actual_data/assets_rive_integrations.gen.dart @@ -15,6 +15,9 @@ class $AssetsRiveGen { /// File path: assets/rive/vehicles.riv RiveGenImage get vehicles => const RiveGenImage('assets/rive/vehicles.riv'); + + /// List of all assets + List get values => [vehicles]; } class Assets { diff --git a/packages/core/test_resources/actual_data/assets_snake_case.gen.dart b/packages/core/test_resources/actual_data/assets_snake_case.gen.dart index 9b4b0b3e..eeb7b5ea 100644 --- a/packages/core/test_resources/actual_data/assets_snake_case.gen.dart +++ b/packages/core/test_resources/actual_data/assets_snake_case.gen.dart @@ -59,6 +59,23 @@ class Assets { /// File path: pictures/chip5.jpg static const AssetGenImage pictures_chip5 = AssetGenImage('pictures/chip5.jpg'); + + /// List of all assets + List get values => [ + images_chip1, + images_chip2, + images_chip3_chip3, + images_chip4_chip4, + images_icons_dart_test, + images_icons_fuchsia, + images_icons_kmm, + images_icons_paint, + images_logo, + images_profile_jpg, + images_profile_png, + json_fruits, + pictures_chip5 + ]; } class AssetGenImage { diff --git a/packages/core/test_resources/actual_data/assets_svg_integrations.gen.dart b/packages/core/test_resources/actual_data/assets_svg_integrations.gen.dart index 9c4981e4..49bdc536 100644 --- a/packages/core/test_resources/actual_data/assets_svg_integrations.gen.dart +++ b/packages/core/test_resources/actual_data/assets_svg_integrations.gen.dart @@ -27,6 +27,9 @@ class $AssetsImagesIconsGen { /// File path: assets/images/icons/fuchsia.svg SvgGenImage get fuchsia => const SvgGenImage('assets/images/icons/fuchsia.svg'); + + /// List of all assets + List get values => [dartTest, fuchsia]; } class Assets { diff --git a/packages/core/test_resources/actual_data/assets_unknown_mime_type.gen.dart b/packages/core/test_resources/actual_data/assets_unknown_mime_type.gen.dart index 013ef6aa..c7de995a 100644 --- a/packages/core/test_resources/actual_data/assets_unknown_mime_type.gen.dart +++ b/packages/core/test_resources/actual_data/assets_unknown_mime_type.gen.dart @@ -14,6 +14,9 @@ class $AssetsUnknownGen { /// File path: assets/unknown/unknown_mime_type.bk String get unknownMimeType => 'assets/unknown/unknown_mime_type.bk'; + + /// List of all assets + List get values => [unknownMimeType]; } class Assets {