diff --git a/examples/counter_example/pubspec.lock b/examples/counter_example/pubspec.lock index ac1a32fb..f49ef922 100644 --- a/examples/counter_example/pubspec.lock +++ b/examples/counter_example/pubspec.lock @@ -286,6 +286,14 @@ packages: url: "https://pub.dev" source: hosted version: "5.0.0" + flutter_svg: + dependency: transitive + description: + name: flutter_svg + sha256: d44bf546b13025ec7353091516f6881f1d4c633993cb109c3916c3a0159dadf1 + url: "https://pub.dev" + source: hosted + version: "2.1.0" flutter_test: dependency: "direct dev" description: flutter @@ -499,6 +507,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.9.1" + path_parsing: + dependency: transitive + description: + name: path_parsing + sha256: "883402936929eac138ee0a45da5b0f2c80f89913e6dc3bf77eb65b84b409c6ca" + url: "https://pub.dev" + source: hosted + version: "1.1.0" path_provider: dependency: transitive description: @@ -547,6 +563,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.3.0" + petitparser: + dependency: transitive + description: + name: petitparser + sha256: "07c8f0b1913bcde1ff0d26e57ace2f3012ccbf2b204e070290dad3bb22797646" + url: "https://pub.dev" + source: hosted + version: "6.1.0" platform: dependency: transitive description: @@ -790,6 +814,30 @@ packages: url: "https://pub.dev" source: hosted version: "4.5.1" + vector_graphics: + dependency: transitive + description: + name: vector_graphics + sha256: "44cc7104ff32563122a929e4620cf3efd584194eec6d1d913eb5ba593dbcf6de" + url: "https://pub.dev" + source: hosted + version: "1.1.18" + vector_graphics_codec: + dependency: transitive + description: + name: vector_graphics_codec + sha256: "99fd9fbd34d9f9a32efd7b6a6aae14125d8237b10403b422a6a6dfeac2806146" + url: "https://pub.dev" + source: hosted + version: "1.1.13" + vector_graphics_compiler: + dependency: transitive + description: + name: vector_graphics_compiler + sha256: "557a315b7d2a6dbb0aaaff84d857967ce6bdc96a63dc6ee2a57ce5a6ee5d3331" + url: "https://pub.dev" + source: hosted + version: "1.1.17" vector_math: dependency: transitive description: @@ -846,6 +894,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.0" + xml: + dependency: transitive + description: + name: xml + sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226 + url: "https://pub.dev" + source: hosted + version: "6.5.0" yaml: dependency: transitive description: diff --git a/examples/movie_app/pubspec.lock b/examples/movie_app/pubspec.lock index cf5869f5..d516b37f 100644 --- a/examples/movie_app/pubspec.lock +++ b/examples/movie_app/pubspec.lock @@ -1,6 +1,14 @@ # Generated by pub # See https://dart.dev/tools/pub/glossary#lockfile packages: + args: + dependency: transitive + description: + name: args + sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04 + url: "https://pub.dev" + source: hosted + version: "2.7.0" async: dependency: transitive description: @@ -150,6 +158,14 @@ packages: url: "https://pub.dev" source: hosted version: "5.0.0" + flutter_svg: + dependency: transitive + description: + name: flutter_svg + sha256: d44bf546b13025ec7353091516f6881f1d4c633993cb109c3916c3a0159dadf1 + url: "https://pub.dev" + source: hosted + version: "2.1.0" flutter_test: dependency: "direct dev" description: flutter @@ -267,6 +283,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.9.1" + path_parsing: + dependency: transitive + description: + name: path_parsing + sha256: "883402936929eac138ee0a45da5b0f2c80f89913e6dc3bf77eb65b84b409c6ca" + url: "https://pub.dev" + source: hosted + version: "1.1.0" path_provider: dependency: transitive description: @@ -315,6 +339,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.3.0" + petitparser: + dependency: transitive + description: + name: petitparser + sha256: "07c8f0b1913bcde1ff0d26e57ace2f3012ccbf2b204e070290dad3bb22797646" + url: "https://pub.dev" + source: hosted + version: "6.1.0" platform: dependency: transitive description: @@ -486,6 +518,30 @@ packages: url: "https://pub.dev" source: hosted version: "4.5.1" + vector_graphics: + dependency: transitive + description: + name: vector_graphics + sha256: "44cc7104ff32563122a929e4620cf3efd584194eec6d1d913eb5ba593dbcf6de" + url: "https://pub.dev" + source: hosted + version: "1.1.18" + vector_graphics_codec: + dependency: transitive + description: + name: vector_graphics_codec + sha256: "99fd9fbd34d9f9a32efd7b6a6aae14125d8237b10403b422a6a6dfeac2806146" + url: "https://pub.dev" + source: hosted + version: "1.1.13" + vector_graphics_compiler: + dependency: transitive + description: + name: vector_graphics_compiler + sha256: "557a315b7d2a6dbb0aaaff84d857967ce6bdc96a63dc6ee2a57ce5a6ee5d3331" + url: "https://pub.dev" + source: hosted + version: "1.1.17" vector_math: dependency: transitive description: @@ -518,6 +574,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.0" + xml: + dependency: transitive + description: + name: xml + sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226 + url: "https://pub.dev" + source: hosted + version: "6.5.0" sdks: dart: ">=3.7.2 <4.0.0" flutter: ">=3.27.0" diff --git a/examples/stac_gallery/assets/images/gallery.svg b/examples/stac_gallery/assets/images/gallery.svg new file mode 100644 index 00000000..d1e9c59b --- /dev/null +++ b/examples/stac_gallery/assets/images/gallery.svg @@ -0,0 +1,19 @@ + + + + + gallery_grid_view [#1404] + Created with Sketch. + + + + + + + + + + + + + \ No newline at end of file diff --git a/examples/stac_gallery/assets/json/image_example.json b/examples/stac_gallery/assets/json/image_example.json index a8ef0ba9..686bcd4f 100644 --- a/examples/stac_gallery/assets/json/image_example.json +++ b/examples/stac_gallery/assets/json/image_example.json @@ -104,6 +104,39 @@ "fit": "fill" } ] + }, + { + "type": "sizedBox", + "height": 24 + }, + { + "type": "row", + "mainAxisAlignment": "center", + "crossAxisAlignment": "center", + "children": [ + { + "type": "image", + "src": "https://dev.w3.org/SVG/tools/svgweb/samples/svg-files/android.svg", + "height": 100, + "width": 100 + }, + { + "type": "sizedBox", + "width": 20 + }, + { + "type": "image", + "imageType": "asset", + "src": "assets/images/gallery.svg", + "color": "primary", + "height": 100, + "width": 100 + } + ] + }, + { + "type": "sizedBox", + "height": 24 } ] } diff --git a/examples/stac_gallery/pubspec.lock b/examples/stac_gallery/pubspec.lock index aedc4d8a..4770afeb 100644 --- a/examples/stac_gallery/pubspec.lock +++ b/examples/stac_gallery/pubspec.lock @@ -286,6 +286,14 @@ packages: url: "https://pub.dev" source: hosted version: "5.0.0" + flutter_svg: + dependency: transitive + description: + name: flutter_svg + sha256: d44bf546b13025ec7353091516f6881f1d4c633993cb109c3916c3a0159dadf1 + url: "https://pub.dev" + source: hosted + version: "2.1.0" flutter_test: dependency: "direct dev" description: flutter @@ -499,6 +507,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.9.1" + path_parsing: + dependency: transitive + description: + name: path_parsing + sha256: "883402936929eac138ee0a45da5b0f2c80f89913e6dc3bf77eb65b84b409c6ca" + url: "https://pub.dev" + source: hosted + version: "1.1.0" path_provider: dependency: transitive description: @@ -547,6 +563,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.3.0" + petitparser: + dependency: transitive + description: + name: petitparser + sha256: "07c8f0b1913bcde1ff0d26e57ace2f3012ccbf2b204e070290dad3bb22797646" + url: "https://pub.dev" + source: hosted + version: "6.1.0" platform: dependency: transitive description: @@ -797,6 +821,30 @@ packages: url: "https://pub.dev" source: hosted version: "4.5.1" + vector_graphics: + dependency: transitive + description: + name: vector_graphics + sha256: "44cc7104ff32563122a929e4620cf3efd584194eec6d1d913eb5ba593dbcf6de" + url: "https://pub.dev" + source: hosted + version: "1.1.18" + vector_graphics_codec: + dependency: transitive + description: + name: vector_graphics_codec + sha256: "99fd9fbd34d9f9a32efd7b6a6aae14125d8237b10403b422a6a6dfeac2806146" + url: "https://pub.dev" + source: hosted + version: "1.1.13" + vector_graphics_compiler: + dependency: transitive + description: + name: vector_graphics_compiler + sha256: "557a315b7d2a6dbb0aaaff84d857967ce6bdc96a63dc6ee2a57ce5a6ee5d3331" + url: "https://pub.dev" + source: hosted + version: "1.1.17" vector_math: dependency: transitive description: @@ -885,6 +933,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.0" + xml: + dependency: transitive + description: + name: xml + sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226 + url: "https://pub.dev" + source: hosted + version: "6.5.0" yaml: dependency: transitive description: diff --git a/packages/stac/lib/src/parsers/widgets/stac_image/stac_image_parser.dart b/packages/stac/lib/src/parsers/widgets/stac_image/stac_image_parser.dart index dbc2ab4a..5acdb244 100644 --- a/packages/stac/lib/src/parsers/widgets/stac_image/stac_image_parser.dart +++ b/packages/stac/lib/src/parsers/widgets/stac_image/stac_image_parser.dart @@ -2,6 +2,7 @@ import 'dart:io'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/cupertino.dart'; +import 'package:flutter_svg/flutter_svg.dart'; import 'package:stac/src/parsers/widgets/stac_double/stac_double.dart'; import 'package:stac/src/utils/color_utils.dart'; import 'package:stac/src/utils/widget_type.dart'; @@ -30,8 +31,9 @@ class StacImageParser extends StacParser { } } - Widget _networkImage(StacImage model, BuildContext context) => - CachedNetworkImage( + Widget _networkImage(StacImage model, BuildContext context) { + if (!model.src.contains(".svg")) { + return CachedNetworkImage( imageUrl: model.src, alignment: model.alignment.value, color: model.color?.toColor(context), @@ -42,8 +44,26 @@ class StacImageParser extends StacParser { return const SizedBox(); }, ); + } else { + return SvgPicture.network( + model.src, + alignment: model.alignment.value, + colorFilter: model.color != null + ? ColorFilter.mode(model.color.toColor(context)!, BlendMode.srcIn) + : null, + width: model.width?.parse, + height: model.height?.parse, + fit: model.fit ?? BoxFit.contain, + errorBuilder: (context, error, stackTrace) { + return const SizedBox(); + }, + ); + } + } - Widget _fileImage(StacImage model, BuildContext context) => Image.file( + Widget _fileImage(StacImage model, BuildContext context) { + if (!model.src.contains(".svg")) { + return Image.file( File(model.src), alignment: model.alignment.value, color: model.color?.toColor(context), @@ -54,8 +74,26 @@ class StacImageParser extends StacParser { return const SizedBox(); }, ); + } else { + return SvgPicture.file( + File(model.src), + alignment: model.alignment.value, + colorFilter: model.color != null + ? ColorFilter.mode(model.color.toColor(context)!, BlendMode.srcIn) + : null, + width: model.width?.parse, + height: model.height?.parse, + fit: model.fit ?? BoxFit.contain, + errorBuilder: (context, error, stackTrace) { + return const SizedBox(); + }, + ); + } + } - Widget _assetImage(StacImage model, BuildContext context) => Image.asset( + Widget _assetImage(StacImage model, BuildContext context) { + if (!model.src.endsWith(".svg")) { + return Image.asset( model.src, alignment: model.alignment.value, color: model.color?.toColor(context), @@ -66,4 +104,20 @@ class StacImageParser extends StacParser { return const SizedBox(); }, ); + } else { + return SvgPicture.asset( + model.src, + alignment: model.alignment.value, + colorFilter: model.color != null + ? ColorFilter.mode(model.color.toColor(context)!, BlendMode.srcIn) + : null, + width: model.width?.parse, + height: model.height?.parse, + fit: model.fit ?? BoxFit.contain, + errorBuilder: (context, error, stackTrace) { + return const SizedBox(); + }, + ); + } + } } diff --git a/packages/stac/pubspec.yaml b/packages/stac/pubspec.yaml index 777fc72c..bee544e0 100644 --- a/packages/stac/pubspec.yaml +++ b/packages/stac/pubspec.yaml @@ -22,6 +22,7 @@ dependencies: dio: ^5.8.0+1 stac_framework: ^0.3.0 cached_network_image: ^3.4.1 + flutter_svg: ^2.1.0 dev_dependencies: flutter_test: