@@ -6,6 +6,7 @@ import 'package:dartx/dartx.dart';
66import 'package:path/path.dart' ;
77
88import '../settings/asset_type.dart' ;
9+ import '../settings/config.dart' ;
910import '../settings/pubspec.dart' ;
1011import '../utils/dart_style/dart_style.dart' ;
1112import '../utils/error.dart' ;
@@ -15,17 +16,34 @@ import 'integrations/flare_integration.dart';
1516import 'integrations/integration.dart' ;
1617import 'integrations/svg_integration.dart' ;
1718
19+ class AssetsGenConfig {
20+ AssetsGenConfig ._(
21+ this .rootPath,
22+ this .packageName,
23+ this .flutterGen,
24+ this .assets,
25+ );
26+
27+ factory AssetsGenConfig .fromConfig (File pubspecFile, Config config) {
28+ return AssetsGenConfig ._(
29+ pubspecFile.parent.path,
30+ config.pubspec.packageName,
31+ config.pubspec.flutterGen,
32+ config.pubspec.flutter.assets,
33+ );
34+ }
35+
36+ final String rootPath;
37+ final String packageName;
38+ final FlutterGen flutterGen;
39+ final List <String > assets;
40+ }
41+
1842String generateAssets (
19- File pubspecFile ,
43+ AssetsGenConfig config ,
2044 DartFormatter formatter,
21- FlutterGen flutterGen,
22- List <String > assets, {
23-
24- // TODO: Until null safety generalizes
25- // ignore: type_annotate_public_apis
26- nullSafety = true ,
27- }) {
28- if (assets.isEmpty) {
45+ ) {
46+ if (config.assets.isEmpty) {
2947 throw InvalidSettingsException (
3048 'The value of "flutter/assets:" is incorrect.' );
3149 }
@@ -35,30 +53,29 @@ String generateAssets(
3553
3654 final integrations = < Integration > [
3755 // TODO: Until null safety generalizes
38- if (flutterGen.integrations.flutterSvg)
39- SvgIntegration (nullSafety: nullSafety),
40- if (flutterGen.integrations.flareFlutter)
41- FlareIntegration (nullSafety: nullSafety),
56+ if (config.flutterGen.integrations.flutterSvg)
57+ SvgIntegration (config.packageName,
58+ nullSafety: config.flutterGen.nullSafety),
59+ if (config.flutterGen.integrations.flareFlutter)
60+ FlareIntegration (nullSafety: config.flutterGen.nullSafety),
4261 ];
4362
44- if (flutterGen.assets.isDotDelimiterStyle) {
45- classesBuffer.writeln (
46- _dotDelimiterStyleDefinition (pubspecFile, assets, integrations));
47- } else if (flutterGen.assets.isSnakeCaseStyle) {
48- classesBuffer
49- .writeln (_snakeCaseStyleDefinition (pubspecFile, assets, integrations));
50- } else if (flutterGen.assets.isCamelCaseStyle) {
51- classesBuffer
52- .writeln (_camelCaseStyleDefinition (pubspecFile, assets, integrations));
63+ if (config.flutterGen.assets.isDotDelimiterStyle) {
64+ classesBuffer.writeln (_dotDelimiterStyleDefinition (config, integrations));
65+ } else if (config.flutterGen.assets.isSnakeCaseStyle) {
66+ classesBuffer.writeln (_snakeCaseStyleDefinition (config, integrations));
67+ } else if (config.flutterGen.assets.isCamelCaseStyle) {
68+ classesBuffer.writeln (_camelCaseStyleDefinition (config, integrations));
5369 } else {
5470 throw 'The value of "flutter_gen/assets/style." is incorrect.' ;
5571 }
5672
5773 // TODO: Until null safety generalizes
58- if (nullSafety) {
59- classesBuffer.writeln (_assetGenImageClassDefinition);
74+ if (config.flutterGen. nullSafety) {
75+ classesBuffer.writeln (_assetGenImageClassDefinition (config.packageName) );
6076 } else {
61- classesBuffer.writeln (_assetGenImageClassDefinitionWithNoNullSafety);
77+ classesBuffer.writeln (
78+ _assetGenImageClassDefinitionWithNoNullSafety (config.packageName));
6279 }
6380
6481 final imports = < String > {'package:flutter/widgets.dart' };
@@ -75,7 +92,7 @@ String generateAssets(
7592 final buffer = StringBuffer ();
7693
7794 // TODO: Until null safety generalizes
78- if (nullSafety) {
95+ if (config.flutterGen. nullSafety) {
7996 buffer.writeln (header);
8097 } else {
8198 buffer.writeln (headerWithNoNullSafety);
@@ -86,21 +103,20 @@ String generateAssets(
86103}
87104
88105List <String > _getAssetRelativePathList (
89- File pubspecFile ,
106+ String rootPath ,
90107 List <String > assets,
91108) {
92109 final assetRelativePathList = < String > [];
93110 for (final assetName in assets) {
94- final assetAbsolutePath = join (pubspecFile.parent.path , assetName);
111+ final assetAbsolutePath = join (rootPath , assetName);
95112 if (FileSystemEntity .isDirectorySync (assetAbsolutePath)) {
96113 assetRelativePathList.addAll (Directory (assetAbsolutePath)
97114 .listSync ()
98115 .whereType <File >()
99- .map ((e) => relative (e.path, from: pubspecFile.parent.path ))
116+ .map ((e) => relative (e.path, from: rootPath ))
100117 .toList ());
101118 } else if (FileSystemEntity .isFileSync (assetAbsolutePath)) {
102- assetRelativePathList
103- .add (relative (assetAbsolutePath, from: pubspecFile.parent.path));
119+ assetRelativePathList.add (relative (assetAbsolutePath, from: rootPath));
104120 }
105121 }
106122 return assetRelativePathList;
@@ -130,12 +146,12 @@ AssetType _constructAssetTree(List<String> assetRelativePathList) {
130146}
131147
132148_Statement ? _createAssetTypeStatement (
133- File pubspecFile ,
149+ String rootPath ,
134150 AssetType assetType,
135151 List <Integration > integrations,
136152 String name,
137153) {
138- final childAssetAbsolutePath = join (pubspecFile.parent.path , assetType.path);
154+ final childAssetAbsolutePath = join (rootPath , assetType.path);
139155 if (assetType.isSupportedImage) {
140156 return _Statement (
141157 type: 'AssetGenImage' ,
@@ -176,27 +192,27 @@ _Statement? _createAssetTypeStatement(
176192
177193/// Generate style like Assets.foo.bar
178194String _dotDelimiterStyleDefinition (
179- File pubspecFile,
180- List <String > assets,
195+ AssetsGenConfig config,
181196 List <Integration > integrations,
182197) {
183198 final buffer = StringBuffer ();
184- final assetRelativePathList = _getAssetRelativePathList (pubspecFile, assets);
199+ final assetRelativePathList =
200+ _getAssetRelativePathList (config.rootPath, config.assets);
185201 final assetsStaticStatements = < _Statement > [];
186202
187203 final assetTypeQueue = ListQueue <AssetType >.from (
188204 _constructAssetTree (assetRelativePathList).children);
189205
190206 while (assetTypeQueue.isNotEmpty) {
191207 final assetType = assetTypeQueue.removeFirst ();
192- final assetAbsolutePath = join (pubspecFile.parent.path , assetType.path);
208+ final assetAbsolutePath = join (config.rootPath , assetType.path);
193209
194210 if (FileSystemEntity .isDirectorySync (assetAbsolutePath)) {
195211 final statements = assetType.children
196212 .mapToIsUniqueWithoutExtension ()
197213 .map (
198214 (e) => _createAssetTypeStatement (
199- pubspecFile ,
215+ config.rootPath ,
200216 e.assetType,
201217 integrations,
202218 (e.isUniqueWithoutExtension
@@ -234,13 +250,11 @@ String _dotDelimiterStyleDefinition(
234250
235251/// Generate style like Assets.fooBar
236252String _camelCaseStyleDefinition (
237- File pubspecFile,
238- List <String > assets,
253+ AssetsGenConfig config,
239254 List <Integration > integrations,
240255) {
241256 return _flatStyleDefinition (
242- pubspecFile,
243- assets,
257+ config,
244258 integrations,
245259 (e) => (e.isUniqueWithoutExtension
246260 ? withoutExtension (e.assetType.path)
@@ -252,13 +266,11 @@ String _camelCaseStyleDefinition(
252266
253267/// Generate style like Assets.foo_bar
254268String _snakeCaseStyleDefinition (
255- File pubspecFile,
256- List <String > assets,
269+ AssetsGenConfig config,
257270 List <Integration > integrations,
258271) {
259272 return _flatStyleDefinition (
260- pubspecFile,
261- assets,
273+ config,
262274 integrations,
263275 (e) => (e.isUniqueWithoutExtension
264276 ? withoutExtension (e.assetType.path)
@@ -269,19 +281,18 @@ String _snakeCaseStyleDefinition(
269281}
270282
271283String _flatStyleDefinition (
272- File pubspecFile,
273- List <String > assets,
284+ AssetsGenConfig config,
274285 List <Integration > integrations,
275286 String Function (AssetTypeIsUniqueWithoutExtension ) createName,
276287) {
277- final statements = _getAssetRelativePathList (pubspecFile, assets)
288+ final statements = _getAssetRelativePathList (config.rootPath, config. assets)
278289 .distinct ()
279290 .sorted ()
280291 .map ((relativePath) => AssetType (relativePath))
281292 .mapToIsUniqueWithoutExtension ()
282293 .map (
283294 (e) => _createAssetTypeStatement (
284- pubspecFile ,
295+ config.rootPath ,
285296 e.assetType,
286297 integrations,
287298 createName (e),
@@ -322,12 +333,12 @@ class $className {
322333}
323334
324335/// Null Safety
325- const String _assetGenImageClassDefinition = '''
336+ String _assetGenImageClassDefinition ( String packageName) => '''
326337
327338class AssetGenImage extends AssetImage {
328339 const AssetGenImage(String assetName)
329340 : _assetName = assetName,
330- super(assetName);
341+ super(assetName, package: '$ packageName ' );
331342 final String _assetName;
332343
333344 Image image({
@@ -379,12 +390,12 @@ class AssetGenImage extends AssetImage {
379390
380391/// No Null Safety
381392/// TODO: Until null safety generalizes
382- const String _assetGenImageClassDefinitionWithNoNullSafety = '''
393+ String _assetGenImageClassDefinitionWithNoNullSafety ( String packageName) => '''
383394
384395class AssetGenImage extends AssetImage {
385396 const AssetGenImage(String assetName)
386397 : _assetName = assetName,
387- super(assetName);
398+ super(assetName, package: '$ packageName ' );
388399 final String _assetName;
389400
390401 Image image({
0 commit comments