Skip to content

Commit 717f0f4

Browse files
committed
Generate camelCase style
1 parent 7aa122d commit 717f0f4

File tree

3 files changed

+172
-4
lines changed

3 files changed

+172
-4
lines changed

lib/src/generators/assets_generator.dart

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,8 @@ String generateAssets(
4343
classesBuffer
4444
.writeln(_snakeCaseStyleDefinition(pubspecFile, assets, integrations));
4545
} else if (assetsGenStyle == 'camel-case') {
46-
throw UnimplementedError();
46+
classesBuffer
47+
.writeln(_camelCaseStyleDefinition(pubspecFile, assets, integrations));
4748
} else {
4849
throw 'The value of "flutter_gen/assets/style." is incorrect.';
4950
}
@@ -213,11 +214,43 @@ String _dotDelimiterStyleDefinition(
213214
return buffer.toString();
214215
}
215216

217+
/// Generate style like Assets.fooBar
218+
String _camelCaseStyleDefinition(
219+
File pubspecFile,
220+
FlutterAssets assets,
221+
List<Integration> integrations,
222+
) {
223+
return _flatStyleDefinition(
224+
pubspecFile,
225+
assets,
226+
integrations,
227+
(e) => withoutExtension(e.path)
228+
.replaceFirst(RegExp(r'asset(s)?/'), '')
229+
.camelCase(),
230+
);
231+
}
232+
216233
/// Generate style like Assets.foo_bar
217234
String _snakeCaseStyleDefinition(
218235
File pubspecFile,
219236
FlutterAssets assets,
220237
List<Integration> integrations,
238+
) {
239+
return _flatStyleDefinition(
240+
pubspecFile,
241+
assets,
242+
integrations,
243+
(e) => withoutExtension(e.path)
244+
.replaceFirst(RegExp(r'asset(s)?/'), '')
245+
.snakeCase(),
246+
);
247+
}
248+
249+
String _flatStyleDefinition(
250+
File pubspecFile,
251+
FlutterAssets assets,
252+
List<Integration> integrations,
253+
String Function(AssetType) createName,
221254
) {
222255
final statements = _getAssetRelativePathList(pubspecFile, assets)
223256
.distinct()
@@ -227,9 +260,7 @@ String _snakeCaseStyleDefinition(
227260
pubspecFile,
228261
AssetType(relativePath),
229262
integrations,
230-
(e) => withoutExtension(e.path)
231-
.replaceFirst(RegExp(r'asset(s)?/'), '')
232-
.snakeCase(),
263+
createName,
233264
),
234265
)
235266
.toList();
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
/// GENERATED CODE - DO NOT MODIFY BY HAND
2+
/// *****************************************************
3+
/// FlutterGen
4+
/// *****************************************************
5+
6+
import 'package:flutter/widgets.dart';
7+
import 'package:flutter_svg/flutter_svg.dart';
8+
import 'package:flutter/services.dart';
9+
10+
class Assets {
11+
Assets._();
12+
13+
static const AssetGenImage imagesChip1 =
14+
AssetGenImage('assets/images/chip1.jpg');
15+
static const AssetGenImage imagesChip2 =
16+
AssetGenImage('assets/images/chip2.jpg');
17+
static const AssetGenImage imagesChip3Chip3 =
18+
AssetGenImage('assets/images/chip3/chip3.jpg');
19+
static const AssetGenImage imagesChip4Chip4 =
20+
AssetGenImage('assets/images/chip4/chip4.jpg');
21+
static const SvgGenImage imagesIconsFuchsia =
22+
SvgGenImage('assets/images/icons/fuchsia.svg');
23+
static const SvgGenImage imagesIconsKmm =
24+
SvgGenImage('assets/images/icons/kmm.svg');
25+
static const SvgGenImage imagesIconsPaint =
26+
SvgGenImage('assets/images/icons/paint.svg');
27+
static const AssetGenImage imagesLogo =
28+
AssetGenImage('assets/images/logo.png');
29+
static const AssetGenImage imagesProfile =
30+
AssetGenImage('assets/images/profile.jpg');
31+
static const String jsonFruits = 'assets/json/fruits.json';
32+
static const AssetGenImage picturesChip5 =
33+
AssetGenImage('pictures/chip5.jpg');
34+
}
35+
36+
class AssetGenImage extends AssetImage {
37+
const AssetGenImage(String assetName)
38+
: _assetName = assetName,
39+
super(assetName);
40+
final String _assetName;
41+
42+
Image image({
43+
ImageFrameBuilder frameBuilder,
44+
ImageLoadingBuilder loadingBuilder,
45+
ImageErrorWidgetBuilder errorBuilder,
46+
String semanticLabel,
47+
bool excludeFromSemantics = false,
48+
double width,
49+
double height,
50+
Color color,
51+
BlendMode colorBlendMode,
52+
BoxFit fit,
53+
AlignmentGeometry alignment = Alignment.center,
54+
ImageRepeat repeat = ImageRepeat.noRepeat,
55+
Rect centerSlice,
56+
bool matchTextDirection = false,
57+
bool gaplessPlayback = false,
58+
bool isAntiAlias = false,
59+
FilterQuality filterQuality = FilterQuality.low,
60+
}) {
61+
return Image(
62+
image: this,
63+
frameBuilder: frameBuilder,
64+
loadingBuilder: loadingBuilder,
65+
errorBuilder: errorBuilder,
66+
semanticLabel: semanticLabel,
67+
excludeFromSemantics: excludeFromSemantics,
68+
width: width,
69+
height: height,
70+
color: color,
71+
colorBlendMode: colorBlendMode,
72+
fit: fit,
73+
alignment: alignment,
74+
repeat: repeat,
75+
centerSlice: centerSlice,
76+
matchTextDirection: matchTextDirection,
77+
gaplessPlayback: gaplessPlayback,
78+
isAntiAlias: isAntiAlias,
79+
filterQuality: filterQuality,
80+
);
81+
}
82+
83+
String get path => _assetName;
84+
}
85+
86+
class SvgGenImage {
87+
const SvgGenImage(this._assetName);
88+
89+
final String _assetName;
90+
91+
SvgPicture svg({
92+
bool matchTextDirection = false,
93+
AssetBundle bundle,
94+
String package,
95+
double width,
96+
double height,
97+
BoxFit fit = BoxFit.contain,
98+
AlignmentGeometry alignment = Alignment.center,
99+
bool allowDrawingOutsideViewBox = false,
100+
WidgetBuilder placeholderBuilder,
101+
Color color,
102+
BlendMode colorBlendMode = BlendMode.srcIn,
103+
String semanticsLabel,
104+
bool excludeFromSemantics = false,
105+
Clip clipBehavior = Clip.hardEdge,
106+
}) {
107+
return SvgPicture.asset(
108+
_assetName,
109+
matchTextDirection: matchTextDirection,
110+
);
111+
}
112+
113+
String get path => _assetName;
114+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
name: test
2+
3+
flutter_gen:
4+
output: lib/gen/ # Optional (default: lib/gen/)
5+
lineLength: 80 # Optional (default: 80)
6+
7+
assets:
8+
style: camel-case
9+
10+
integrations:
11+
flutter_svg: true
12+
13+
flutter:
14+
assets:
15+
- assets/images
16+
- assets/images/chip3/chip3.jpg
17+
- assets/images/chip3/chip3.jpg # duplicated
18+
- assets/images/chip4/
19+
- assets/images/icons/fuchsia.svg
20+
- assets/images/icons/kmm.svg
21+
- assets/images/icons/paint.svg
22+
- assets/json/fruits.json
23+
- pictures/chip5.jpg

0 commit comments

Comments
 (0)