Skip to content

Commit 2eae276

Browse files
authored
Merge pull request #36 from FlutterGen/error-handling
Handling invalid settings and tests
2 parents d561ba8 + be04a28 commit 2eae276

18 files changed

+342
-159
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 renamed to lib/src/flutter_generator.dart

Lines changed: 9 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,14 @@
11
import 'dart:io';
22

3-
import 'package:build/build.dart';
43
import 'package:dart_style/dart_style.dart';
54
import 'package:path/path.dart';
65

7-
import 'src/generators/assets_generator.dart';
8-
import 'src/generators/colors_generator.dart';
9-
import 'src/generators/fonts_generator.dart';
10-
import 'src/settings/config.dart';
11-
import 'src/utils/file.dart';
12-
13-
Builder build(BuilderOptions options) {
14-
Future(() async {
15-
await FlutterGenerator(File('pubspec.yaml')).build();
16-
});
17-
return EmptyBuilder();
18-
}
19-
20-
class EmptyBuilder extends Builder {
21-
@override
22-
Future<void> build(BuildStep buildStep) async {}
23-
24-
@override
25-
Map<String, List<String>> get buildExtensions => {};
26-
}
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';
2712

2813
class FlutterGenerator {
2914
const FlutterGenerator(this.pubspecFile);
@@ -34,12 +19,12 @@ class FlutterGenerator {
3419
final config = Config(pubspecFile);
3520
try {
3621
await config.load();
37-
} on FormatException catch (e) {
22+
} on InvalidSettingsException catch (e) {
3823
stderr.writeln(e.message);
39-
exit(-1);
24+
return;
4025
} on FileSystemException catch (e) {
4126
stderr.writeln(e.message);
42-
exit(-1);
27+
return;
4328
}
4429

4530
var output = Config.defaultOutput;

lib/src/generators/assets_generator.dart

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,13 @@ import 'dart:collection';
22
import 'dart:io';
33

44
import 'package:dart_style/dart_style.dart';
5-
import 'package:path/path.dart';
65
import 'package:dartx/dartx.dart';
6+
import 'package:path/path.dart';
77

88
import '../settings/asset_type.dart';
99
import '../settings/flutter.dart';
1010
import '../settings/flutter_gen.dart';
11+
import '../utils/error.dart';
1112
import '../utils/string.dart';
1213
import 'generator_helper.dart';
1314
import 'integrations/integration.dart';
@@ -19,8 +20,10 @@ String generateAssets(
1920
FlutterGen flutterGen,
2021
FlutterAssets assets,
2122
) {
22-
assert(assets != null && assets.hasAssets,
23-
throw 'The value of "flutter/assets:" is incorrect.');
23+
if (assets == null || !assets.hasAssets) {
24+
throw InvalidSettingsException(
25+
'The value of "flutter/assets:" is incorrect.');
26+
}
2427

2528
final importsBuffer = StringBuffer();
2629
final classesBuffer = StringBuffer();

lib/src/generators/colors_generator.dart

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,16 @@ import 'package:xml/xml.dart';
88
import '../settings/color_path.dart';
99
import '../settings/flutter_gen.dart';
1010
import '../utils/color.dart';
11+
import '../utils/error.dart';
1112
import '../utils/string.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
@@ -4,12 +4,15 @@ import 'package:yaml/yaml.dart';
44

55
import '../settings/flutter.dart';
66
import '../utils/cast.dart';
7+
import '../utils/error.dart';
78
import '../utils/string.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/settings/config.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import 'package:path/path.dart';
44
import 'package:yaml/yaml.dart';
55

66
import '../utils/cast.dart';
7+
import '../utils/error.dart';
78
import 'flutter.dart';
89
import 'flutter_gen.dart';
910

@@ -29,7 +30,7 @@ class Config {
2930
'Cannot open pubspec.yaml: ${pubspecFile.absolute}');
3031
});
3132
if (pubspec.isEmpty) {
32-
throw const FormatException('pubspec.yaml is empty');
33+
throw const InvalidSettingsException('pubspec.yaml is empty');
3334
}
3435

3536
final properties = safeCast<YamlMap>(loadYaml(pubspec));
@@ -42,7 +43,7 @@ class Config {
4243
}
4344

4445
if (!hasFlutter && !hasFlutterGen) {
45-
throw const FormatException('FlutterGen settings not founded.');
46+
throw const InvalidSettingsException('FlutterGen settings not founded.');
4647
}
4748

4849
return this;

lib/src/settings/flutter_gen.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ class FlutterGen {
4444

4545
FlutterGenColors colors;
4646

47-
bool get hasColors => colors != null;
47+
bool get hasColors => colors != null && colors.hasInputs;
4848
}
4949

5050
class FlutterGenColors {

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+
}

0 commit comments

Comments
 (0)