From 7acd9b1b2a39b46b834c7cae8f1762c17799e4f6 Mon Sep 17 00:00:00 2001 From: Ian Maciel Date: Wed, 31 Jul 2024 10:30:11 -0300 Subject: [PATCH 1/6] Add support for Flutter deferred components --- .../core/lib/generators/assets_generator.dart | 13 +++++++++++- packages/core/lib/settings/pubspec.dart | 20 +++++++++++++++++++ packages/core/lib/settings/pubspec.g.dart | 6 ++++++ 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/packages/core/lib/generators/assets_generator.dart b/packages/core/lib/generators/assets_generator.dart index 022fab2b..67220523 100644 --- a/packages/core/lib/generators/assets_generator.dart +++ b/packages/core/lib/generators/assets_generator.dart @@ -34,7 +34,7 @@ class AssetsGenConfig { pubspecFile.parent.absolute.path, config.pubspec.packageName, config.pubspec.flutterGen, - config.pubspec.flutter.assets, + _buildAssetsList(config), config.pubspec.flutterGen.assets.exclude.map(Glob.new).toList(), ); } @@ -49,6 +49,17 @@ class AssetsGenConfig { flutterGen.assets.outputs.packageParameterEnabled ? _packageName : ''; } +List _buildAssetsList(Config config) { + final List deferredAssets = []; + config.pubspec.flutter.deferredComponents?.forEach((deferredComponent) { + // Include all manipulated assets to the list of deferred assets. + deferredAssets.addAll(deferredComponent.assets ?? []); + }); + + // Merge the deferred assets with the main assets. + return [...config.pubspec.flutter.assets, ...deferredAssets]; +} + Future generateAssets( AssetsGenConfig config, DartFormatter formatter, diff --git a/packages/core/lib/settings/pubspec.dart b/packages/core/lib/settings/pubspec.dart index 6f8b9649..75aad5ff 100644 --- a/packages/core/lib/settings/pubspec.dart +++ b/packages/core/lib/settings/pubspec.dart @@ -29,6 +29,7 @@ class Flutter { Flutter({ required this.assets, required this.fonts, + required this.deferredComponents, }); @JsonKey(name: 'assets', required: true) @@ -37,6 +38,9 @@ class Flutter { @JsonKey(name: 'fonts', required: true) final List fonts; + @JsonKey(name: 'deferred-components', required: false) + final List? deferredComponents; + factory Flutter.fromJson(Map json) => _$FlutterFromJson(json); } @@ -243,3 +247,19 @@ class FlutterGenElementFontsOutputs extends FlutterGenElementOutputs { factory FlutterGenElementFontsOutputs.fromJson(Map json) => _$FlutterGenElementFontsOutputsFromJson(json); } + +class FlutterDeferredComponents { + FlutterDeferredComponents({ + required this.name, + required this.assets, + }); + + @JsonKey(name: 'name', required: true) + final String name; + + @JsonKey(name: 'assets', required: false) + final List? assets; + + factory FlutterDeferredComponents.fromJson(Map json) => + _$FlutterDeferredComponentsFromJson(json); +} diff --git a/packages/core/lib/settings/pubspec.g.dart b/packages/core/lib/settings/pubspec.g.dart index 88be3070..4dd703ec 100644 --- a/packages/core/lib/settings/pubspec.g.dart +++ b/packages/core/lib/settings/pubspec.g.dart @@ -42,9 +42,15 @@ Flutter _$FlutterFromJson(Map json) => $checkedCreate( (v) => (v as List) .map((e) => FlutterFonts.fromJson(e as Map)) .toList()), + deferredComponents: $checkedConvert( + 'deferred-components', + (v) => (v as List?) + ?.map((e) => FlutterDeferredComponents.fromJson(e as Map)) + .toList()), ); return val; }, + fieldKeyMap: const {'deferredComponents': 'deferred-components'}, ); FlutterFonts _$FlutterFontsFromJson(Map json) => $checkedCreate( From 7bc1198f75a1673a53afd9303cba70612e39ad41 Mon Sep 17 00:00:00 2001 From: Ian Maciel Date: Mon, 16 Sep 2024 21:12:21 -0300 Subject: [PATCH 2/6] Include deferred components on README --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index 3de22f9b..2c601072 100644 --- a/README.md +++ b/README.md @@ -210,6 +210,14 @@ flutter: - assets/flare/Penguin.flr - assets/rive/vehicles.riv - pictures/ocean_view.jpg + + # Also include assets from deferred components + # https://docs.flutter.dev/perf/deferred-components + deferred-components: + - name: myDeferredComponent + assets: + - assets/images/another_image.jps + - assets/videos/a_large_video.mp4 ``` These configurations will generate **`assets.gen.dart`** under the **`lib/gen/`** directory by default. From 66f5d551debfbe2f3f924b00b882487283c9ef94 Mon Sep 17 00:00:00 2001 From: Ian Maciel Date: Thu, 26 Sep 2024 17:04:24 -0300 Subject: [PATCH 3/6] fixup! Add support for Flutter deferred components --- .../core/lib/generators/assets_generator.dart | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/packages/core/lib/generators/assets_generator.dart b/packages/core/lib/generators/assets_generator.dart index 67220523..84353e2e 100644 --- a/packages/core/lib/generators/assets_generator.dart +++ b/packages/core/lib/generators/assets_generator.dart @@ -49,16 +49,11 @@ class AssetsGenConfig { flutterGen.assets.outputs.packageParameterEnabled ? _packageName : ''; } -List _buildAssetsList(Config config) { - final List deferredAssets = []; - config.pubspec.flutter.deferredComponents?.forEach((deferredComponent) { - // Include all manipulated assets to the list of deferred assets. - deferredAssets.addAll(deferredComponent.assets ?? []); - }); - - // Merge the deferred assets with the main assets. - return [...config.pubspec.flutter.assets, ...deferredAssets]; -} +/// Merge the deferred assets with the main assets. +List _buildAssetsList(Config config) => [ + ...config.pubspec.flutter.assets, + ...config.pubspec.flutter.deferredComponents ?? [] + ]; Future generateAssets( AssetsGenConfig config, From 44c21f1e20f75a7b3aa61c29087da442b8d56cb9 Mon Sep 17 00:00:00 2001 From: Ian Maciel Date: Thu, 26 Sep 2024 17:10:05 -0300 Subject: [PATCH 4/6] fixup! Add support for Flutter deferred components --- .../core/lib/generators/assets_generator.dart | 2 +- packages/core/lib/settings/pubspec.dart | 3 ++- packages/core/lib/settings/pubspec.g.dart | 18 ++++++++++++++++++ 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/packages/core/lib/generators/assets_generator.dart b/packages/core/lib/generators/assets_generator.dart index 84353e2e..b5eb3321 100644 --- a/packages/core/lib/generators/assets_generator.dart +++ b/packages/core/lib/generators/assets_generator.dart @@ -52,7 +52,7 @@ class AssetsGenConfig { /// Merge the deferred assets with the main assets. List _buildAssetsList(Config config) => [ ...config.pubspec.flutter.assets, - ...config.pubspec.flutter.deferredComponents ?? [] + ...?config.pubspec.flutter.deferredComponents ]; Future generateAssets( diff --git a/packages/core/lib/settings/pubspec.dart b/packages/core/lib/settings/pubspec.dart index 75aad5ff..e01d0ace 100644 --- a/packages/core/lib/settings/pubspec.dart +++ b/packages/core/lib/settings/pubspec.dart @@ -248,8 +248,9 @@ class FlutterGenElementFontsOutputs extends FlutterGenElementOutputs { _$FlutterGenElementFontsOutputsFromJson(json); } +@JsonSerializable() class FlutterDeferredComponents { - FlutterDeferredComponents({ + const FlutterDeferredComponents({ required this.name, required this.assets, }); diff --git a/packages/core/lib/settings/pubspec.g.dart b/packages/core/lib/settings/pubspec.g.dart index 4dd703ec..ffe77023 100644 --- a/packages/core/lib/settings/pubspec.g.dart +++ b/packages/core/lib/settings/pubspec.g.dart @@ -260,3 +260,21 @@ FlutterGenElementFontsOutputs _$FlutterGenElementFontsOutputsFromJson( 'packageParameterEnabled': 'package_parameter_enabled' }, ); + +FlutterDeferredComponents _$FlutterDeferredComponentsFromJson(Map json) => + $checkedCreate( + 'FlutterDeferredComponents', + json, + ($checkedConvert) { + $checkKeys( + json, + requiredKeys: const ['name'], + ); + final val = FlutterDeferredComponents( + name: $checkedConvert('name', (v) => v as String), + assets: $checkedConvert('assets', + (v) => (v as List?)?.map((e) => e as Object).toList()), + ); + return val; + }, + ); From 6d595c04164308411099ade13f1b685263586d7b Mon Sep 17 00:00:00 2001 From: Ian Maciel Date: Tue, 15 Oct 2024 14:47:20 -0300 Subject: [PATCH 5/6] Add tests to deferred components --- packages/core/test/assets_gen_test.dart | 10 + .../assets_deferred_components.gen.dart | 418 ++++++++++++++++++ .../deferred_component/images/chip1.jpg | Bin 0 -> 62899 bytes .../images/component_logo.png | Bin 0 -> 1407 bytes .../pubspec_assets_deferred_components.yaml | 40 ++ 5 files changed, 468 insertions(+) create mode 100644 packages/core/test_resources/actual_data/assets_deferred_components.gen.dart create mode 100644 packages/core/test_resources/assets/deferred_component/images/chip1.jpg create mode 100644 packages/core/test_resources/assets/deferred_component/images/component_logo.png create mode 100644 packages/core/test_resources/pubspec_assets_deferred_components.yaml diff --git a/packages/core/test/assets_gen_test.dart b/packages/core/test/assets_gen_test.dart index f99ec77a..f78eccae 100644 --- a/packages/core/test/assets_gen_test.dart +++ b/packages/core/test/assets_gen_test.dart @@ -134,6 +134,16 @@ void main() { await expectedAssetsGen(pubspec, generated, fact); }); + test('Assets with deferred components assets', () async { + const pubspec = 'test_resources/pubspec_assets_deferred_components.yaml'; + const fact = + 'test_resources/actual_data/assets_deferred_components.gen.dart'; + const generated = + 'test_resources/lib/gen/assets_deferred_components.gen.dart'; + + await expectedAssetsGen(pubspec, generated, fact); + }); + test('Assets with duplicate flavoring entries', () async { const pubspec = 'test_resources/pubspec_assets_flavored_duplicate_entry.yaml'; diff --git a/packages/core/test_resources/actual_data/assets_deferred_components.gen.dart b/packages/core/test_resources/actual_data/assets_deferred_components.gen.dart new file mode 100644 index 00000000..e80e6141 --- /dev/null +++ b/packages/core/test_resources/actual_data/assets_deferred_components.gen.dart @@ -0,0 +1,418 @@ +/// GENERATED CODE - DO NOT MODIFY BY HAND +/// ***************************************************** +/// FlutterGen +/// ***************************************************** + +// coverage:ignore-file +// ignore_for_file: type=lint +// ignore_for_file: directives_ordering,unnecessary_import,implicit_dynamic_list_literal,deprecated_member_use + +import 'package:flare_flutter/flare_actor.dart' as _flare_actor; +import 'package:flare_flutter/flare_controller.dart' as _flare_controller; +import 'package:flutter/services.dart'; +import 'package:flutter/widgets.dart'; +import 'package:flutter_svg/flutter_svg.dart' as _svg; +import 'package:vector_graphics/vector_graphics.dart' as _vg; + +class $PicturesGen { + const $PicturesGen(); + + /// File path: pictures/chip5.jpg + AssetGenImage get chip5 => const AssetGenImage('pictures/chip5.jpg'); + + /// List of all assets + List get values => [chip5]; +} + +class $AssetsDeferredComponentGen { + const $AssetsDeferredComponentGen(); + + /// Directory path: assets/deferred_component/images + $AssetsDeferredComponentImagesGen get images => + const $AssetsDeferredComponentImagesGen(); +} + +class $AssetsFlareGen { + const $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 { + const $AssetsImagesGen(); + + /// Directory path: assets/images/2.0x + $AssetsImages20xGen get a2 => const $AssetsImages20xGen(); + + /// Directory path: assets/images/3.0x + $AssetsImages30xGen get a3 => const $AssetsImages30xGen(); + + /// File path: assets/images/chip1.jpg + AssetGenImage get chip1 => const AssetGenImage('assets/images/chip1.jpg'); + + /// File path: assets/images/chip2.jpg + AssetGenImage get chip2 => const AssetGenImage('assets/images/chip2.jpg'); + + /// Directory path: assets/images/chip3 + $AssetsImagesChip3Gen get chip3 => const $AssetsImagesChip3Gen(); + + /// Directory path: assets/images/chip4 + $AssetsImagesChip4Gen get chip4 => const $AssetsImagesChip4Gen(); + + /// Directory path: assets/images/icons + $AssetsImagesIconsGen get icons => const $AssetsImagesIconsGen(); + + /// File path: assets/images/logo.png + AssetGenImage get logo => const AssetGenImage('assets/images/logo.png'); + + /// File path: assets/images/profile.jpg + AssetGenImage get profileJpg => + const AssetGenImage('assets/images/profile.jpg'); + + /// 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 { + const $AssetsJsonGen(); + + /// File path: assets/json/list.json + String get list => 'assets/json/list.json'; + + /// File path: assets/json/map.json + String get map => 'assets/json/map.json'; + + /// List of all assets + List get values => [list, map]; +} + +class $AssetsMovieGen { + const $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 { + const $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 $AssetsDeferredComponentImagesGen { + const $AssetsDeferredComponentImagesGen(); + + /// File path: assets/deferred_component/images/chip1.jpg + AssetGenImage get chip1 => + const AssetGenImage('assets/deferred_component/images/chip1.jpg'); + + /// File path: assets/deferred_component/images/component_logo.png + AssetGenImage get componentLogo => const AssetGenImage( + 'assets/deferred_component/images/component_logo.png'); + + /// List of all assets + List get values => [chip1, componentLogo]; +} + +class $AssetsImages20xGen { + const $AssetsImages20xGen(); + + /// File path: assets/images/2.0x/chip1.jpg + AssetGenImage get chip1 => + const AssetGenImage('assets/images/2.0x/chip1.jpg'); + + /// List of all assets + List get values => [chip1]; +} + +class $AssetsImages30xGen { + const $AssetsImages30xGen(); + + /// File path: assets/images/3.0x/chip1.jpg + AssetGenImage get chip1 => + const AssetGenImage('assets/images/3.0x/chip1.jpg'); + + /// List of all assets + List get values => [chip1]; +} + +class $AssetsImagesChip3Gen { + const $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 { + const $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 { + const $AssetsImagesIconsGen(); + + /// File path: assets/images/icons/dart@test.svg + SvgGenImage get dartTest => + const SvgGenImage('assets/images/icons/dart@test.svg'); + + /// File path: assets/images/icons/fuchsia.svg + SvgGenImage get fuchsia => + const SvgGenImage('assets/images/icons/fuchsia.svg'); + + /// File path: assets/images/icons/kmm.svg + SvgGenImage get kmm => const SvgGenImage('assets/images/icons/kmm.svg'); + + /// 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 { + Assets._(); + + static const String changelog = 'CHANGELOG.md'; + static const $AssetsDeferredComponentGen deferredComponent = + $AssetsDeferredComponentGen(); + static const $AssetsFlareGen flare = $AssetsFlareGen(); + static const $AssetsImagesGen images = $AssetsImagesGen(); + static const $AssetsJsonGen json = $AssetsJsonGen(); + static const $AssetsMovieGen movie = $AssetsMovieGen(); + static const $AssetsUnknownGen unknown = $AssetsUnknownGen(); + static const $PicturesGen pictures = $PicturesGen(); + + /// List of all assets + static List get values => [changelog]; +} + +class AssetGenImage { + const AssetGenImage( + this._assetName, { + this.size, + this.flavors = const {}, + }); + + final String _assetName; + + final Size? size; + final Set flavors; + + Image image({ + Key? key, + AssetBundle? bundle, + ImageFrameBuilder? frameBuilder, + ImageErrorWidgetBuilder? errorBuilder, + String? semanticLabel, + bool excludeFromSemantics = false, + double? scale, + double? width, + double? height, + Color? color, + Animation? opacity, + BlendMode? colorBlendMode, + BoxFit? fit, + AlignmentGeometry alignment = Alignment.center, + ImageRepeat repeat = ImageRepeat.noRepeat, + Rect? centerSlice, + bool matchTextDirection = false, + bool gaplessPlayback = true, + bool isAntiAlias = false, + String? package, + FilterQuality filterQuality = FilterQuality.low, + int? cacheWidth, + int? cacheHeight, + }) { + return Image.asset( + _assetName, + key: key, + bundle: bundle, + frameBuilder: frameBuilder, + errorBuilder: errorBuilder, + semanticLabel: semanticLabel, + excludeFromSemantics: excludeFromSemantics, + scale: scale, + width: width, + height: height, + color: color, + opacity: opacity, + colorBlendMode: colorBlendMode, + fit: fit, + alignment: alignment, + repeat: repeat, + centerSlice: centerSlice, + matchTextDirection: matchTextDirection, + gaplessPlayback: gaplessPlayback, + isAntiAlias: isAntiAlias, + package: package, + filterQuality: filterQuality, + cacheWidth: cacheWidth, + cacheHeight: cacheHeight, + ); + } + + ImageProvider provider({ + AssetBundle? bundle, + String? package, + }) { + return AssetImage( + _assetName, + bundle: bundle, + package: package, + ); + } + + String get path => _assetName; + + String get keyName => _assetName; +} + +class SvgGenImage { + const SvgGenImage( + this._assetName, { + this.size, + this.flavors = const {}, + }) : _isVecFormat = false; + + const SvgGenImage.vec( + this._assetName, { + this.size, + this.flavors = const {}, + }) : _isVecFormat = true; + + final String _assetName; + final Size? size; + final Set flavors; + final bool _isVecFormat; + + _svg.SvgPicture svg({ + Key? key, + bool matchTextDirection = false, + AssetBundle? bundle, + String? package, + double? width, + double? height, + BoxFit fit = BoxFit.contain, + AlignmentGeometry alignment = Alignment.center, + bool allowDrawingOutsideViewBox = false, + WidgetBuilder? placeholderBuilder, + String? semanticsLabel, + bool excludeFromSemantics = false, + _svg.SvgTheme? theme, + ColorFilter? colorFilter, + Clip clipBehavior = Clip.hardEdge, + @deprecated Color? color, + @deprecated BlendMode colorBlendMode = BlendMode.srcIn, + @deprecated bool cacheColorFilter = false, + }) { + final _svg.BytesLoader loader; + if (_isVecFormat) { + loader = _vg.AssetBytesLoader( + _assetName, + assetBundle: bundle, + packageName: package, + ); + } else { + loader = _svg.SvgAssetLoader( + _assetName, + assetBundle: bundle, + packageName: package, + theme: theme, + ); + } + return _svg.SvgPicture( + loader, + key: key, + matchTextDirection: matchTextDirection, + width: width, + height: height, + fit: fit, + alignment: alignment, + allowDrawingOutsideViewBox: allowDrawingOutsideViewBox, + placeholderBuilder: placeholderBuilder, + semanticsLabel: semanticsLabel, + excludeFromSemantics: excludeFromSemantics, + colorFilter: colorFilter ?? + (color == null ? null : ColorFilter.mode(color, colorBlendMode)), + clipBehavior: clipBehavior, + cacheColorFilter: cacheColorFilter, + ); + } + + String get path => _assetName; + + String get keyName => _assetName; +} + +class FlareGenImage { + const FlareGenImage( + this._assetName, { + this.flavors = const {}, + }); + + final String _assetName; + final Set flavors; + + _flare_actor.FlareActor flare({ + String? boundsNode, + String? animation, + BoxFit fit = BoxFit.contain, + Alignment alignment = Alignment.center, + bool isPaused = false, + bool snapToEnd = false, + _flare_controller.FlareController? controller, + _flare_actor.FlareCompletedCallback? callback, + Color? color, + bool shouldClip = true, + bool sizeFromArtboard = false, + String? artboard, + bool antialias = true, + }) { + return _flare_actor.FlareActor( + _assetName, + boundsNode: boundsNode, + animation: animation, + fit: fit, + alignment: alignment, + isPaused: isPaused, + snapToEnd: snapToEnd, + controller: controller, + callback: callback, + color: color, + shouldClip: shouldClip, + sizeFromArtboard: sizeFromArtboard, + artboard: artboard, + antialias: antialias, + ); + } + + String get path => _assetName; + + String get keyName => _assetName; +} diff --git a/packages/core/test_resources/assets/deferred_component/images/chip1.jpg b/packages/core/test_resources/assets/deferred_component/images/chip1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3227e8a7bdf6c94027d180bb950200dfbdb47f6f GIT binary patch literal 62899 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
    1da=Vqa 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�A%3foEm?Y+=nD{-lu?@ zX^P4K2f61pn}2f6I5F@T{S7xA3M@Y4xLv%1&(f@mxYfersP-c@LUp)>Rr8#lhqgse zX>4xgRBxB3&Dad|sk#$PxjfO!@+;BLSqQ*Nz($#STiJZP%uD z{V6?()VZhWw&oX~a10OQRYcHSqrx${8ys>n4QItXfeP>17-Q2ts*0mq7I+RpJo{7S zO$|0|BZx|ZI6X~jwyYsSn8@d+AEk4W$Xx_jF~`jpK90#1oMpJy<*5M$nqll#AhD#_~pB|QEZD*1D51*&wuf(%|iZEh+CEH+y&`NTok)Ohs?OI={qRr|TOGE$A@edNn z>1KAZ9R+p%3Hh{!-Oh8G<9tv503K)XuFJsx0P+bnOQECPlER2?-;d!x)}XuqhR-}z zsDI<_zuiC9t6lVOr8lvX*y$~xhT7UDfdUo-IPXTPp_y_sl^OS`SN=U9`U;O!`^oea zqp?q+EwqmusTv$FJPO9ZlKx`jb`Ke?Xn*73KN`wU`2L^kM28-R1>M!aymwQ+&z zT?NPuBn-nOD8a5`@BTmK{41!q`_TUYx+yN9)V(Z^Ywl`w%_Yt>-}na7FE?)iK77V&-1Gjj7FIL=>C;gR{sEB zANlWAu0PeM`=k0+k6|sD(%!)j_CD={J5TZz=ZkL(SvwWU$mYE!_x?bq{nPy`&lCPU zU+O7HWWFDFlTnU0B&h6b>n{pg+sUHN&l;1rsr+l?zYc%MQ9iZx=Y)Uc2S5A2<4tTs z-0)pd6?F@iQGyuaypK`5x@+yGR>tGTee2h?U-3TiH+apciD)0xVHRf`C;r{Ucb?DkZ@cn^hU^PWG#x=m;OYW+v^u4e11{XfE)5!kzD8hw$Z+Bau8?_7J&ERr_%CmH^A+1dX9 z$BTVyhd=8Z@&0vBp;G8?TEvFsRE`caU0u{@u&7aifQ>WiQ?;45!0M`B{uc0y6xD{3cRABHc0eQ(hoRRvP=nwpRpTfEI z=zgd9nsqjhsS9=zBBs)r8OC`&)xBeXc@!-ia2 zSL%PATbKQK{{VaZD!LL*z!M&O@P9h(;*sOhu!N3+xTF67EWW?iyEOj*kYD9d65?Zt z9yVn|frhMaG2blgNi3k&vwimZHDf2;{{Vq4X&!+h=w{p3xvkAUG6xqbJOvzhTYlVQs;Nddh_XA?4R-Sf8RgWx*JdU_h0u<^rA&a zsLN7wC$~z!WbBe1hZsN7s9N=wuG;?qtZ%RMsUK3_sq;h`xjcV5hfEu0QaC%-rqsXG zkHh)YI&b>b{{Veyt;%JsS=>r6al!s|S0u+99=Qkgs~WfZ)%qXjRmb|6{{Ro?LfHc@ zU%L>QJg6HPF8Rv?U-~D?1f2Bu1{CJp-X-}>@*hr=3yhlpZeyj4ppa0)#uvUMq$HXdhsEk zKRrWdqI}bp8@o_Xnz2PV-tp;L7bxjsYS7WG}Kfm?QUR)!B+c63{AEyfv;)xbsjYuYz(RgN=M6jpP0JSdJ5biA#Q;1f;SZ@L)&=d}DcM0)cOFEt&8PL9U$ zLZ2`+zLEK^yIN^(4mE=)>Ltsz17WecA2R^z&ZnK0c)+I)!$m%(Y!i$`bX1NmTMc49 zT;`%SlO9E!Q4WRSvW^>Ci124ej)L@OM`v^#Clhq}^!6jX@D=iG>BcZ1%l5|;YiJoP0SMNPH9VY%#jE>2XFrSN@hwV@%+sVi?gaD0aCr6b|&Qc{hE3QkG)0j#KM9 zogNMKRZnX4 z;YM_2PmU?m>osY&A6;Ea?r-@r>4~gx1qz+?EAYLk(z4$7UORv?<9xIfw|(PeeR9Kt zOZbCakd;$4{fbH$h-6e6C|$yXJ;NVO{^2{%u_iQLwaYFRFJvlAB!Y+P{SMTR2!yan z)WdV08CdIO#i4h?M#8^{8G!HrpLFZb>emszc<4y~#mn37hT{C-{T*$)% zankng-#sE*{3W-*Hpgi&$oOTk)8UZ0ouy{)+T~-ayv<*v%XS@)=y_N!{LISC}@wa#L~! zm@vDpJm_q34PJ1ngj+D5a3tn{kFPz~y!1|rKXAvS9E9*wqdHHVlGo;pNXVxrO=jc>rmzE!g&gL&%&TaQx9(5|}2~6y} eXqm+DTW}tnP0Bs%Z8-=1SFn&kGFZPan)4sQN>F|P literal 0 HcmV?d00001 diff --git a/packages/core/test_resources/pubspec_assets_deferred_components.yaml b/packages/core/test_resources/pubspec_assets_deferred_components.yaml new file mode 100644 index 00000000..9e62962a --- /dev/null +++ b/packages/core/test_resources/pubspec_assets_deferred_components.yaml @@ -0,0 +1,40 @@ +name: test + +flutter_gen: + output: lib/gen/ # Optional (default: lib/gen/) + line_length: 80 # Optional (default: 80) + + integrations: + flutter_svg: true + flare_flutter: true + +flutter: + assets: + - assets/images + - assets/images/chip3/chip3.jpg + - assets/images/chip3/chip3.jpg # duplicated + - assets/images/chip4/ + - assets/images/icons/fuchsia.svg + - assets/images/icons/kmm.svg + - assets/images/icons/paint.svg + - assets/images/icons/dart@test.svg + - assets/json/ + - pictures/chip5.jpg + - assets/flare/ + - assets/movie/ + - assets/unknown/unknown_mime_type.bk + - CHANGELOG.md + + deferred-components: + - name: myDeferredComponent + assets: + - assets/deferred_component/images + - assets/deferred_component/images/chip1.jpg + - assets/deferred_component/images/component_logo.png + # Deferred components can load assets from the main assets folder as well + - assets/images/icons/fuchsia.svg + - assets/images/2.0x/chip1.jpg + + - name: mySecondDeferredComponent + assets: + - assets/images/3.0x/chip1.jpg From 564f01ba0d14922c19b06a874ddd80dad600b958 Mon Sep 17 00:00:00 2001 From: Ian Maciel Date: Tue, 15 Oct 2024 15:29:32 -0300 Subject: [PATCH 6/6] Fix deferred components spread on asset generator --- .../core/lib/generators/assets_generator.dart | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/packages/core/lib/generators/assets_generator.dart b/packages/core/lib/generators/assets_generator.dart index b5eb3321..cf725521 100644 --- a/packages/core/lib/generators/assets_generator.dart +++ b/packages/core/lib/generators/assets_generator.dart @@ -50,10 +50,19 @@ class AssetsGenConfig { } /// Merge the deferred assets with the main assets. -List _buildAssetsList(Config config) => [ - ...config.pubspec.flutter.assets, - ...?config.pubspec.flutter.deferredComponents - ]; +List _buildAssetsList(Config config) { + // We may have several deferred components, with a list of assets for each. + // So before spreading the list of deferred components, we need to spread + // the list of assets for each deferred component. + final List deferredAssets = []; + config.pubspec.flutter.deferredComponents?.forEach((deferredComponent) { + // Include all manipulated assets to the list of deferred assets. + deferredAssets.addAll(deferredComponent.assets ?? []); + }); + + // Merge the deferred assets with the main assets. + return [...config.pubspec.flutter.assets, ...deferredAssets]; +} Future generateAssets( AssetsGenConfig config,