Skip to content

Commit ced95e2

Browse files
committed
Added support for SVG files in StacImage
StacImage can now handle SVG images fetched via network or assets or from files
1 parent 520a0a2 commit ced95e2

File tree

5 files changed

+161
-4
lines changed

5 files changed

+161
-4
lines changed
Lines changed: 19 additions & 0 deletions
Loading

examples/stac_gallery/assets/json/image_example.json

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,39 @@
104104
"fit": "fill"
105105
}
106106
]
107+
},
108+
{
109+
"type": "sizedBox",
110+
"height": 24
111+
},
112+
{
113+
"type": "row",
114+
"mainAxisAlignment": "center",
115+
"crossAxisAlignment": "center",
116+
"children": [
117+
{
118+
"type": "image",
119+
"src": "https://dev.w3.org/SVG/tools/svgweb/samples/svg-files/android.svg",
120+
"height": 100,
121+
"width": 100
122+
},
123+
{
124+
"type": "sizedBox",
125+
"width": 20
126+
},
127+
{
128+
"type": "image",
129+
"imageType": "asset",
130+
"src": "assets/images/gallery.svg",
131+
"color": "primary",
132+
"height": 100,
133+
"width": 100
134+
}
135+
]
136+
},
137+
{
138+
"type": "sizedBox",
139+
"height": 24
107140
}
108141
]
109142
}

examples/stac_gallery/pubspec.lock

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,14 @@ packages:
286286
url: "https://pub.dev"
287287
source: hosted
288288
version: "5.0.0"
289+
flutter_svg:
290+
dependency: transitive
291+
description:
292+
name: flutter_svg
293+
sha256: d44bf546b13025ec7353091516f6881f1d4c633993cb109c3916c3a0159dadf1
294+
url: "https://pub.dev"
295+
source: hosted
296+
version: "2.1.0"
289297
flutter_test:
290298
dependency: "direct dev"
291299
description: flutter
@@ -499,6 +507,14 @@ packages:
499507
url: "https://pub.dev"
500508
source: hosted
501509
version: "1.9.1"
510+
path_parsing:
511+
dependency: transitive
512+
description:
513+
name: path_parsing
514+
sha256: "883402936929eac138ee0a45da5b0f2c80f89913e6dc3bf77eb65b84b409c6ca"
515+
url: "https://pub.dev"
516+
source: hosted
517+
version: "1.1.0"
502518
path_provider:
503519
dependency: transitive
504520
description:
@@ -547,6 +563,14 @@ packages:
547563
url: "https://pub.dev"
548564
source: hosted
549565
version: "2.3.0"
566+
petitparser:
567+
dependency: transitive
568+
description:
569+
name: petitparser
570+
sha256: "07c8f0b1913bcde1ff0d26e57ace2f3012ccbf2b204e070290dad3bb22797646"
571+
url: "https://pub.dev"
572+
source: hosted
573+
version: "6.1.0"
550574
platform:
551575
dependency: transitive
552576
description:
@@ -797,6 +821,30 @@ packages:
797821
url: "https://pub.dev"
798822
source: hosted
799823
version: "4.5.1"
824+
vector_graphics:
825+
dependency: transitive
826+
description:
827+
name: vector_graphics
828+
sha256: "44cc7104ff32563122a929e4620cf3efd584194eec6d1d913eb5ba593dbcf6de"
829+
url: "https://pub.dev"
830+
source: hosted
831+
version: "1.1.18"
832+
vector_graphics_codec:
833+
dependency: transitive
834+
description:
835+
name: vector_graphics_codec
836+
sha256: "99fd9fbd34d9f9a32efd7b6a6aae14125d8237b10403b422a6a6dfeac2806146"
837+
url: "https://pub.dev"
838+
source: hosted
839+
version: "1.1.13"
840+
vector_graphics_compiler:
841+
dependency: transitive
842+
description:
843+
name: vector_graphics_compiler
844+
sha256: "557a315b7d2a6dbb0aaaff84d857967ce6bdc96a63dc6ee2a57ce5a6ee5d3331"
845+
url: "https://pub.dev"
846+
source: hosted
847+
version: "1.1.17"
800848
vector_math:
801849
dependency: transitive
802850
description:
@@ -885,6 +933,14 @@ packages:
885933
url: "https://pub.dev"
886934
source: hosted
887935
version: "1.1.0"
936+
xml:
937+
dependency: transitive
938+
description:
939+
name: xml
940+
sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226
941+
url: "https://pub.dev"
942+
source: hosted
943+
version: "6.5.0"
888944
yaml:
889945
dependency: transitive
890946
description:

