Skip to content

Commit 941dc2d

Browse files
committed
feat: add keep config at build.yaml
1 parent 34eff4f commit 941dc2d

File tree

7 files changed

+106
-15
lines changed

7 files changed

+106
-15
lines changed

README.md

+17
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,23 @@ class $AssetsImagesGen {
267267
}
268268
```
269269

270+
#### Support generate at **build.yaml**
271+
Support generates dart files based on the key **`targets.$default.builders`** and **`flutter_gen.options`**
272+
of [`build.yaml`](https://github.com/dart-lang/build/blob/master/build_config/README.md).
273+
274+
```yaml
275+
# build.yaml
276+
# ...
277+
278+
targets:
279+
$default:
280+
builders:
281+
flutter_gen:
282+
options:
283+
output: lib/build_gen/ # Optional (default: lib/gen/)
284+
line_length: 120 # Optional (default: 80)
285+
```
286+
270287
#### Including additional metadata
271288

272289
At build time, additional metadata may be included in the generated class, by using the

packages/command/bin/flutter_gen_command.dart

+13-1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,13 @@ void main(List<String> args) {
1414
defaultsTo: 'pubspec.yaml',
1515
);
1616

17+
parser.addOption(
18+
'build',
19+
abbr: 'b',
20+
help: 'Set the path of build.yaml.',
21+
defaultsTo: 'build.yaml',
22+
);
23+
1724
parser.addFlag(
1825
'help',
1926
abbr: 'h',
@@ -45,5 +52,10 @@ void main(List<String> args) {
4552
}
4653

4754
final pubspecPath = safeCast<String>(results['config']);
48-
FlutterGenerator(File(pubspecPath!).absolute).build();
55+
final pubspecFile = File(pubspecPath!).absolute;
56+
57+
final buildPath = safeCast<String>(results['build']);
58+
final buildFile = File(buildPath!).absolute;
59+
60+
FlutterGenerator(pubspecFile, buildFile: buildFile).build();
4961
}

packages/core/lib/flutter_generator.dart

+3-1
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,20 @@ import 'package:path/path.dart';
1111
class FlutterGenerator {
1212
const FlutterGenerator(
1313
this.pubspecFile, {
14+
this.buildFile,
1415
this.assetsName = 'assets.gen.dart',
1516
this.colorsName = 'colors.gen.dart',
1617
this.fontsName = 'fonts.gen.dart',
1718
});
1819

1920
final File pubspecFile;
21+
final File? buildFile;
2022
final String assetsName;
2123
final String colorsName;
2224
final String fontsName;
2325

2426
Future<void> build({Config? config, FileWriter? writer}) async {
25-
config ??= loadPubspecConfigOrNull(pubspecFile);
27+
config ??= loadPubspecConfigOrNull(pubspecFile, buildFile: buildFile);
2628
if (config == null) return;
2729

2830
final flutter = config.pubspec.flutter;

packages/core/lib/settings/config.dart

+34-11
Original file line numberDiff line numberDiff line change
@@ -15,23 +15,46 @@ class Config {
1515
final File pubspecFile;
1616
}
1717

18-
Config loadPubspecConfig(File pubspecFile) {
19-
stdout.writeln('$flutterGenVersion Loading ... '
20-
'${normalize(join(
21-
basename(pubspecFile.parent.path),
22-
basename(pubspecFile.path),
23-
))}');
24-
final content = pubspecFile.readAsStringSync();
25-
final userMap = loadYaml(content) as Map?;
18+
Config loadPubspecConfig(File pubspecFile, {File? buildFile}) {
19+
final pubspecLocaleHint = normalize(
20+
join(basename(pubspecFile.parent.path), basename(pubspecFile.path)),
21+
);
22+
final buildLocaleHint = buildFile != null && buildFile.existsSync()
23+
? ', ${normalize(
24+
join(basename(buildFile.parent.path), basename(buildFile.path)),
25+
)} '
26+
: '';
27+
28+
stdout.writeln(
29+
'$flutterGenVersion Loading ... $pubspecLocaleHint$buildLocaleHint',
30+
);
31+
2632
final defaultMap = loadYaml(configDefaultYamlContent) as Map?;
27-
final mergedMap = mergeMap([defaultMap, userMap]);
33+
34+
final pubspecContent = pubspecFile.readAsStringSync();
35+
final pubspecMap = loadYaml(pubspecContent) as Map?;
36+
37+
var mergedMap = mergeMap([defaultMap, pubspecMap]);
38+
39+
if (buildFile != null && buildFile.existsSync()) {
40+
final buildContent = buildFile.readAsStringSync();
41+
final rawMap = loadYaml(buildContent) as Map?;
42+
final optionBuildMap = rawMap?['targets']?[r'$default']?['builders']
43+
?['flutter_gen']?['options'];
44+
45+
if (optionBuildMap != null) {
46+
final buildMap = {'flutter_gen': optionBuildMap};
47+
mergedMap = mergeMap([mergedMap, buildMap]);
48+
}
49+
}
50+
2851
final pubspec = Pubspec.fromJson(mergedMap);
2952
return Config._(pubspec: pubspec, pubspecFile: pubspecFile);
3053
}
3154

32-
Config? loadPubspecConfigOrNull(File pubspecFile) {
55+
Config? loadPubspecConfigOrNull(File pubspecFile, {File? buildFile}) {
3356
try {
34-
return loadPubspecConfig(pubspecFile);
57+
return loadPubspecConfig(pubspecFile, buildFile: buildFile);
3558
} on FileSystemException catch (e) {
3659
stderr.writeln(e.message);
3760
} on InvalidSettingsException catch (e) {

packages/core/test/flutter_gen_test.dart

+22
Original file line numberDiff line numberDiff line change
@@ -180,5 +180,27 @@ void main() {
180180
expect(File('test_resources/lib/gen/$fonts').existsSync(), false);
181181
expect(File('test_resources/lib/gen/$colors').existsSync(), false);
182182
});
183+
184+
test('with build_output.yaml', () async {
185+
const pubspec = 'test_resources/pubspec_normal.yaml';
186+
const build = 'test_resources/build_output.yaml';
187+
const assets = 'pubspec_assets.gen.dart';
188+
const colors = 'pubspec_colors.gen.dart';
189+
const fonts = 'pubspec_fonts.gen.dart';
190+
191+
await FlutterGenerator(
192+
File(pubspec),
193+
buildFile: File(build),
194+
assetsName: assets,
195+
colorsName: colors,
196+
fontsName: fonts,
197+
).build();
198+
expect(File('test_resources/lib/build_gen/$assets').readAsStringSync(),
199+
isNotEmpty);
200+
expect(File('test_resources/lib/build_gen/$fonts').readAsStringSync(),
201+
isNotEmpty);
202+
expect(File('test_resources/lib/build_gen/$colors').readAsStringSync(),
203+
isNotEmpty);
204+
});
183205
});
184206
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
name: test
2+
3+
targets:
4+
$default:
5+
builders:
6+
flutter_gen:
7+
options:
8+
output: lib/build_gen/

packages/runner/lib/flutter_gen_runner.dart

+9-2
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,15 @@ class FlutterGenBuilder extends Builder {
2121
);
2222
}
2323

24-
final generator = FlutterGenerator(File('pubspec.yaml'));
25-
late final _config = loadPubspecConfigOrNull(generator.pubspecFile);
24+
final generator = FlutterGenerator(
25+
File('pubspec.yaml'),
26+
buildFile: File('build.yaml'),
27+
);
28+
29+
late final _config = loadPubspecConfigOrNull(
30+
generator.pubspecFile,
31+
buildFile: generator.buildFile,
32+
);
2633
_FlutterGenBuilderState? _currentState;
2734

2835
@override

0 commit comments

Comments
 (0)