Skip to content

Commit 8b5ce6d

Browse files
authored
⚡️ Improvements (#643)
1 parent 51c8eab commit 8b5ce6d

30 files changed

+145
-94
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ This would add the package constant to the generated class. For example:
255255

256256
```dart
257257
class Assets {
258-
Assets._();
258+
const Assets._();
259259
260260
static const String package = 'test';
261261

analysis_options.yaml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,10 @@ linter:
1818
avoid_classes_with_only_static_members: true
1919
directives_ordering: true
2020
flutter_style_todos: true
21-
prefer_int_literals: true
21+
prefer_const_constructors: true
22+
prefer_const_constructors_in_immutables: true
2223
prefer_final_in_for_each: true
24+
prefer_int_literals: true
2325
prefer_single_quotes: true
2426
# require_trailing_commas: true
2527
# sort_constructors_first: true

examples/example/test/svg_integrations_test.dart

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -19,34 +19,42 @@ class SvgIntegrationsTest extends StatelessWidget {
1919

2020
void main() {
2121
group('Test SvgTheme behavior', () {
22-
var testTheme = SvgTheme(currentColor: Colors.red);
22+
const testTheme = SvgTheme(currentColor: Colors.red);
2323

24-
testWidgets('Passed theme should be null', (widgetTester) async {
25-
await widgetTester.pumpWidget(SvgIntegrationsTest(theme: testTheme));
24+
testWidgets(
25+
'Passed theme should be null',
26+
(widgetTester) async {
27+
await widgetTester.pumpWidget(
28+
const SvgIntegrationsTest(theme: testTheme),
29+
);
2630

27-
var finder = find.byType(SvgPicture);
28-
expect(finder, findsOneWidget);
31+
var finder = find.byType(SvgPicture);
32+
expect(finder, findsOneWidget);
2933

30-
var svgWidget = widgetTester.widget<SvgPicture>(finder);
31-
var loader = svgWidget.bytesLoader as SvgAssetLoader;
34+
var svgWidget = widgetTester.widget<SvgPicture>(finder);
35+
var loader = svgWidget.bytesLoader as SvgAssetLoader;
3236

33-
expect(loader.theme, isNull);
34-
});
37+
expect(loader.theme, isNull);
38+
},
39+
);
3540

3641
testWidgets(
37-
'Taken theme of SvgAssetLoader equals with one passed to parent DefaultSvgTheme',
38-
(widgetTester) async {
39-
await widgetTester.pumpWidget(SvgIntegrationsTest(theme: testTheme));
42+
'Taken theme of SvgAssetLoader equals with one passed to parent DefaultSvgTheme',
43+
(widgetTester) async {
44+
await widgetTester.pumpWidget(
45+
const SvgIntegrationsTest(theme: testTheme),
46+
);
4047

41-
var finder = find.byType(SvgPicture);
42-
expect(finder, findsOneWidget);
48+
var finder = find.byType(SvgPicture);
49+
expect(finder, findsOneWidget);
4350

44-
var svgWidget = widgetTester.widget<SvgPicture>(finder);
45-
var loader = svgWidget.bytesLoader as SvgAssetLoader;
51+
var svgWidget = widgetTester.widget<SvgPicture>(finder);
52+
var loader = svgWidget.bytesLoader as SvgAssetLoader;
4653

47-
var svgCacheKey = loader.cacheKey(widgetTester.element(finder));
54+
var svgCacheKey = loader.cacheKey(widgetTester.element(finder));
4855

49-
expect(svgCacheKey.theme, testTheme);
50-
});
56+
expect(svgCacheKey.theme, testTheme);
57+
},
58+
);
5159
});
5260
}

packages/core/lib/generators/assets_generator.dart

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -111,18 +111,19 @@ Future<String> generateAssets(
111111
}
112112

113113
final classesBuffer = StringBuffer();
114-
if (config.flutterGen.assets.outputs.isDotDelimiterStyle) {
115-
final definition = await _dotDelimiterStyleDefinition(config, integrations);
116-
classesBuffer.writeln(definition);
117-
} else if (config.flutterGen.assets.outputs.isSnakeCaseStyle) {
118-
final definition = await _snakeCaseStyleDefinition(config, integrations);
119-
classesBuffer.writeln(definition);
120-
} else if (config.flutterGen.assets.outputs.isCamelCaseStyle) {
121-
final definition = await _camelCaseStyleDefinition(config, integrations);
122-
classesBuffer.writeln(definition);
123-
} else {
124-
throw 'The value of "flutter_gen/assets/style." is incorrect.';
114+
final _StyleDefinition definition;
115+
switch (config.flutterGen.assets.outputs.style) {
116+
case FlutterGenElementAssetsOutputsStyle.dotDelimiterStyle:
117+
definition = _dotDelimiterStyleDefinition;
118+
break;
119+
case FlutterGenElementAssetsOutputsStyle.snakeCaseStyle:
120+
definition = _snakeCaseStyleDefinition;
121+
break;
122+
case FlutterGenElementAssetsOutputsStyle.camelCaseStyle:
123+
definition = _camelCaseStyleDefinition;
124+
break;
125125
}
126+
classesBuffer.writeln(await definition(config, integrations));
126127

127128
final imports = <Import>{};
128129
for (final integration in integrations.where((e) => e.isEnabled)) {
@@ -400,6 +401,11 @@ Future<String> _dotDelimiterStyleDefinition(
400401
return buffer.toString();
401402
}
402403

404+
typedef _StyleDefinition = Future<String> Function(
405+
AssetsGenConfig config,
406+
List<Integration> integrations,
407+
);
408+
403409
/// Generate style like Assets.foo_bar
404410
Future<String> _snakeCaseStyleDefinition(
405411
AssetsGenConfig config,
@@ -520,7 +526,7 @@ String _assetsClassDefinition(
520526
) {
521527
return '''
522528
class $className {
523-
$className._();
529+
const $className._();
524530
${packageName != null ? "\n static const String package = '$packageName';" : ''}
525531
526532
$statementsBlock

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@ class ImageIntegration extends Integration {
2020
isPackage ? "'packages/$packageName/\$_assetName'" : '_assetName';
2121

2222
@override
23-
List<Import> get requiredImports => [Import('package:flutter/widgets.dart')];
23+
List<Import> get requiredImports => const [
24+
Import('package:flutter/widgets.dart'),
25+
];
2426

2527
@override
2628
String get classOutput => _classDefinition;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ class LottieIntegration extends Integration {
2929
String get packageExpression => isPackage ? ' = package' : '';
3030

3131
@override
32-
List<Import> get requiredImports => [
32+
List<Import> get requiredImports => const [
3333
Import('package:flutter/widgets.dart'),
3434
Import('package:lottie/lottie.dart', alias: '_lottie'),
3535
];

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ class RiveIntegration extends Integration {
66
String? get packageExpression => isPackage ? 'packages/$packageName/' : null;
77

88
@override
9-
List<Import> get requiredImports => [
9+
List<Import> get requiredImports => const [
1010
Import('package:flutter/widgets.dart'),
1111
Import('package:rive/rive.dart', alias: '_rive'),
1212
];

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ class SvgIntegration extends Integration {
1010
String get packageExpression => isPackage ? ' = package' : '';
1111

1212
@override
13-
List<Import> get requiredImports => [
13+
List<Import> get requiredImports => const [
1414
Import('package:flutter/widgets.dart'),
1515
Import('package:flutter/services.dart'),
1616
Import('package:flutter_svg/flutter_svg.dart', alias: '_svg'),

packages/core/lib/settings/pubspec.dart

Lines changed: 33 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ part 'pubspec.g.dart';
66

77
@JsonSerializable(disallowUnrecognizedKeys: false)
88
class Pubspec {
9-
Pubspec({
9+
const Pubspec({
1010
required this.packageName,
1111
required this.flutterGen,
1212
required this.flutter,
@@ -26,7 +26,7 @@ class Pubspec {
2626

2727
@JsonSerializable(disallowUnrecognizedKeys: false)
2828
class Flutter {
29-
Flutter({
29+
const Flutter({
3030
required this.assets,
3131
required this.fonts,
3232
});
@@ -42,7 +42,7 @@ class Flutter {
4242

4343
@JsonSerializable(disallowUnrecognizedKeys: false)
4444
class FlutterFonts {
45-
FlutterFonts({required this.family});
45+
const FlutterFonts({required this.family});
4646

4747
@JsonKey(name: 'family', required: true)
4848
final String family;
@@ -52,7 +52,7 @@ class FlutterFonts {
5252

5353
@JsonSerializable()
5454
class FlutterGen {
55-
FlutterGen({
55+
const FlutterGen({
5656
required this.output,
5757
required this.lineLength,
5858
required this.parseMetadata,
@@ -88,7 +88,7 @@ class FlutterGen {
8888

8989
@JsonSerializable()
9090
class FlutterGenColors {
91-
FlutterGenColors({
91+
const FlutterGenColors({
9292
required this.enabled,
9393
required this.inputs,
9494
required this.outputs,
@@ -109,7 +109,7 @@ class FlutterGenColors {
109109

110110
@JsonSerializable()
111111
class FlutterGenAssets {
112-
FlutterGenAssets({
112+
const FlutterGenAssets({
113113
required this.enabled,
114114
this.packageParameterEnabled,
115115
this.style,
@@ -140,7 +140,7 @@ class FlutterGenAssets {
140140

141141
@JsonSerializable()
142142
class FlutterGenFonts {
143-
FlutterGenFonts({
143+
const FlutterGenFonts({
144144
required this.enabled,
145145
required this.outputs,
146146
});
@@ -156,7 +156,7 @@ class FlutterGenFonts {
156156

157157
@JsonSerializable()
158158
class FlutterGenIntegrations {
159-
FlutterGenIntegrations({
159+
const FlutterGenIntegrations({
160160
required this.flutterSvg,
161161
required this.rive,
162162
required this.lottie,
@@ -177,7 +177,7 @@ class FlutterGenIntegrations {
177177

178178
@JsonSerializable()
179179
class FlutterGenElementOutputs {
180-
FlutterGenElementOutputs({
180+
const FlutterGenElementOutputs({
181181
required this.className,
182182
});
183183

@@ -188,24 +188,34 @@ class FlutterGenElementOutputs {
188188
_$FlutterGenElementOutputsFromJson(json);
189189
}
190190

191+
enum FlutterGenElementAssetsOutputsStyle {
192+
dotDelimiterStyle('dot-delimiter'),
193+
snakeCaseStyle('snake-case'),
194+
camelCaseStyle('camel-case'),
195+
;
196+
197+
const FlutterGenElementAssetsOutputsStyle(this.name);
198+
199+
factory FlutterGenElementAssetsOutputsStyle.fromJson(String json) {
200+
return values.firstWhere(
201+
(e) => e.name == json,
202+
orElse: () => throw ArgumentError.value(json, 'style'),
203+
);
204+
}
205+
206+
final String name;
207+
208+
String toJson() => name;
209+
}
210+
191211
@JsonSerializable()
192212
class FlutterGenElementAssetsOutputs extends FlutterGenElementOutputs {
193-
static const String dotDelimiterStyle = 'dot-delimiter';
194-
static const String snakeCaseStyle = 'snake-case';
195-
static const String camelCaseStyle = 'camel-case';
196-
197-
FlutterGenElementAssetsOutputs({
213+
const FlutterGenElementAssetsOutputs({
198214
required String className,
199215
required this.packageParameterEnabled,
200216
required this.directoryPathEnabled,
201217
required this.style,
202-
}) : super(className: className) {
203-
if (style != dotDelimiterStyle &&
204-
style != snakeCaseStyle &&
205-
style != camelCaseStyle) {
206-
throw ArgumentError.value(style, 'style');
207-
}
208-
}
218+
}) : super(className: className);
209219

210220
@JsonKey(name: 'package_parameter_enabled', defaultValue: false)
211221
final bool packageParameterEnabled;
@@ -214,21 +224,15 @@ class FlutterGenElementAssetsOutputs extends FlutterGenElementOutputs {
214224
final bool directoryPathEnabled;
215225

216226
@JsonKey(name: 'style', required: true)
217-
final String style;
218-
219-
bool get isDotDelimiterStyle => style == dotDelimiterStyle;
220-
221-
bool get isSnakeCaseStyle => style == snakeCaseStyle;
222-
223-
bool get isCamelCaseStyle => style == camelCaseStyle;
227+
final FlutterGenElementAssetsOutputsStyle style;
224228

225229
factory FlutterGenElementAssetsOutputs.fromJson(Map json) =>
226230
_$FlutterGenElementAssetsOutputsFromJson(json);
227231
}
228232

229233
@JsonSerializable()
230234
class FlutterGenElementFontsOutputs extends FlutterGenElementOutputs {
231-
FlutterGenElementFontsOutputs({
235+
const FlutterGenElementFontsOutputs({
232236
required super.className,
233237
required this.packageParameterEnabled,
234238
});

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

Lines changed: 2 additions & 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)