packages/stac/lib/src/parsers/widgets/stac_image/stac_image_parser.dart

Lines changed: 52 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import 'dart:io';
22

33
import 'package:cached_network_image/cached_network_image.dart';
44
import 'package:flutter/cupertino.dart';
5+
import 'package:flutter_svg/flutter_svg.dart';
56
import 'package:stac/src/parsers/widgets/stac_double/stac_double.dart';
67
import 'package:stac/src/utils/color_utils.dart';
78
import 'package:stac/src/utils/widget_type.dart';
@@ -30,8 +31,9 @@ class StacImageParser extends StacParser<StacImage> {
3031
}
3132
}
3233

33-
Widget _networkImage(StacImage model, BuildContext context) =>
34-
CachedNetworkImage(
34+
Widget _networkImage(StacImage model, BuildContext context) {
35+
if(!model.src.contains(".svg")) {
36+
return CachedNetworkImage(
3537
imageUrl: model.src,
3638
alignment: model.alignment.value,
3739
color: model.color?.toColor(context),
@@ -42,8 +44,24 @@ class StacImageParser extends StacParser<StacImage> {
4244
return const SizedBox();
4345
},
4446
);
47+
} else {
48+
return SvgPicture.network(
49+
model.src,
50+
alignment: model.alignment.value,
51+
colorFilter: model.color != null ? ColorFilter.mode(model.color.toColor(context)!, BlendMode.srcIn) : null,
52+
width: model.width?.parse,
53+
height: model.height?.parse,
54+
fit: model.fit??BoxFit.contain,
55+
errorBuilder: (context, error, stackTrace) {
56+
return const SizedBox();
57+
},
58+
);
59+
}
60+
}
4561

46-
Widget _fileImage(StacImage model, BuildContext context) => Image.file(
62+
Widget _fileImage(StacImage model, BuildContext context) {
63+
if(!model.src.contains(".svg")) {
64+
return Image.file(
4765
File(model.src),
4866
alignment: model.alignment.value,
4967
color: model.color?.toColor(context),
@@ -54,8 +72,24 @@ class StacImageParser extends StacParser<StacImage> {
5472
return const SizedBox();
5573
},
5674
);
75+
} else {
76+
return SvgPicture.file(
77+
File(model.src),
78+
alignment: model.alignment.value,
79+
colorFilter: model.color != null ? ColorFilter.mode(model.color.toColor(context)!, BlendMode.srcIn) : null,
80+
width: model.width?.parse,
81+
height: model.height?.parse,
82+
fit: model.fit??BoxFit.contain,
83+
errorBuilder: (context, error, stackTrace) {
84+
return const SizedBox();
85+
},
86+
);
87+
}
88+
}
5789

58-
Widget _assetImage(StacImage model, BuildContext context) => Image.asset(
90+
Widget _assetImage(StacImage model, BuildContext context) {
91+
if(!model.src.endsWith(".svg")) {
92+
return Image.asset(
5993
model.src,
6094
alignment: model.alignment.value,
6195
color: model.color?.toColor(context),
@@ -66,4 +100,18 @@ class StacImageParser extends StacParser<StacImage> {
66100
return const SizedBox();
67101
},
68102
);
103+
} else {
104+
return SvgPicture.asset(
105+
model.src,
106+
alignment: model.alignment.value,
107+
colorFilter: model.color != null ? ColorFilter.mode(model.color.toColor(context)!, BlendMode.srcIn) : null,
108+
width: model.width?.parse,
109+
height: model.height?.parse,
110+
fit: model.fit??BoxFit.contain,
111+
errorBuilder: (context, error, stackTrace) {
112+
return const SizedBox();
113+
},
114+
);
115+
}
116+
}
69117
}

packages/stac/pubspec.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ dependencies:
2222
dio: ^5.8.0+1
2323
stac_framework: ^0.3.0
2424
cached_network_image: ^3.4.1
25+
flutter_svg: ^2.1.0
2526

2627
dev_dependencies:
2728
flutter_test:

0 commit comments

Comments
 (0)