diff --git a/packages/core/lib/generators/assets_generator.dart b/packages/core/lib/generators/assets_generator.dart index c710826c..c23db8dc 100644 --- a/packages/core/lib/generators/assets_generator.dart +++ b/packages/core/lib/generators/assets_generator.dart @@ -65,9 +65,12 @@ String generateAssets( final integrations = [ if (config.flutterGen.integrations.flutterSvg) SvgIntegration(config.packageParameterLiteral), - if (config.flutterGen.integrations.flareFlutter) FlareIntegration(), - if (config.flutterGen.integrations.rive) RiveIntegration(), - if (config.flutterGen.integrations.lottie) LottieIntegration(), + if (config.flutterGen.integrations.flareFlutter) + FlareIntegration(config.packageParameterLiteral), + if (config.flutterGen.integrations.rive) + RiveIntegration(config.packageParameterLiteral), + if (config.flutterGen.integrations.lottie) + LottieIntegration(config.packageParameterLiteral), ]; // TODO: This code will be removed. diff --git a/packages/core/lib/generators/integrations/flare_integration.dart b/packages/core/lib/generators/integrations/flare_integration.dart index 717f89df..528cc059 100644 --- a/packages/core/lib/generators/integrations/flare_integration.dart +++ b/packages/core/lib/generators/integrations/flare_integration.dart @@ -2,6 +2,14 @@ import '../../settings/asset_type.dart'; import 'integration.dart'; class FlareIntegration extends Integration { + + FlareIntegration(String packageParameterLiteral) + : super(packageParameterLiteral); + + String? get packageExpression => packageParameterLiteral.isNotEmpty + ? 'packages/$packageParameterLiteral/' + : null; + @override List get requiredImports => [ 'package:flare_flutter/flare_actor.dart', @@ -11,7 +19,7 @@ class FlareIntegration extends Integration { @override String get classOutput => _classDefinition; - final String _classDefinition = '''class FlareGenImage { + String get _classDefinition => '''class FlareGenImage { const FlareGenImage(this._assetName); final String _assetName; @@ -32,7 +40,7 @@ class FlareIntegration extends Integration { bool antialias = true, }) { return FlareActor( - _assetName, + ${packageExpression == null ? '_assetName' : '\'$packageExpression\$_assetName\''}, boundsNode: boundsNode, animation: animation, fit: fit, diff --git a/packages/core/lib/generators/integrations/integration.dart b/packages/core/lib/generators/integrations/integration.dart index 4110df3d..dbb3ba59 100644 --- a/packages/core/lib/generators/integrations/integration.dart +++ b/packages/core/lib/generators/integrations/integration.dart @@ -1,6 +1,11 @@ import '../../settings/asset_type.dart'; abstract class Integration { + + Integration(this.packageParameterLiteral); + + final String packageParameterLiteral; + bool isEnabled = false; List get requiredImports; diff --git a/packages/core/lib/generators/integrations/lottie_integration.dart b/packages/core/lib/generators/integrations/lottie_integration.dart index 64e81ae5..2fb4b46c 100644 --- a/packages/core/lib/generators/integrations/lottie_integration.dart +++ b/packages/core/lib/generators/integrations/lottie_integration.dart @@ -7,6 +7,10 @@ import 'dart:io'; import 'package:path/path.dart' as p; class LottieIntegration extends Integration { + + LottieIntegration(String packageParameterLiteral) + : super(packageParameterLiteral); + // These are required keys for this integration. static const lottieKeys = [ 'w', // width @@ -18,6 +22,10 @@ class LottieIntegration extends Integration { 'layers', // Must include layers ]; + String get packageExpression => packageParameterLiteral.isNotEmpty + ? ' = \'$packageParameterLiteral\'' + : ''; + @override List get requiredImports => [ 'package:lottie/lottie.dart', @@ -26,7 +34,7 @@ class LottieIntegration extends Integration { @override String get classOutput => _classDefinition; - final String _classDefinition = '''class LottieGenImage { + String get _classDefinition => '''class LottieGenImage { const LottieGenImage(this._assetName); final String _assetName; @@ -49,7 +57,7 @@ class LottieIntegration extends Integration { double? height, BoxFit? fit, AlignmentGeometry? alignment, - String? package, + String? package$packageExpression, bool? addRepaintBoundary, FilterQuality? filterQuality, void Function(String)? onWarning, diff --git a/packages/core/lib/generators/integrations/rive_integration.dart b/packages/core/lib/generators/integrations/rive_integration.dart index 6b20fb24..1bf12eb8 100644 --- a/packages/core/lib/generators/integrations/rive_integration.dart +++ b/packages/core/lib/generators/integrations/rive_integration.dart @@ -2,6 +2,14 @@ import '../../settings/asset_type.dart'; import 'integration.dart'; class RiveIntegration extends Integration { + + RiveIntegration(String packageParameterLiteral) + : super(packageParameterLiteral); + + String? get packageExpression => packageParameterLiteral.isNotEmpty + ? 'packages/$packageParameterLiteral/' + : null; + @override List get requiredImports => [ 'package:rive/rive.dart', @@ -10,7 +18,7 @@ class RiveIntegration extends Integration { @override String get classOutput => _classDefinition; - final String _classDefinition = '''class RiveGenImage { + String get _classDefinition => '''class RiveGenImage { const RiveGenImage(this._assetName); final String _assetName; @@ -27,7 +35,7 @@ class RiveIntegration extends Integration { OnInitCallback? onInit, }) { return RiveAnimation.asset( - _assetName, + ${packageExpression == null ? '_assetName' : '\'$packageExpression\$_assetName\''}, artboard: artboard, animations: animations, stateMachines: stateMachines, diff --git a/packages/core/lib/generators/integrations/svg_integration.dart b/packages/core/lib/generators/integrations/svg_integration.dart index 04574e39..64a421ae 100644 --- a/packages/core/lib/generators/integrations/svg_integration.dart +++ b/packages/core/lib/generators/integrations/svg_integration.dart @@ -2,12 +2,12 @@ import '../../settings/asset_type.dart'; import 'integration.dart'; class SvgIntegration extends Integration { - SvgIntegration(this._packageParameterLiteral); - final String _packageParameterLiteral; + SvgIntegration(String packageParameterLiteral) + : super(packageParameterLiteral); - String get packageExpression => _packageParameterLiteral.isNotEmpty - ? ' = \'$_packageParameterLiteral\'' + String get packageExpression => packageParameterLiteral.isNotEmpty + ? ' = \'$packageParameterLiteral\'' : ''; @override diff --git a/packages/core/test/assets_gen_integrations_test.dart b/packages/core/test/assets_gen_integrations_test.dart index 32b71f81..583cd4e8 100644 --- a/packages/core/test/assets_gen_integrations_test.dart +++ b/packages/core/test/assets_gen_integrations_test.dart @@ -29,7 +29,7 @@ void main() { await expectedAssetsGen(pubspec, generated, fact); - final integration = SvgIntegration('package_name'); + final integration = SvgIntegration(''); expect(integration.className, 'SvgGenImage'); expect(integration.classInstantiate('assets/path'), 'SvgGenImage(\'assets/path\')'); @@ -42,6 +42,14 @@ void main() { AssetType(rootPath: resPath, path: 'assets/path/dog.png')), isFalse); expect(integration.isConstConstructor, isTrue); + expect(integration.classOutput.contains('String? package,'), isTrue); + + final integrationWithPackage = SvgIntegration('package_name'); + expect( + integrationWithPackage.classOutput + .contains('String? package = \'package_name\','), + isTrue, + ); }); test('Assets with Flare integrations on pubspec.yaml', () async { @@ -53,7 +61,7 @@ void main() { await expectedAssetsGen(pubspec, generated, fact); - final integration = FlareIntegration(); + final integration = FlareIntegration(''); expect(integration.className, 'FlareGenImage'); expect(integration.classInstantiate('assets/path'), 'FlareGenImage(\'assets/path\')'); @@ -66,6 +74,14 @@ void main() { AssetType(rootPath: resPath, path: 'assets/path/dog.json')), isFalse); expect(integration.isConstConstructor, isTrue); + expect(integration.classOutput.contains('_assetName,'), isTrue); + + final integrationWithPackage = FlareIntegration('package_name'); + expect( + integrationWithPackage.classOutput + .contains('\'packages/package_name/\$_assetName\','), + isTrue, + ); }); test('Assets with Rive integrations on pubspec.yaml', () async { @@ -77,7 +93,7 @@ void main() { await expectedAssetsGen(pubspec, generated, fact); - final integration = RiveIntegration(); + final integration = RiveIntegration(''); expect(integration.className, 'RiveGenImage'); expect(integration.classInstantiate('assets/path'), 'RiveGenImage(\'assets/path\')'); @@ -90,6 +106,14 @@ void main() { AssetType(rootPath: resPath, path: 'assets/path/dog.json')), isFalse); expect(integration.isConstConstructor, isTrue); + expect(integration.classOutput.contains('_assetName,'), isTrue); + + final integrationWithPackage = RiveIntegration('package_name'); + expect( + integrationWithPackage.classOutput + .contains('\'packages/package_name/\$_assetName\','), + isTrue, + ); }); test('Assets with Lottie integrations on pubspec.yaml', () async { @@ -101,7 +125,7 @@ void main() { await expectedAssetsGen(pubspec, generated, fact); - final integration = LottieIntegration(); + final integration = LottieIntegration(''); expect(integration.className, 'LottieGenImage'); expect(integration.classInstantiate('assets/lottie'), 'LottieGenImage(\'assets/lottie\')'); @@ -115,6 +139,14 @@ void main() { path: 'assets/lottie/hamburger_arrow_without_version.json')), isFalse); expect(integration.isConstConstructor, isTrue); + expect(integration.classOutput.contains('String? package,'), isTrue); + + final integrationWithPackage = LottieIntegration('package_name'); + expect( + integrationWithPackage.classOutput + .contains('String? package = \'package_name\','), + isTrue, + ); }); }); }