@@ -15,9 +15,6 @@ import 'image_stream.dart';
15
15
/// Creates a type for an overridable factory function for testing purposes.
16
16
typedef HttpRequestFactory = web.XMLHttpRequest Function ();
17
17
18
- // Method signature for _loadAsync decode callbacks.
19
- typedef _SimpleDecoderCallback = Future <ui.Codec > Function (ui.ImmutableBuffer buffer);
20
-
21
18
/// Default HTTP client.
22
19
web.XMLHttpRequest _httpClient () {
23
20
return web.XMLHttpRequest ();
@@ -57,6 +54,23 @@ class NetworkImage
57
54
return SynchronousFuture <NetworkImage >(this );
58
55
}
59
56
57
+ @override
58
+ ImageStreamCompleter load (image_provider.NetworkImage key, image_provider.DecoderCallback decode) {
59
+ // Ownership of this controller is handed off to [_loadAsync]; it is that
60
+ // method's responsibility to close the controller's stream when the image
61
+ // has been loaded or an error is thrown.
62
+ final StreamController <ImageChunkEvent > chunkEvents =
63
+ StreamController <ImageChunkEvent >();
64
+
65
+ return MultiFrameImageStreamCompleter (
66
+ chunkEvents: chunkEvents.stream,
67
+ codec: _loadAsync (key as NetworkImage , null , null , decode, chunkEvents),
68
+ scale: key.scale,
69
+ debugLabel: key.url,
70
+ informationCollector: _imageStreamInformationCollector (key),
71
+ );
72
+ }
73
+
60
74
@override
61
75
ImageStreamCompleter loadBuffer (image_provider.NetworkImage key, image_provider.DecoderBufferCallback decode) {
62
76
// Ownership of this controller is handed off to [_loadAsync]; it is that
@@ -67,7 +81,7 @@ class NetworkImage
67
81
68
82
return MultiFrameImageStreamCompleter (
69
83
chunkEvents: chunkEvents.stream,
70
- codec: _loadAsync (key as NetworkImage , decode, chunkEvents),
84
+ codec: _loadAsync (key as NetworkImage , null , decode, null , chunkEvents),
71
85
scale: key.scale,
72
86
debugLabel: key.url,
73
87
informationCollector: _imageStreamInformationCollector (key),
@@ -83,7 +97,7 @@ class NetworkImage
83
97
84
98
return MultiFrameImageStreamCompleter (
85
99
chunkEvents: chunkEvents.stream,
86
- codec: _loadAsync (key as NetworkImage , decode, chunkEvents),
100
+ codec: _loadAsync (key as NetworkImage , decode, null , null , chunkEvents),
87
101
scale: key.scale,
88
102
debugLabel: key.url,
89
103
informationCollector: _imageStreamInformationCollector (key),
@@ -107,7 +121,9 @@ class NetworkImage
107
121
// directly in place of the typical `instantiateImageCodec` method.
108
122
Future <ui.Codec > _loadAsync (
109
123
NetworkImage key,
110
- _SimpleDecoderCallback decode,
124
+ image_provider.ImageDecoderCallback ? decode,
125
+ image_provider.DecoderBufferCallback ? decodeBufferDeprecated,
126
+ image_provider.DecoderCallback ? decodeDeprecated,
111
127
StreamController <ImageChunkEvent > chunkEvents,
112
128
) async {
113
129
assert (key == this );
@@ -162,7 +178,17 @@ class NetworkImage
162
178
throw image_provider.NetworkImageLoadException (
163
179
statusCode: request.status, uri: resolved);
164
180
}
165
- return decode (await ui.ImmutableBuffer .fromUint8List (bytes));
181
+
182
+ if (decode != null ) {
183
+ final ui.ImmutableBuffer buffer = await ui.ImmutableBuffer .fromUint8List (bytes);
184
+ return decode (buffer);
185
+ } else if (decodeBufferDeprecated != null ) {
186
+ final ui.ImmutableBuffer buffer = await ui.ImmutableBuffer .fromUint8List (bytes);
187
+ return decodeBufferDeprecated (buffer);
188
+ } else {
189
+ assert (decodeDeprecated != null );
190
+ return decodeDeprecated !(bytes);
191
+ }
166
192
} else {
167
193
// This API only exists in the web engine implementation and is not
168
194
// contained in the analyzer summary for Flutter.
0 commit comments