Skip to content

Commit 32d78f1

Browse files
committed
handling invalid settings
1 parent 324cc4d commit 32d78f1

File tree

10 files changed

+126
-97
lines changed

10 files changed

+126
-97
lines changed

bin/flutter_gen_command.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import 'dart:io';
22

33
import 'package:args/args.dart';
4-
import 'package:flutter_gen/flutter_generator.dart';
4+
import 'package:flutter_gen/src/flutter_generator.dart';
55
import 'package:flutter_gen/src/utils/cast.dart';
66

77
void main(List<String> args) {

build.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ targets:
66

77
builders:
88
flutter_gen:
9-
import: "package:flutter_gen/flutter_generator.dart"
9+
import: "package:flutter_gen/build.dart"
1010
builder_factories: [ "build" ]
1111
build_extensions: { "$lib$": [ ".gen.dart" ] }
1212
auto_apply: dependents

lib/build.dart

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import 'dart:io';
2+
3+
import 'package:build/build.dart';
4+
5+
import 'src/flutter_generator.dart';
6+
7+
Builder build(BuilderOptions options) {
8+
Future(() async {
9+
await FlutterGenerator(File('pubspec.yaml')).build();
10+
});
11+
return EmptyBuilder();
12+
}
13+
14+
class EmptyBuilder extends Builder {
15+
@override
16+
Future<void> build(BuildStep buildStep) async {}
17+
18+
@override
19+
Map<String, List<String>> get buildExtensions => {};
20+
}

lib/flutter_generator.dart

Lines changed: 0 additions & 86 deletions
This file was deleted.

lib/src/flutter_generator.dart

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
import 'dart:io';
2+
3+
import 'package:dart_style/dart_style.dart';
4+
import 'package:path/path.dart';
5+
6+
import 'generators/assets_generator.dart';
7+
import 'generators/colors_generator.dart';
8+
import 'generators/fonts_generator.dart';
9+
import 'settings/config.dart';
10+
import 'utils/error.dart';
11+
import 'utils/file.dart';
12+
13+
class FlutterGenerator {
14+
const FlutterGenerator(this.pubspecFile);
15+
16+
final File pubspecFile;
17+
18+
Future<void> build() async {
19+
final config = Config(pubspecFile);
20+
try {
21+
await config.load();
22+
} on FormatException catch (e) {
23+
stderr.writeln(e.message);
24+
return;
25+
} on FileSystemException catch (e) {
26+
stderr.writeln(e.message);
27+
return;
28+
}
29+
30+
var output = Config.defaultOutput;
31+
var lineLength = Config.defaultLineLength;
32+
33+
if (config.hasFlutterGen) {
34+
output = config.flutterGen.output;
35+
lineLength = config.flutterGen.lineLength;
36+
final formatter = DartFormatter(pageWidth: lineLength, lineEnding: '\n');
37+
38+
if (config.flutterGen.hasColors) {
39+
try {
40+
final generated =
41+
generateColors(pubspecFile, formatter, config.flutterGen.colors);
42+
final colors = File(normalize(
43+
join(pubspecFile.parent.path, output, 'colors.gen.dart')));
44+
writeAsString(generated, file: colors);
45+
print('Generated: ${colors.absolute.path}');
46+
} on InvalidSettingsException catch (e) {
47+
stderr.writeln(e.message);
48+
}
49+
}
50+
}
51+
52+
if (config.hasFlutter) {
53+
final formatter = DartFormatter(pageWidth: lineLength, lineEnding: '\n');
54+
55+
if (config.flutter.hasAssets) {
56+
try {
57+
final generated = generateAssets(
58+
pubspecFile, formatter, config.flutterGen, config.flutter.assets);
59+
final assets = File(normalize(
60+
join(pubspecFile.parent.path, output, 'assets.gen.dart')));
61+
writeAsString(generated, file: assets);
62+
print('Generated: ${assets.absolute.path}');
63+
} on InvalidSettingsException catch (e) {
64+
stderr.writeln(e.message);
65+
}
66+
}
67+
68+
if (config.flutter.hasFonts) {
69+
try {
70+
final generated = generateFonts(formatter, config.flutter.fonts);
71+
final fonts = File(normalize(
72+
join(pubspecFile.parent.path, output, 'fonts.gen.dart')));
73+
writeAsString(generated, file: fonts);
74+
print('Generated: ${fonts.absolute.path}');
75+
} on InvalidSettingsException catch (e) {
76+
stderr.writeln(e.message);
77+
}
78+
}
79+
}
80+
81+
print('FlutterGen finished.');
82+
}
83+
}

lib/src/generators/assets_generator.dart

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,17 @@ import '../settings/asset_type.dart';
88
import '../settings/flutter.dart';
99
import '../settings/flutter_gen.dart';
1010
import '../utils/camel_case.dart';
11+
import '../utils/error.dart';
1112
import 'generator_helper.dart';
1213
import 'integrations/integration.dart';
1314
import 'integrations/svg_integration.dart';
1415

1516
String generateAssets(File pubspecFile, DartFormatter formatter,
1617
FlutterGen flutterGen, FlutterAssets assets) {
17-
assert(assets != null && assets.hasAssets,
18-
throw 'The value of "flutter/assets:" is incorrect.');
18+
if (assets == null || !assets.hasAssets) {
19+
throw InvalidSettingsException(
20+
'The value of "flutter/assets:" is incorrect.');
21+
}
1922

2023
final importsBuffer = StringBuffer();
2124
final classesBuffer = StringBuffer();

lib/src/generators/colors_generator.dart

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,15 @@ import '../settings/color_path.dart';
99
import '../settings/flutter_gen.dart';
1010
import '../utils/camel_case.dart';
1111
import '../utils/color.dart';
12+
import '../utils/error.dart';
1213
import 'generator_helper.dart';
1314

1415
String generateColors(
1516
File pubspecFile, DartFormatter formatter, FlutterGenColors colors) {
16-
assert(
17-
colors != null, throw 'The value of "flutter_gen/colors:" is incorrect.');
18-
assert(colors.hasInputs,
19-
throw 'The value of "flutter_gen/colors/inputs:" is incorrect.');
17+
if (colors == null || !colors.hasInputs) {
18+
throw InvalidSettingsException(
19+
'The value of "flutter_gen/colors:" is incorrect.');
20+
}
2021

2122
final buffer = StringBuffer();
2223
buffer.writeln(header);

lib/src/generators/fonts_generator.dart

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,14 @@ import 'package:yaml/yaml.dart';
55
import '../settings/flutter.dart';
66
import '../utils/camel_case.dart';
77
import '../utils/cast.dart';
8+
import '../utils/error.dart';
89
import 'generator_helper.dart';
910

1011
String generateFonts(DartFormatter formatter, FlutterFonts fonts) {
11-
assert(fonts != null && fonts.hasFonts,
12-
throw 'The value of "flutter/fonts:" is incorrect.');
12+
if (fonts == null || !fonts.hasFonts) {
13+
throw InvalidSettingsException(
14+
'The value of "flutter/fonts:" is incorrect.');
15+
}
1316

1417
final buffer = StringBuffer();
1518
buffer.writeln(header);

lib/src/utils/error.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
class InvalidSettingsException implements Exception {
2+
const InvalidSettingsException(this.message);
3+
4+
final String message;
5+
}

test/flutter_gen_test.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import 'dart:io';
33

44
import 'package:dart_style/dart_style.dart';
5-
import 'package:flutter_gen/flutter_generator.dart';
5+
import 'package:flutter_gen/src/flutter_generator.dart';
66
import 'package:flutter_gen/src/generators/assets_generator.dart';
77
import 'package:flutter_gen/src/generators/colors_generator.dart';
88
import 'package:flutter_gen/src/generators/fonts_generator.dart';

0 commit comments

Comments
 (0)