Skip to content

Commit 5ac1237

Browse files
committed
Simplify html image renderer
1 parent 2df97d9 commit 5ac1237

File tree

3 files changed

+17
-38
lines changed

3 files changed

+17
-38
lines changed

cached_network_image_web/CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,5 @@
1+
## [1.0.1] - 2021-08-02
2+
* Bug: fixed CORS issues in HTML image version.
3+
14
## [1.0.0] - 2021-07-16
25
* Initial release

cached_network_image_web/lib/cached_network_image_web.dart

Lines changed: 13 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,6 @@ import 'package:cached_network_image_platform_interface'
1212
import 'package:flutter/material.dart';
1313
import 'package:flutter_cache_manager/flutter_cache_manager.dart';
1414

15-
// ignore: avoid_web_libraries_in_flutter
16-
import 'dart:html' as html;
17-
// ignore: avoid_web_libraries_in_flutter
18-
import 'dart:js_util' as js_util;
19-
import 'dart:typed_data';
20-
import 'dart:ui' as skia;
21-
2215
/// ImageLoader class to load images on the web platform.
2316
class ImageLoader implements platform.ImageLoader {
2417
@override
@@ -102,36 +95,19 @@ class ImageLoader implements platform.ImageLoader {
10295
StreamController<ImageChunkEvent> chunkEvents,
10396
DecoderCallback decode,
10497
) {
105-
return _getImage(url);
106-
}
107-
108-
Future<skia.Codec> _getImage(String url) {
109-
final completer = Completer<skia.Codec>();
110-
111-
final imgElement = html.ImageElement()
112-
..src = url
113-
..crossOrigin = 'anonymous';
114-
js_util.setProperty(imgElement, 'decoding', 'async');
115-
imgElement.decode().then((_) async {
116-
final canvas = html.CanvasElement(
117-
width: imgElement.naturalWidth, height: imgElement.naturalHeight);
118-
canvas.context2D.drawImage(imgElement, 0, 0);
119-
final blob = await canvas.toBlob('image/png');
120-
final data = await _getBlobData(blob);
121-
final codec = await skia.instantiateImageCodec(data);
122-
completer.complete(codec);
123-
}).catchError((err) {
124-
completer.completeError(err);
125-
});
98+
final resolved = Uri.base.resolve(url);
12699

127-
return completer.future;
128-
}
129-
130-
Future<Uint8List> _getBlobData(html.Blob blob) {
131-
final completer = Completer<Uint8List>();
132-
final reader = html.FileReader();
133-
reader.readAsArrayBuffer(blob);
134-
reader.onLoad.listen((_) => completer.complete(reader.result as Uint8List));
135-
return completer.future;
100+
// ignore: undefined_function
101+
return ui.webOnlyInstantiateImageCodecFromUrl(
102+
resolved,
103+
chunkCallback: (int bytes, int total) {
104+
chunkEvents.add(
105+
ImageChunkEvent(
106+
cumulativeBytesLoaded: bytes,
107+
expectedTotalBytes: total,
108+
),
109+
);
110+
},
111+
) as Future<ui.Codec>;
136112
}
137113
}

cached_network_image_web/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: cached_network_image_web
22
description: Web implementation of CachedNetworkImage
3-
version: 1.0.0
3+
version: 1.0.1
44
homepage: https://github.com/Baseflow/flutter_cached_network_image
55

66
environment:

0 commit comments

Comments
 (0)