-
-
Notifications
You must be signed in to change notification settings - Fork 142
/
flutter_generator.dart
92 lines (78 loc) · 2.72 KB
/
flutter_generator.dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
import 'dart:io';
import 'package:dart_style/dart_style.dart';
import 'package:path/path.dart';
import 'generators/assets_generator.dart';
import 'generators/colors_generator.dart';
import 'generators/fonts_generator.dart';
import 'settings/config.dart';
import 'utils/error.dart';
import 'utils/file.dart';
class FlutterGenerator {
const FlutterGenerator(
this.pubspecFile, {
this.assetsName = 'assets.gen.dart',
this.colorsName = 'colors.gen.dart',
this.fontsName = 'fonts.gen.dart',
});
final File pubspecFile;
final String assetsName;
final String colorsName;
final String fontsName;
Future<Config?> getConfig() async {
Config config;
try {
config = await loadPubspecConfig(pubspecFile);
} on InvalidSettingsException catch (e) {
stderr.writeln(e.message);
return null;
} on FileSystemException catch (e) {
stderr.writeln(e.message);
return null;
}
return config;
}
Future<void> build({Config? config}) async {
config ??= await getConfig();
if (config == null) return;
final flutter = config.pubspec.flutter;
final flutterGen = config.pubspec.flutterGen;
final output = config.pubspec.flutterGen.output;
final lineLength = config.pubspec.flutterGen.lineLength;
final formatter = DartFormatter(pageWidth: lineLength, lineEnding: '\n');
final absoluteOutput =
Directory(normalize(join(pubspecFile.parent.path, output)));
if (!absoluteOutput.existsSync()) {
absoluteOutput.createSync(recursive: true);
}
if (flutterGen.colors.enabled && flutterGen.colors.inputs.isNotEmpty) {
final generated =
generateColors(pubspecFile, formatter, flutterGen.colors);
final colors =
File(normalize(join(pubspecFile.parent.path, output, colorsName)));
writeAsString(generated, file: colors);
stdout.writeln('Generated: ${colors.absolute.path}');
}
if (flutterGen.assets.enabled && flutter.assets.isNotEmpty) {
final generated = generateAssets(
AssetsGenConfig.fromConfig(pubspecFile, config),
formatter,
);
final assets =
File(normalize(join(pubspecFile.parent.path, output, assetsName)));
writeAsString(generated, file: assets);
stdout.writeln('Generated: ${assets.absolute.path}');
}
if (flutterGen.fonts.enabled && flutter.fonts.isNotEmpty) {
final generated = generateFonts(
formatter,
flutter.fonts,
genFonts: flutterGen.fonts,
);
final fonts =
File(normalize(join(pubspecFile.parent.path, output, fontsName)));
writeAsString(generated, file: fonts);
stdout.writeln('Generated: ${fonts.absolute.path}');
}
stdout.writeln('FlutterGen finished.');
}
}