Skip to content

Commit 02465f6

Browse files
committed
Support relative paths for network image rendering via custom image render API
Fixes Sub6Resources#153 and closes Sub6Resources#146
1 parent e8f50ed commit 02465f6

File tree

2 files changed

+10
-3
lines changed

2 files changed

+10
-3
lines changed

example/lib/main.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,8 @@ const htmlData = """
127127
<img src='asset:assets/mac.svg' width='100' />
128128
<h3>Base64</h3>
129129
<img alt='Red dot' src='data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==' />
130+
<h3>Custom source matcher (relative paths)</h3>
131+
<img src='/wikipedia/commons/thumb/e/ef/Octicons-logo-github.svg/200px-Octicons-logo-github.svg.png' />
130132
<h3>Custom image render (flutter.dev)</h3>
131133
<img src='https://flutter.dev/images/flutter-mono-81x100.png' />
132134
<h3>No image source</h3>
@@ -175,6 +177,8 @@ class _MyHomePageState extends State<MyHomePage> {
175177
headers: {"Custom-Header": "some-value"},
176178
altWidget: (alt) => Text(alt),
177179
),
180+
(attr, _) => attr["src"] != null && attr["src"].startsWith("/wiki"):
181+
networkImageRender(baseUrl: "https://upload.wikimedia.org"),
178182
},
179183
onLinkTap: (url) {
180184
print("Opening $url...");

lib/image_render.dart

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,14 +90,17 @@ ImageRender assetImageRender({
9090

9191
ImageRender networkImageRender({
9292
Map<String, String> headers,
93+
String baseUrl,
9394
double width,
9495
double height,
9596
Widget Function(String) altWidget,
9697
}) =>
9798
(context, attributes, element) {
99+
final src =
100+
baseUrl != null ? baseUrl + _src(attributes) : _src(attributes);
98101
precacheImage(
99102
NetworkImage(
100-
_src(attributes),
103+
src,
101104
headers: headers,
102105
),
103106
context.buildContext,
@@ -107,7 +110,7 @@ ImageRender networkImageRender({
107110
);
108111
Completer<Size> completer = Completer();
109112
Image image =
110-
Image.network(_src(attributes), frameBuilder: (ctx, child, frame, _) {
113+
Image.network(src, frameBuilder: (ctx, child, frame, _) {
111114
if (frame == null) {
112115
if (!completer.isCompleted) {
113116
completer.completeError("error");
@@ -137,7 +140,7 @@ ImageRender networkImageRender({
137140
builder: (BuildContext buildContext, AsyncSnapshot<Size> snapshot) {
138141
if (snapshot.hasData) {
139142
return Image.network(
140-
_src(attributes),
143+
src,
141144
headers: headers,
142145
width: width ?? _width(attributes) ?? snapshot.data.width,
143146
height: height ?? _height(attributes),

0 commit comments

Comments
 (0)