diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index ff6aef189..59901206c 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -2,6 +2,3 @@
### What is the value of this and can you measure success?
-### Screenshots (Optional)
-
-
diff --git a/example/assets/images/icons/fuchsia.svg b/example/assets/images/icons/fuchsia.svg
new file mode 100644
index 000000000..b6fb406aa
--- /dev/null
+++ b/example/assets/images/icons/fuchsia.svg
@@ -0,0 +1,9 @@
+
+
+
+
\ No newline at end of file
diff --git a/example/assets/images/icons/kmm.svg b/example/assets/images/icons/kmm.svg
new file mode 100644
index 000000000..8e7df0754
--- /dev/null
+++ b/example/assets/images/icons/kmm.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/example/lib/gen/assets.gen.dart b/example/lib/gen/assets.gen.dart
index e96d2838b..5aa085454 100644
--- a/example/lib/gen/assets.gen.dart
+++ b/example/lib/gen/assets.gen.dart
@@ -4,6 +4,63 @@
/// *****************************************************
import 'package:flutter/widgets.dart';
+import 'package:flutter_svg/flutter_svg.dart';
+import 'package:flutter/services.dart';
+
+class $PicturesGen {
+ const $PicturesGen();
+
+ AssetGenImage get chip5 => const AssetGenImage('pictures/chip5.jpg');
+}
+
+class $AssetsImagesGen {
+ const $AssetsImagesGen();
+
+ AssetGenImage get chip2 => const AssetGenImage('assets/images/chip2.jpg');
+ AssetGenImage get chip1 => const AssetGenImage('assets/images/chip1.jpg');
+ AssetGenImage get logo => const AssetGenImage('assets/images/logo.png');
+ AssetGenImage get profile => const AssetGenImage('assets/images/profile.jpg');
+ $AssetsImagesChip3Gen get chip3 => const $AssetsImagesChip3Gen();
+ $AssetsImagesChip4Gen get chip4 => const $AssetsImagesChip4Gen();
+ $AssetsImagesIconsGen get icons => const $AssetsImagesIconsGen();
+}
+
+class $AssetsJsonGen {
+ const $AssetsJsonGen();
+
+ String get fruits => 'assets/json/fruits.json';
+}
+
+class $AssetsImagesChip3Gen {
+ const $AssetsImagesChip3Gen();
+
+ AssetGenImage get chip3 =>
+ const AssetGenImage('assets/images/chip3/chip3.jpg');
+}
+
+class $AssetsImagesChip4Gen {
+ const $AssetsImagesChip4Gen();
+
+ AssetGenImage get chip4 =>
+ const AssetGenImage('assets/images/chip4/chip4.jpg');
+}
+
+class $AssetsImagesIconsGen {
+ const $AssetsImagesIconsGen();
+
+ SvgGenImage get fuchsia =>
+ const SvgGenImage('assets/images/icons/fuchsia.svg');
+ SvgGenImage get kmm => const SvgGenImage('assets/images/icons/kmm.svg');
+ SvgGenImage get paint => const SvgGenImage('assets/images/icons/paint.svg');
+}
+
+class Assets {
+ Assets._();
+
+ static const $AssetsImagesGen images = $AssetsImagesGen();
+ static const $AssetsJsonGen json = $AssetsJsonGen();
+ static const $PicturesGen pictures = $PicturesGen();
+}
class AssetGenImage extends AssetImage {
const AssetGenImage(String assetName)
@@ -55,54 +112,32 @@ class AssetGenImage extends AssetImage {
String get path => _assetName;
}
-class $PicturesGen {
- const $PicturesGen();
+class SvgGenImage {
+ const SvgGenImage(this._assetName);
- AssetGenImage get chip5 => const AssetGenImage('pictures/chip5.jpg');
-}
-
-class $AssetsImagesGen {
- const $AssetsImagesGen();
-
- AssetGenImage get chip2 => const AssetGenImage('assets/images/chip2.jpg');
- AssetGenImage get chip1 => const AssetGenImage('assets/images/chip1.jpg');
- AssetGenImage get logo => const AssetGenImage('assets/images/logo.png');
- AssetGenImage get profile => const AssetGenImage('assets/images/profile.jpg');
- $AssetsImagesChip3Gen get chip3 => const $AssetsImagesChip3Gen();
- $AssetsImagesChip4Gen get chip4 => const $AssetsImagesChip4Gen();
- $AssetsImagesIconsGen get icons => const $AssetsImagesIconsGen();
-}
-
-class $AssetsJsonGen {
- const $AssetsJsonGen();
-
- String get fruits => 'assets/json/fruits.json';
-}
-
-class $AssetsImagesChip3Gen {
- const $AssetsImagesChip3Gen();
-
- AssetGenImage get chip3 =>
- const AssetGenImage('assets/images/chip3/chip3.jpg');
-}
-
-class $AssetsImagesChip4Gen {
- const $AssetsImagesChip4Gen();
-
- AssetGenImage get chip4 =>
- const AssetGenImage('assets/images/chip4/chip4.jpg');
-}
-
-class $AssetsImagesIconsGen {
- const $AssetsImagesIconsGen();
-
- String get paint => 'assets/images/icons/paint.svg';
-}
+ final String _assetName;
-class Assets {
- Assets._();
+ SvgPicture svg({
+ bool matchTextDirection = false,
+ AssetBundle bundle,
+ String package,
+ double width,
+ double height,
+ BoxFit fit = BoxFit.contain,
+ AlignmentGeometry alignment = Alignment.center,
+ bool allowDrawingOutsideViewBox = false,
+ WidgetBuilder placeholderBuilder,
+ Color color,
+ BlendMode colorBlendMode = BlendMode.srcIn,
+ String semanticsLabel,
+ bool excludeFromSemantics = false,
+ Clip clipBehavior = Clip.hardEdge,
+ }) {
+ return SvgPicture.asset(
+ _assetName,
+ matchTextDirection: matchTextDirection,
+ );
+ }
- static const $AssetsImagesGen images = $AssetsImagesGen();
- static const $AssetsJsonGen json = $AssetsJsonGen();
- static const $PicturesGen pictures = $PicturesGen();
+ String get path => _assetName;
}
diff --git a/example/lib/main.dart b/example/lib/main.dart
index 4845f84b4..e34325cfb 100644
--- a/example/lib/main.dart
+++ b/example/lib/main.dart
@@ -17,27 +17,36 @@ void main() {
title: const Text('FlutterGen'),
),
body: Center(
- child: Column(
- mainAxisAlignment: MainAxisAlignment.center,
- children: [
- // Auto generated image from FlutterGen.
- Image(image: Assets.images.chip1),
- Assets.pictures.chip5.image(
- width: 120,
- height: 120,
- fit: BoxFit.scaleDown,
- ),
- const Text(
- 'Hi there, I\'m FlutterGen',
- style: TextStyle(
- // Auto generated color from FlutterGen.
- color: ColorName.black60,
- // Auto generated font from FlutterGen.
- fontFamily: FontFamily.robotoMono,
- fontFamilyFallback: [FontFamily.raleway],
+ child: SingleChildScrollView(
+ child: Column(
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: [
+ // Auto generated image from FlutterGen.
+ Image(image: Assets.images.chip1),
+ Assets.images.icons.kmm.svg(),
+ Assets.images.icons.fuchsia.svg(),
+ Assets.images.icons.paint.svg(
+ width: 120,
+ height: 120
),
- ),
- ],
+ Assets.pictures.chip5.image(
+ width: 120,
+ height: 120,
+ fit: BoxFit.scaleDown,
+ ),
+ const Text(
+ 'Hi there, I\'m FlutterGen',
+ style: TextStyle(
+ // Auto generated color from FlutterGen.
+ color: ColorName.black60,
+
+ // Auto generated font from FlutterGen.
+ fontFamily: FontFamily.robotoMono,
+ fontFamilyFallback: [FontFamily.raleway],
+ ),
+ ),
+ ],
+ ),
),
),
),
diff --git a/example/pubspec.lock b/example/pubspec.lock
index 8e708e011..6fa0ffacc 100644
--- a/example/pubspec.lock
+++ b/example/pubspec.lock
@@ -28,14 +28,14 @@ packages:
name: async
url: "https://pub.dartlang.org"
source: hosted
- version: "2.4.2"
+ version: "2.5.0-nullsafety"
boolean_selector:
dependency: transitive
description:
name: boolean_selector
url: "https://pub.dartlang.org"
source: hosted
- version: "2.0.0"
+ version: "2.1.0-nullsafety"
build:
dependency: transitive
description:
@@ -70,14 +70,14 @@ packages:
name: build_runner
url: "https://pub.dartlang.org"
source: hosted
- version: "1.10.0"
+ version: "1.10.2"
build_runner_core:
dependency: transitive
description:
name: build_runner_core
url: "https://pub.dartlang.org"
source: hosted
- version: "5.2.0"
+ version: "6.0.1"
built_collection:
dependency: transitive
description:
@@ -98,14 +98,14 @@ packages:
name: characters
url: "https://pub.dartlang.org"
source: hosted
- version: "1.0.0"
+ version: "1.1.0-nullsafety.2"
charcode:
dependency: transitive
description:
name: charcode
url: "https://pub.dartlang.org"
source: hosted
- version: "1.1.3"
+ version: "1.2.0-nullsafety"
checked_yaml:
dependency: transitive
description:
@@ -126,7 +126,7 @@ packages:
name: clock
url: "https://pub.dartlang.org"
source: hosted
- version: "1.0.1"
+ version: "1.1.0-nullsafety"
code_builder:
dependency: transitive
description:
@@ -140,7 +140,7 @@ packages:
name: collection
url: "https://pub.dartlang.org"
source: hosted
- version: "1.14.13"
+ version: "1.15.0-nullsafety.2"
convert:
dependency: transitive
description:
@@ -182,7 +182,7 @@ packages:
name: fake_async
url: "https://pub.dartlang.org"
source: hosted
- version: "1.1.0"
+ version: "1.1.0-nullsafety"
fixnum:
dependency: transitive
description:
@@ -202,6 +202,13 @@ packages:
relative: true
source: path
version: "0.0.21"
+ flutter_svg:
+ dependency: "direct main"
+ description:
+ name: flutter_svg
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "0.18.1"
flutter_test:
dependency: "direct dev"
description: flutter
@@ -276,14 +283,14 @@ packages:
name: matcher
url: "https://pub.dartlang.org"
source: hosted
- version: "0.12.8"
+ version: "0.12.10-nullsafety"
meta:
dependency: transitive
description:
name: meta
url: "https://pub.dartlang.org"
source: hosted
- version: "1.1.8"
+ version: "1.3.0-nullsafety.2"
mime:
dependency: transitive
description:
@@ -318,21 +325,35 @@ packages:
name: path
url: "https://pub.dartlang.org"
source: hosted
- version: "1.7.0"
+ version: "1.8.0-nullsafety"
+ path_drawing:
+ dependency: transitive
+ description:
+ name: path_drawing
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "0.4.1+1"
+ path_parsing:
+ dependency: transitive
+ description:
+ name: path_parsing
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "0.1.4"
pedantic:
dependency: transitive
description:
name: pedantic
url: "https://pub.dartlang.org"
source: hosted
- version: "1.9.0"
+ version: "1.9.2"
petitparser:
dependency: transitive
description:
name: petitparser
url: "https://pub.dartlang.org"
source: hosted
- version: "3.0.4"
+ version: "3.1.0"
pool:
dependency: transitive
description:
@@ -386,21 +407,21 @@ packages:
name: source_span
url: "https://pub.dartlang.org"
source: hosted
- version: "1.7.0"
+ version: "1.8.0-nullsafety"
stack_trace:
dependency: transitive
description:
name: stack_trace
url: "https://pub.dartlang.org"
source: hosted
- version: "1.9.5"
+ version: "1.10.0-nullsafety"
stream_channel:
dependency: transitive
description:
name: stream_channel
url: "https://pub.dartlang.org"
source: hosted
- version: "2.0.0"
+ version: "2.1.0-nullsafety"
stream_transform:
dependency: transitive
description:
@@ -414,21 +435,21 @@ packages:
name: string_scanner
url: "https://pub.dartlang.org"
source: hosted
- version: "1.0.5"
+ version: "1.1.0-nullsafety"
term_glyph:
dependency: transitive
description:
name: term_glyph
url: "https://pub.dartlang.org"
source: hosted
- version: "1.1.0"
+ version: "1.2.0-nullsafety"
test_api:
dependency: transitive
description:
name: test_api
url: "https://pub.dartlang.org"
source: hosted
- version: "0.2.17"
+ version: "0.2.19-nullsafety"
time:
dependency: transitive
description:
@@ -449,14 +470,14 @@ packages:
name: typed_data
url: "https://pub.dartlang.org"
source: hosted
- version: "1.2.0"
+ version: "1.3.0-nullsafety.2"
vector_math:
dependency: transitive
description:
name: vector_math
url: "https://pub.dartlang.org"
source: hosted
- version: "2.0.8"
+ version: "2.1.0-nullsafety.2"
watcher:
dependency: transitive
description:
@@ -477,7 +498,7 @@ packages:
name: xml
url: "https://pub.dartlang.org"
source: hosted
- version: "4.2.0"
+ version: "4.5.0"
yaml:
dependency: transitive
description:
@@ -486,5 +507,5 @@ packages:
source: hosted
version: "2.2.1"
sdks:
- dart: ">=2.9.0 <3.0.0"
- flutter: ">=1.20.0"
+ dart: ">=2.10.0-0.0.dev <2.10.0"
+ flutter: ">=1.20.0 <2.0.0"
diff --git a/example/pubspec.yaml b/example/pubspec.yaml
index 77aa894f8..7187713bd 100644
--- a/example/pubspec.yaml
+++ b/example/pubspec.yaml
@@ -13,6 +13,8 @@ dependencies:
flutter:
sdk: flutter
+ flutter_svg: ^0.18.1
+
dev_dependencies:
flutter_test:
sdk: flutter
@@ -24,6 +26,9 @@ flutter_gen:
output: lib/gen/ # Optional (default: lib/gen/)
lineLength: 80 # Optional (default: 80)
+ integrations:
+ flutter_svg: true
+
colors:
inputs:
- assets/color/colors.xml
@@ -37,6 +42,8 @@ flutter:
- assets/images/chip3/chip3.jpg
- assets/images/chip3/chip3.jpg # duplicated
- assets/images/chip4/
+ - assets/images/icons/fuchsia.svg
+ - assets/images/icons/kmm.svg
- assets/images/icons/paint.svg
- assets/json/fruits.json
- pictures/chip5.jpg
diff --git a/lib/flutter_generator.dart b/lib/flutter_generator.dart
index 128a8e133..3ed36afd8 100644
--- a/lib/flutter_generator.dart
+++ b/lib/flutter_generator.dart
@@ -63,8 +63,8 @@ class FlutterGenerator {
final formatter = DartFormatter(pageWidth: lineLength);
if (config.flutter.hasAssets) {
- final generated =
- generateAssets(pubspecFile, formatter, config.flutter.assets);
+ final generated = generateAssets(
+ pubspecFile, formatter, config.flutterGen, config.flutter.assets);
final assets =
File(join(pubspecFile.parent.path, output, 'assets.gen.dart'));
writeAsString(generated, file: assets);
diff --git a/lib/src/generators/assets_generator.dart b/lib/src/generators/assets_generator.dart
index 1472720b5..d6b54bd1c 100644
--- a/lib/src/generators/assets_generator.dart
+++ b/lib/src/generators/assets_generator.dart
@@ -3,38 +3,48 @@ import 'dart:io';
import 'package:dart_style/dart_style.dart';
import 'package:flutter_gen/src/generators/generator_helper.dart';
+import 'package:flutter_gen/src/generators/integrations/integration.dart';
+import 'package:flutter_gen/src/generators/integrations/svg_integration.dart';
import 'package:flutter_gen/src/settings/asset_type.dart';
import 'package:flutter_gen/src/settings/flutter/flutter_assets.dart';
+import 'package:flutter_gen/src/settings/flutterGen/flutter_gen.dart';
import 'package:flutter_gen/src/utils/camel_case.dart';
import 'package:path/path.dart';
-String generateAssets(
- File pubspecFile, DartFormatter formatter, FlutterAssets assets) {
+String generateAssets(File pubspecFile, DartFormatter formatter,
+ FlutterGen flutterGen, FlutterAssets assets) {
assert(assets != null && assets.hasAssets,
throw 'The value of "flutter/assets:" is incorrect.');
- final buffer = StringBuffer();
- buffer.writeln(header());
- buffer.writeln(_assetGenImageClassDefinition);
+ final importsBuffer = StringBuffer();
+ final classesBuffer = StringBuffer();
final assetRelativePathList = _getAssetRelativePathList(pubspecFile, assets);
final assetTypeQueue = ListQueue.from(
_constructAssetTree(assetRelativePathList).children);
final assetsStaticStatements = <_Statement>[];
+ final integrations = [];
+ if (flutterGen != null &&
+ flutterGen.hasIntegrations &&
+ flutterGen.integrations.hasFlutterSvg) {
+ integrations.add(SvgIntegration());
+ }
+
while (assetTypeQueue.isNotEmpty) {
final assetType = assetTypeQueue.removeFirst();
final assetAbsolutePath = join(pubspecFile.parent.path, assetType.path);
if (FileSystemEntity.isDirectorySync(assetAbsolutePath)) {
- final statements =
- _createDirectoryClassGenStatements(pubspecFile, assetType);
+ final statements = _createDirectoryClassGenStatements(
+ pubspecFile, assetType, integrations);
if (assetType.isDefaultAssetsDirectory) {
assetsStaticStatements.addAll(statements);
} else {
final className = '\$${assetType.path.camelCase().capitalize()}Gen';
- buffer.writeln(_directoryClassGenDefinition(className, statements));
+ classesBuffer
+ .writeln(_directoryClassGenDefinition(className, statements));
// Add this directory reference to Assets class if we are not under the default asset folder
if (dirname(assetType.path) == '.') {
assetsStaticStatements.add(_Statement(
@@ -50,8 +60,24 @@ String generateAssets(
}
}
- buffer.writeln(_assetsClassDefinition(assetsStaticStatements));
+ classesBuffer.writeln(_assetsClassDefinition(assetsStaticStatements));
+ classesBuffer.writeln(_assetGenImageClassDefinition);
+
+ final imports = {'package:flutter/widgets.dart'};
+ integrations
+ .where((integration) => integration.isEnabled)
+ .forEach((integration) {
+ imports.addAll(integration.requiredImports);
+ classesBuffer.writeln(integration.classOutput);
+ });
+ for (final package in imports) {
+ importsBuffer.writeln(import(package));
+ }
+ final buffer = StringBuffer();
+ buffer.writeln(header);
+ buffer.writeln(importsBuffer.toString());
+ buffer.writeln(classesBuffer.toString());
return formatter.format(buffer.toString());
}
@@ -100,9 +126,7 @@ AssetType _constructAssetTree(List assetRelativePathList) {
}
List<_Statement> _createDirectoryClassGenStatements(
- File pubspecFile,
- AssetType assetType,
-) {
+ File pubspecFile, AssetType assetType, List integrations) {
final statements = assetType.children
.map((child) {
final childAssetAbsolutePath =
@@ -124,12 +148,26 @@ List<_Statement> _createDirectoryClassGenStatements(
isConstConstructor: true,
);
} else if (!child.isUnKnownMime) {
- statement = _Statement(
- type: 'String',
- name: child.baseName.camelCase(),
- value: '\'${child.path}\'',
- isConstConstructor: false,
+ final integration = integrations.firstWhere(
+ (element) => element.mime == child.mime,
+ orElse: () => null,
);
+ if (integration == null) {
+ statement ??= _Statement(
+ type: 'String',
+ name: child.baseName.camelCase(),
+ value: '\'${child.path}\'',
+ isConstConstructor: false,
+ );
+ } else {
+ integration.isEnabled = true;
+ statement = _Statement(
+ type: integration.className,
+ name: child.baseName.camelCase(),
+ value: integration.classInstantiate(child.path),
+ isConstConstructor: integration.isConstConstructor,
+ );
+ }
}
return statement;
})
@@ -168,7 +206,6 @@ class $className {
}
const String _assetGenImageClassDefinition = '''
-import 'package:flutter/widgets.dart';
class AssetGenImage extends AssetImage {
const AssetGenImage(String assetName)
diff --git a/lib/src/generators/colors_generator.dart b/lib/src/generators/colors_generator.dart
index e61d45bfb..602d0ae46 100644
--- a/lib/src/generators/colors_generator.dart
+++ b/lib/src/generators/colors_generator.dart
@@ -19,7 +19,7 @@ String generateColors(
throw 'The value of "flutter_gen/colors/inputs:" is incorrect.');
final buffer = StringBuffer();
- buffer.writeln(header());
+ buffer.writeln(header);
buffer.writeln("import 'package:flutter/painting.dart';");
buffer.writeln("import 'package:flutter/material.dart';");
buffer.writeln();
diff --git a/lib/src/generators/fonts_generator.dart b/lib/src/generators/fonts_generator.dart
index 493bb25c2..3135a7bbb 100644
--- a/lib/src/generators/fonts_generator.dart
+++ b/lib/src/generators/fonts_generator.dart
@@ -10,7 +10,7 @@ String generateFonts(DartFormatter formatter, FlutterFonts fonts) {
throw 'The value of "flutter/fonts:" is incorrect.');
final buffer = StringBuffer();
- buffer.writeln(header());
+ buffer.writeln(header);
buffer.writeln('class FontFamily {');
buffer.writeln(' FontFamily._();');
buffer.writeln();
diff --git a/lib/src/generators/generator_helper.dart b/lib/src/generators/generator_helper.dart
index df33b75f8..c0964ef01 100644
--- a/lib/src/generators/generator_helper.dart
+++ b/lib/src/generators/generator_helper.dart
@@ -1,7 +1,10 @@
-String header() {
+String get header {
return '''/// GENERATED CODE - DO NOT MODIFY BY HAND
/// *****************************************************
/// FlutterGen
/// *****************************************************
+
''';
}
+
+String import(String package) => 'import \'$package\';';
diff --git a/lib/src/generators/integrations/integration.dart b/lib/src/generators/integrations/integration.dart
new file mode 100644
index 000000000..4911ea144
--- /dev/null
+++ b/lib/src/generators/integrations/integration.dart
@@ -0,0 +1,15 @@
+abstract class Integration {
+ bool isEnabled = false;
+
+ List get requiredImports;
+
+ String get classOutput;
+
+ String get className;
+
+ String classInstantiate(String path);
+
+ String get mime;
+
+ bool get isConstConstructor;
+}
diff --git a/lib/src/generators/integrations/svg_integration.dart b/lib/src/generators/integrations/svg_integration.dart
new file mode 100644
index 000000000..d13743907
--- /dev/null
+++ b/lib/src/generators/integrations/svg_integration.dart
@@ -0,0 +1,52 @@
+import 'package:flutter_gen/src/generators/integrations/integration.dart';
+
+class SvgIntegration extends Integration {
+ @override
+ List get requiredImports => [
+ 'package:flutter_svg/flutter_svg.dart',
+ 'package:flutter/services.dart',
+ ];
+
+ @override
+ String get classOutput => '''class SvgGenImage {
+ const SvgGenImage(this._assetName);
+
+ final String _assetName;
+
+ SvgPicture svg({
+ bool matchTextDirection = false,
+ AssetBundle bundle,
+ String package,
+ double width,
+ double height,
+ BoxFit fit = BoxFit.contain,
+ AlignmentGeometry alignment = Alignment.center,
+ bool allowDrawingOutsideViewBox = false,
+ WidgetBuilder placeholderBuilder,
+ Color color,
+ BlendMode colorBlendMode = BlendMode.srcIn,
+ String semanticsLabel,
+ bool excludeFromSemantics = false,
+ Clip clipBehavior = Clip.hardEdge,
+ }) {
+ return SvgPicture.asset(
+ _assetName,
+ matchTextDirection: matchTextDirection,
+ );
+ }
+
+ String get path => _assetName;
+}''';
+
+ @override
+ String get className => 'SvgGenImage';
+
+ @override
+ String classInstantiate(String path) => 'SvgGenImage\(\'$path\'\)';
+
+ @override
+ String get mime => 'image/svg+xml';
+
+ @override
+ bool get isConstConstructor => true;
+}
diff --git a/lib/src/settings/flutterGen/flutter_gen.dart b/lib/src/settings/flutterGen/flutter_gen.dart
index 44ea34df0..6ba99d395 100644
--- a/lib/src/settings/flutterGen/flutter_gen.dart
+++ b/lib/src/settings/flutterGen/flutter_gen.dart
@@ -2,6 +2,7 @@ import 'dart:io';
import 'package:flutter_gen/src/settings/config.dart';
import 'package:flutter_gen/src/settings/flutterGen/flutter_gen_colors.dart';
+import 'package:flutter_gen/src/settings/flutterGen/flutter_gen_integrations.dart';
import 'package:flutter_gen/src/utils/cast.dart';
import 'package:yaml/yaml.dart';
@@ -9,6 +10,8 @@ class FlutterGen {
FlutterGen(YamlMap flutterGenMap) {
if (flutterGenMap != null) {
_output = safeCast(flutterGenMap['output']);
+ _integrations = FlutterGenIntegrations(
+ safeCast(flutterGenMap['integrations']));
_lineLength = safeCast(flutterGenMap['lineLength']);
_colors = FlutterGenColors(safeCast(flutterGenMap['colors']));
}
@@ -25,6 +28,12 @@ class FlutterGen {
int get lineLength => _lineLength ?? Config.DEFAULT_LINE_LENGTH;
+ FlutterGenIntegrations _integrations;
+
+ FlutterGenIntegrations get integrations => _integrations;
+
+ bool get hasIntegrations => integrations != null;
+
FlutterGenColors _colors;
FlutterGenColors get colors => _colors;
diff --git a/lib/src/settings/flutterGen/flutter_gen_integrations.dart b/lib/src/settings/flutterGen/flutter_gen_integrations.dart
new file mode 100644
index 000000000..d22e1a687
--- /dev/null
+++ b/lib/src/settings/flutterGen/flutter_gen_integrations.dart
@@ -0,0 +1,16 @@
+import 'package:flutter_gen/src/utils/cast.dart';
+import 'package:yaml/yaml.dart';
+
+class FlutterGenIntegrations {
+ FlutterGenIntegrations(YamlMap flutterGenMap) {
+ if (flutterGenMap != null) {
+ _flutterSvg = safeCast(flutterGenMap['flutter_svg']);
+ }
+ }
+
+ bool _flutterSvg;
+
+ bool get flutterSvg => _flutterSvg ?? false;
+
+ bool get hasFlutterSvg => flutterSvg;
+}
diff --git a/test/flutter_gen_test.dart b/test/flutter_gen_test.dart
index 24b5508bc..35b930f31 100644
--- a/test/flutter_gen_test.dart
+++ b/test/flutter_gen_test.dart
@@ -97,7 +97,7 @@ void main() {
test('Wrong output path', () async {
await FlutterGenerator(
- File('test_resources/pubspec_wrong_output_path.yaml'))
+ File('test_resources/pubspec_wrong_output_path.yaml'))
.build();
expect(
File('test_resources/lib/gen/assets.gen.dart').readAsStringSync(),
@@ -115,7 +115,7 @@ void main() {
test('Wrong lineLength', () async {
await FlutterGenerator(
- File('test_resources/pubspec_wrong_line_length.yaml'))
+ File('test_resources/pubspec_wrong_line_length.yaml'))
.build();
expect(
File('test_resources/lib/gen/assets.gen.dart').readAsStringSync(),
@@ -133,12 +133,27 @@ void main() {
test('Assets on pubspec.yaml', () async {
final pubspec = File('test_resources/pubspec_assets.yaml');
+ final pubstri = pubspec.readAsStringSync();
final config = await Config(pubspec).load();
final formatter = DartFormatter(pageWidth: config.flutterGen.lineLength);
- final actual = generateAssets(pubspec, formatter, config.flutter.assets);
+ final actual = generateAssets(
+ pubspec, formatter, config.flutterGen, config.flutter.assets);
final expected =
- File('test_resources/actual_data/assets.gen.dart').readAsStringSync();
+ File('test_resources/actual_data/assets.gen.dart').readAsStringSync();
+
+ expect(actual, expected);
+ });
+
+ test('Assets with No inegrations on pubspec.yaml', () async {
+ final pubspec = File('test_resources/pubspec_assets_no_integrations.yaml');
+ final config = await Config(pubspec).load();
+ final formatter = DartFormatter(pageWidth: config.flutterGen.lineLength);
+
+ final actual = generateAssets(
+ pubspec, formatter, config.flutterGen, config.flutter.assets);
+ final expected =
+ File('test_resources/actual_data/assets_no_integrations.gen.dart').readAsStringSync();
expect(actual, expected);
});
diff --git a/test_resources/actual_data/assets.gen.dart b/test_resources/actual_data/assets.gen.dart
index e96d2838b..5aa085454 100644
--- a/test_resources/actual_data/assets.gen.dart
+++ b/test_resources/actual_data/assets.gen.dart
@@ -4,6 +4,63 @@
/// *****************************************************
import 'package:flutter/widgets.dart';
+import 'package:flutter_svg/flutter_svg.dart';
+import 'package:flutter/services.dart';
+
+class $PicturesGen {
+ const $PicturesGen();
+
+ AssetGenImage get chip5 => const AssetGenImage('pictures/chip5.jpg');
+}
+
+class $AssetsImagesGen {
+ const $AssetsImagesGen();
+
+ AssetGenImage get chip2 => const AssetGenImage('assets/images/chip2.jpg');
+ AssetGenImage get chip1 => const AssetGenImage('assets/images/chip1.jpg');
+ AssetGenImage get logo => const AssetGenImage('assets/images/logo.png');
+ AssetGenImage get profile => const AssetGenImage('assets/images/profile.jpg');
+ $AssetsImagesChip3Gen get chip3 => const $AssetsImagesChip3Gen();
+ $AssetsImagesChip4Gen get chip4 => const $AssetsImagesChip4Gen();
+ $AssetsImagesIconsGen get icons => const $AssetsImagesIconsGen();
+}
+
+class $AssetsJsonGen {
+ const $AssetsJsonGen();
+
+ String get fruits => 'assets/json/fruits.json';
+}
+
+class $AssetsImagesChip3Gen {
+ const $AssetsImagesChip3Gen();
+
+ AssetGenImage get chip3 =>
+ const AssetGenImage('assets/images/chip3/chip3.jpg');
+}
+
+class $AssetsImagesChip4Gen {
+ const $AssetsImagesChip4Gen();
+
+ AssetGenImage get chip4 =>
+ const AssetGenImage('assets/images/chip4/chip4.jpg');
+}
+
+class $AssetsImagesIconsGen {
+ const $AssetsImagesIconsGen();
+
+ SvgGenImage get fuchsia =>
+ const SvgGenImage('assets/images/icons/fuchsia.svg');
+ SvgGenImage get kmm => const SvgGenImage('assets/images/icons/kmm.svg');
+ SvgGenImage get paint => const SvgGenImage('assets/images/icons/paint.svg');
+}
+
+class Assets {
+ Assets._();
+
+ static const $AssetsImagesGen images = $AssetsImagesGen();
+ static const $AssetsJsonGen json = $AssetsJsonGen();
+ static const $PicturesGen pictures = $PicturesGen();
+}
class AssetGenImage extends AssetImage {
const AssetGenImage(String assetName)
@@ -55,54 +112,32 @@ class AssetGenImage extends AssetImage {
String get path => _assetName;
}
-class $PicturesGen {
- const $PicturesGen();
+class SvgGenImage {
+ const SvgGenImage(this._assetName);
- AssetGenImage get chip5 => const AssetGenImage('pictures/chip5.jpg');
-}
-
-class $AssetsImagesGen {
- const $AssetsImagesGen();
-
- AssetGenImage get chip2 => const AssetGenImage('assets/images/chip2.jpg');
- AssetGenImage get chip1 => const AssetGenImage('assets/images/chip1.jpg');
- AssetGenImage get logo => const AssetGenImage('assets/images/logo.png');
- AssetGenImage get profile => const AssetGenImage('assets/images/profile.jpg');
- $AssetsImagesChip3Gen get chip3 => const $AssetsImagesChip3Gen();
- $AssetsImagesChip4Gen get chip4 => const $AssetsImagesChip4Gen();
- $AssetsImagesIconsGen get icons => const $AssetsImagesIconsGen();
-}
-
-class $AssetsJsonGen {
- const $AssetsJsonGen();
-
- String get fruits => 'assets/json/fruits.json';
-}
-
-class $AssetsImagesChip3Gen {
- const $AssetsImagesChip3Gen();
-
- AssetGenImage get chip3 =>
- const AssetGenImage('assets/images/chip3/chip3.jpg');
-}
-
-class $AssetsImagesChip4Gen {
- const $AssetsImagesChip4Gen();
-
- AssetGenImage get chip4 =>
- const AssetGenImage('assets/images/chip4/chip4.jpg');
-}
-
-class $AssetsImagesIconsGen {
- const $AssetsImagesIconsGen();
-
- String get paint => 'assets/images/icons/paint.svg';
-}
+ final String _assetName;
-class Assets {
- Assets._();
+ SvgPicture svg({
+ bool matchTextDirection = false,
+ AssetBundle bundle,
+ String package,
+ double width,
+ double height,
+ BoxFit fit = BoxFit.contain,
+ AlignmentGeometry alignment = Alignment.center,
+ bool allowDrawingOutsideViewBox = false,
+ WidgetBuilder placeholderBuilder,
+ Color color,
+ BlendMode colorBlendMode = BlendMode.srcIn,
+ String semanticsLabel,
+ bool excludeFromSemantics = false,
+ Clip clipBehavior = Clip.hardEdge,
+ }) {
+ return SvgPicture.asset(
+ _assetName,
+ matchTextDirection: matchTextDirection,
+ );
+ }
- static const $AssetsImagesGen images = $AssetsImagesGen();
- static const $AssetsJsonGen json = $AssetsJsonGen();
- static const $PicturesGen pictures = $PicturesGen();
+ String get path => _assetName;
}
diff --git a/test_resources/actual_data/assets_no_integrations.gen.dart b/test_resources/actual_data/assets_no_integrations.gen.dart
new file mode 100644
index 000000000..191dc1f8f
--- /dev/null
+++ b/test_resources/actual_data/assets_no_integrations.gen.dart
@@ -0,0 +1,110 @@
+/// GENERATED CODE - DO NOT MODIFY BY HAND
+/// *****************************************************
+/// FlutterGen
+/// *****************************************************
+
+import 'package:flutter/widgets.dart';
+
+class $PicturesGen {
+ const $PicturesGen();
+
+ AssetGenImage get chip5 => const AssetGenImage('pictures/chip5.jpg');
+}
+
+class $AssetsImagesGen {
+ const $AssetsImagesGen();
+
+ AssetGenImage get chip2 => const AssetGenImage('assets/images/chip2.jpg');
+ AssetGenImage get chip1 => const AssetGenImage('assets/images/chip1.jpg');
+ AssetGenImage get logo => const AssetGenImage('assets/images/logo.png');
+ AssetGenImage get profile => const AssetGenImage('assets/images/profile.jpg');
+ $AssetsImagesChip3Gen get chip3 => const $AssetsImagesChip3Gen();
+ $AssetsImagesChip4Gen get chip4 => const $AssetsImagesChip4Gen();
+ $AssetsImagesIconsGen get icons => const $AssetsImagesIconsGen();
+}
+
+class $AssetsJsonGen {
+ const $AssetsJsonGen();
+
+ String get fruits => 'assets/json/fruits.json';
+}
+
+class $AssetsImagesChip3Gen {
+ const $AssetsImagesChip3Gen();
+
+ AssetGenImage get chip3 =>
+ const AssetGenImage('assets/images/chip3/chip3.jpg');
+}
+
+class $AssetsImagesChip4Gen {
+ const $AssetsImagesChip4Gen();
+
+ AssetGenImage get chip4 =>
+ const AssetGenImage('assets/images/chip4/chip4.jpg');
+}
+
+class $AssetsImagesIconsGen {
+ const $AssetsImagesIconsGen();
+
+ String get fuchsia => 'assets/images/icons/fuchsia.svg';
+ String get kmm => 'assets/images/icons/kmm.svg';
+ String get paint => 'assets/images/icons/paint.svg';
+}
+
+class Assets {
+ Assets._();
+
+ static const $AssetsImagesGen images = $AssetsImagesGen();
+ static const $AssetsJsonGen json = $AssetsJsonGen();
+ static const $PicturesGen pictures = $PicturesGen();
+}
+
+class AssetGenImage extends AssetImage {
+ const AssetGenImage(String assetName)
+ : _assetName = assetName,
+ super(assetName);
+ final String _assetName;
+
+ Image image({
+ ImageFrameBuilder frameBuilder,
+ ImageLoadingBuilder loadingBuilder,
+ ImageErrorWidgetBuilder errorBuilder,
+ String semanticLabel,
+ bool excludeFromSemantics = false,
+ double width,
+ double height,
+ Color color,
+ BlendMode colorBlendMode,
+ BoxFit fit,
+ AlignmentGeometry alignment = Alignment.center,
+ ImageRepeat repeat = ImageRepeat.noRepeat,
+ Rect centerSlice,
+ bool matchTextDirection = false,
+ bool gaplessPlayback = false,
+ bool isAntiAlias = false,
+ FilterQuality filterQuality = FilterQuality.low,
+ }) {
+ return Image(
+ image: this,
+ frameBuilder: frameBuilder,
+ loadingBuilder: loadingBuilder,
+ errorBuilder: errorBuilder,
+ semanticLabel: semanticLabel,
+ excludeFromSemantics: excludeFromSemantics,
+ width: width,
+ height: height,
+ color: color,
+ colorBlendMode: colorBlendMode,
+ fit: fit,
+ alignment: alignment,
+ repeat: repeat,
+ centerSlice: centerSlice,
+ matchTextDirection: matchTextDirection,
+ gaplessPlayback: gaplessPlayback,
+ isAntiAlias: isAntiAlias,
+ filterQuality: filterQuality,
+ );
+ }
+
+ String get path => _assetName;
+}
diff --git a/test_resources/assets/images/icons/fuchsia.svg b/test_resources/assets/images/icons/fuchsia.svg
new file mode 100644
index 000000000..b6fb406aa
--- /dev/null
+++ b/test_resources/assets/images/icons/fuchsia.svg
@@ -0,0 +1,9 @@
+
+
+
+
\ No newline at end of file
diff --git a/test_resources/assets/images/icons/kmm.svg b/test_resources/assets/images/icons/kmm.svg
new file mode 100644
index 000000000..8e7df0754
--- /dev/null
+++ b/test_resources/assets/images/icons/kmm.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/test_resources/pubspec.yaml b/test_resources/pubspec.yaml
index 4a34bff76..b838a35bf 100644
--- a/test_resources/pubspec.yaml
+++ b/test_resources/pubspec.yaml
@@ -2,7 +2,10 @@ name: example
flutter_gen:
output: lib/gen/
- lineLength: 80 # Optional (default: 80)
+ lineLength: 80
+
+ integrations:
+ flutter_svg: true
colors:
inputs:
@@ -17,6 +20,8 @@ flutter:
- assets/images/chip3/chip3.jpg
- assets/images/chip3/chip3.jpg # duplicated
- assets/images/chip4/
+ - assets/images/icons/fuchsia.svg
+ - assets/images/icons/kmm.svg
- assets/images/icons/paint.svg
- assets/json/fruits.json
- pictures/chip5.jpg
diff --git a/test_resources/pubspec_assets.yaml b/test_resources/pubspec_assets.yaml
index 33d387de1..0b4f20229 100644
--- a/test_resources/pubspec_assets.yaml
+++ b/test_resources/pubspec_assets.yaml
@@ -4,12 +4,17 @@ flutter_gen:
output: lib/gen/ # Optional (default: lib/gen/)
lineLength: 80 # Optional (default: 80)
+ integrations:
+ flutter_svg: true
+
flutter:
assets:
- assets/images
- assets/images/chip3/chip3.jpg
- assets/images/chip3/chip3.jpg # duplicated
- assets/images/chip4/
+ - assets/images/icons/fuchsia.svg
+ - assets/images/icons/kmm.svg
- assets/images/icons/paint.svg
- assets/json/fruits.json
- pictures/chip5.jpg
diff --git a/test_resources/pubspec_assets_no_integrations.yaml b/test_resources/pubspec_assets_no_integrations.yaml
new file mode 100644
index 000000000..e172069f1
--- /dev/null
+++ b/test_resources/pubspec_assets_no_integrations.yaml
@@ -0,0 +1,17 @@
+name: test
+
+flutter_gen:
+ output: lib/gen/ # Optional (default: lib/gen/)
+ lineLength: 80 # Optional (default: 80)
+
+flutter:
+ assets:
+ - assets/images
+ - assets/images/chip3/chip3.jpg
+ - assets/images/chip3/chip3.jpg # duplicated
+ - assets/images/chip4/
+ - assets/images/icons/fuchsia.svg
+ - assets/images/icons/kmm.svg
+ - assets/images/icons/paint.svg
+ - assets/json/fruits.json
+ - pictures/chip5.jpg