Skip to content

Commit 070c172

Browse files
lcdsmaowasabeef
andauthored
Fix #102 (#103)
* test: revert test resources without pacakge * feat: generate package parameter based on option * test: add package parameter enabled test * docs: add package parameter enabled Co-authored-by: Daichi Furiya <[email protected]>
1 parent cd9f870 commit 070c172

21 files changed

+372
-35
lines changed

README.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,8 @@ $ fluttergen -c example/pubspec.yaml
108108

109109
## Configuration file
110110

111-
[FlutterGen] generates dart files based on the key **`flutter`** and **`flutter_gen`** of [`pubspec.yaml`](https://dart.dev/tools/pub/pubspec).
111+
[FlutterGen] generates dart files based on the key **`flutter`** and **`flutter_gen`** of [`pubspec.yaml`](https://dart.dev/tools/pub/pubspec).
112+
Default configuration can be found [here](#default-settings).
112113

113114
```yaml
114115
# pubspec.yaml
@@ -663,7 +664,7 @@ class ColorName {
663664
</p>
664665
</details>
665666

666-
### Default Settings
667+
### Default Configuration
667668

668669
The following are the default settings.
669670
The options you set in `pubspec.yaml` will override the corresponding default options.
@@ -679,6 +680,7 @@ flutter_gen:
679680
680681
assets:
681682
enabled: true
683+
package_parameter_enabled: false
682684
style: dot-delimiter
683685
684686
fonts:

example/lib/gen/assets.gen.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ class Assets {
9191
}
9292

9393
class AssetGenImage extends AssetImage {
94-
const AssetGenImage(String assetName) : super(assetName, package: 'example');
94+
const AssetGenImage(String assetName) : super(assetName);
9595

9696
Image image({
9797
Key? key,
@@ -148,7 +148,7 @@ class SvgGenImage {
148148
Key? key,
149149
bool matchTextDirection = false,
150150
AssetBundle? bundle,
151-
String? package = 'example',
151+
String? package,
152152
double? width,
153153
double? height,
154154
BoxFit fit = BoxFit.contain,

packages/core/lib/generators/assets_generator.dart

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import 'integrations/svg_integration.dart';
1919
class AssetsGenConfig {
2020
AssetsGenConfig._(
2121
this.rootPath,
22-
this.packageName,
22+
this._packageName,
2323
this.flutterGen,
2424
this.assets,
2525
);
@@ -34,9 +34,12 @@ class AssetsGenConfig {
3434
}
3535

3636
final String rootPath;
37-
final String packageName;
37+
final String _packageName;
3838
final FlutterGen flutterGen;
3939
final List<String> assets;
40+
41+
String get packageParameterLiteral =>
42+
flutterGen.assets.packageParameterEnabled ? _packageName : '';
4043
}
4144

4245
String generateAssets(
@@ -54,7 +57,7 @@ String generateAssets(
5457
final integrations = <Integration>[
5558
// TODO: Until null safety generalizes
5659
if (config.flutterGen.integrations.flutterSvg)
57-
SvgIntegration(config.packageName,
60+
SvgIntegration(config.packageParameterLiteral,
5861
nullSafety: config.flutterGen.nullSafety),
5962
if (config.flutterGen.integrations.flareFlutter)
6063
FlareIntegration(nullSafety: config.flutterGen.nullSafety),
@@ -72,10 +75,13 @@ String generateAssets(
7275

7376
// TODO: Until null safety generalizes
7477
if (config.flutterGen.nullSafety) {
75-
classesBuffer.writeln(_assetGenImageClassDefinition(config.packageName));
78+
classesBuffer.writeln(_assetGenImageClassDefinition(
79+
config.packageParameterLiteral,
80+
));
7681
} else {
77-
classesBuffer.writeln(
78-
_assetGenImageClassDefinitionWithNoNullSafety(config.packageName));
82+
classesBuffer.writeln(_assetGenImageClassDefinitionWithNoNullSafety(
83+
config.packageParameterLiteral,
84+
));
7985
}
8086

8187
final imports = <String>{'package:flutter/widgets.dart'};
@@ -333,10 +339,13 @@ class $className {
333339
}
334340

335341
/// Null Safety
336-
String _assetGenImageClassDefinition(String packageName) => '''
342+
String _assetGenImageClassDefinition(String packageName) {
343+
final optionalParameter =
344+
packageName.isNotEmpty ? ', package: \'$packageName\'' : '';
345+
return '''
337346
338347
class AssetGenImage extends AssetImage {
339-
const AssetGenImage(String assetName) : super(assetName, package: '$packageName');
348+
const AssetGenImage(String assetName) : super(assetName$optionalParameter);
340349
341350
Image image({
342351
Key? key,
@@ -384,13 +393,16 @@ class AssetGenImage extends AssetImage {
384393
String get path => assetName;
385394
}
386395
''';
396+
}
387397

388398
/// No Null Safety
389399
/// TODO: Until null safety generalizes
390-
String _assetGenImageClassDefinitionWithNoNullSafety(String packageName) => '''
391-
400+
String _assetGenImageClassDefinitionWithNoNullSafety(String packageName) {
401+
final optionalParameter =
402+
packageName.isNotEmpty ? ', package: \'$packageName\'' : '';
403+
return '''
392404
class AssetGenImage extends AssetImage {
393-
const AssetGenImage(String assetName) : super(assetName, package: '$packageName');
405+
const AssetGenImage(String assetName) : super(assetName$optionalParameter);
394406
395407
Image image({
396408
Key key,
@@ -438,6 +450,7 @@ class AssetGenImage extends AssetImage {
438450
String get path => assetName;
439451
}
440452
''';
453+
}
441454

442455
class _Statement {
443456
const _Statement({

packages/core/lib/generators/integrations/svg_integration.dart

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,16 @@ import 'integration.dart';
44
class SvgIntegration extends Integration {
55
// TODO: Until null safety generalizes
66
// ignore: avoid_positional_boolean_parameters
7-
SvgIntegration(this._packageName, {bool nullSafety = true})
8-
: super(nullSafety: nullSafety);
7+
SvgIntegration(
8+
this._packageParameterLiteral, {
9+
bool nullSafety = true,
10+
}) : super(nullSafety: nullSafety);
911

10-
final String _packageName;
12+
final String _packageParameterLiteral;
13+
14+
String get packageExpression => _packageParameterLiteral.isNotEmpty
15+
? ' = \'$_packageParameterLiteral\''
16+
: '';
1117

1218
@override
1319
List<String> get requiredImports => [
@@ -30,7 +36,7 @@ class SvgIntegration extends Integration {
3036
Key? key,
3137
bool matchTextDirection = false,
3238
AssetBundle? bundle,
33-
String? package = '$_packageName',
39+
String? package$packageExpression,
3440
double? width,
3541
double? height,
3642
BoxFit fit = BoxFit.contain,
@@ -77,7 +83,7 @@ class SvgIntegration extends Integration {
7783
Key key,
7884
bool matchTextDirection = false,
7985
AssetBundle bundle,
80-
String package = '$_packageName',
86+
String package$packageExpression,
8187
double width,
8288
double height,
8389
BoxFit fit = BoxFit.contain,

packages/core/lib/settings/config.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ flutter_gen:
5151
5252
assets:
5353
enabled: true
54+
package_parameter_enabled: false
5455
style: dot-delimiter
5556
5657
fonts:

packages/core/lib/settings/pubspec.dart

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,11 @@ class FlutterGenAssets {
127127
static const String snakeCaseStyle = 'snake-case';
128128
static const String camelCaseStyle = 'camel-case';
129129

130-
FlutterGenAssets({required this.enabled, required this.style}) {
130+
FlutterGenAssets({
131+
required this.enabled,
132+
required this.packageParameterEnabled,
133+
required this.style,
134+
}) {
131135
if (style != dotDelimiterStyle &&
132136
style != snakeCaseStyle &&
133137
style != camelCaseStyle) {
@@ -138,6 +142,9 @@ class FlutterGenAssets {
138142
@JsonKey(name: 'enabled', required: true)
139143
final bool enabled;
140144

145+
@JsonKey(name: 'package_parameter_enabled', required: true)
146+
final bool packageParameterEnabled;
147+
141148
@JsonKey(name: 'style', required: true)
142149
final String style;
143150

packages/core/lib/settings/pubspec.g.dart

Lines changed: 6 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/core/test/assets_gen_test.dart

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,5 +74,25 @@ void main() {
7474
AssetsGenConfig.fromConfig(pubspec, config), formatter);
7575
}, throwsA(isA<InvalidSettingsException>()));
7676
});
77+
78+
test('Assets with package parameter enabled', () async {
79+
final pubspec = 'test_resources/pubspec_assets_package_parameter.yaml';
80+
final fact =
81+
'test_resources/actual_data/assets_package_parameter.gen.dart';
82+
final generated =
83+
'test_resources/lib/gen/assets_package_parameter.gen.dart';
84+
85+
expectedAssetsGen(pubspec, generated, fact);
86+
});
87+
88+
test('Assets with package parameter enabled', () async {
89+
final pubspec = 'test_resources/pubspec_assets_package_parameter.yaml';
90+
final fact =
91+
'test_resources/actual_data/assets_package_parameter_disable_null_safety.gen.dart';
92+
final generated =
93+
'test_resources/lib/gen/assets_package_parameter_disable_null_safety.gen.dart';
94+
95+
expectedAssetsGen(pubspec, generated, fact);
96+
});
7797
});
7898
}

packages/core/test_resources/actual_data/assets.gen.dart

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/core/test_resources/actual_data/assets_camel_case.gen.dart

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)