@@ -12,13 +12,6 @@ import 'package:cached_network_image_platform_interface'
12
12
import 'package:flutter/material.dart' ;
13
13
import 'package:flutter_cache_manager/flutter_cache_manager.dart' ;
14
14
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
-
22
15
/// ImageLoader class to load images on the web platform.
23
16
class ImageLoader implements platform.ImageLoader {
24
17
@override
@@ -102,36 +95,19 @@ class ImageLoader implements platform.ImageLoader {
102
95
StreamController <ImageChunkEvent > chunkEvents,
103
96
DecoderCallback decode,
104
97
) {
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);
126
99
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 >;
136
112
}
137
113
}
0 commit comments