Skip to content

Commit 97fbb84

Browse files
committed
use loadbuffer and deprecate load
1 parent 607a2eb commit 97fbb84

File tree

11 files changed

+215
-19
lines changed

11 files changed

+215
-19
lines changed

cached_network_image/example/ios/Flutter/AppFrameworkInfo.plist

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,6 @@
2121
<key>CFBundleVersion</key>
2222
<string>1.0</string>
2323
<key>MinimumOSVersion</key>
24-
<string>9.0</string>
24+
<string>11.0</string>
2525
</dict>
2626
</plist>

cached_network_image/example/ios/Podfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# Uncomment this line to define a global platform for your project
2-
platform :ios, '9.0'
2+
platform :ios, '11.0'
33

44
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
55
ENV['COCOAPODS_DISABLE_STATS'] = 'true'

cached_network_image/example/ios/Runner.xcodeproj/project.pbxproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -340,7 +340,7 @@
340340
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
341341
GCC_WARN_UNUSED_FUNCTION = YES;
342342
GCC_WARN_UNUSED_VARIABLE = YES;
343-
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
343+
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
344344
MTL_ENABLE_DEBUG_INFO = NO;
345345
SDKROOT = iphoneos;
346346
SUPPORTED_PLATFORMS = iphoneos;
@@ -417,7 +417,7 @@
417417
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
418418
GCC_WARN_UNUSED_FUNCTION = YES;
419419
GCC_WARN_UNUSED_VARIABLE = YES;
420-
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
420+
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
421421
MTL_ENABLE_DEBUG_INFO = YES;
422422
ONLY_ACTIVE_ARCH = YES;
423423
SDKROOT = iphoneos;
@@ -466,7 +466,7 @@
466466
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
467467
GCC_WARN_UNUSED_FUNCTION = YES;
468468
GCC_WARN_UNUSED_VARIABLE = YES;
469-
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
469+
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
470470
MTL_ENABLE_DEBUG_INFO = NO;
471471
SDKROOT = iphoneos;
472472
SUPPORTED_PLATFORMS = iphoneos;

cached_network_image/example/pubspec.yaml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ name: example
22
description: A new Flutter project.
33

44
environment:
5-
sdk: ">=2.17.0 <3.0.0"
5+
sdk: ">=2.18.0 <3.0.0"
6+
flutter: ">=3.3.0"
67

78
dependencies:
89
flutter:
@@ -12,7 +13,7 @@ dependencies:
1213
baseflow_plugin_template:
1314
git:
1415
url: https://github.com/Baseflow/baseflow_plugin_template.git
15-
ref: v2.1.0
16+
ref: 922aa52773308bec29f0cfa2661b43ecdedd50c5
1617

1718
# The following adds the Cupertino Icons font to your application.
1819
# Use with the CupertinoIcons class for iOS style icons.

cached_network_image/lib/src/image_provider/_image_loader.dart

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import 'dart:async';
2+
import 'dart:typed_data';
23
import 'dart:ui' as ui;
4+
import 'dart:ui';
35

46
import 'package:cached_network_image_platform_interface/cached_network_image_platform_interface.dart';
57
import 'package:flutter/material.dart';
@@ -14,6 +16,7 @@ import 'package:cached_network_image_platform_interface'
1416

1517
/// ImageLoader class to load images on IO platforms.
1618
class ImageLoader implements platform.ImageLoader {
19+
@Deprecated('use loadBufferAsync instead')
1720
@override
1821
Stream<ui.Codec> loadAsync(
1922
String url,
@@ -27,6 +30,65 @@ class ImageLoader implements platform.ImageLoader {
2730
Function()? errorListener,
2831
ImageRenderMethodForWeb imageRenderMethodForWeb,
2932
Function() evictImage,
33+
) {
34+
return _load(
35+
url,
36+
cacheKey,
37+
chunkEvents,
38+
decode,
39+
cacheManager,
40+
maxHeight,
41+
maxWidth,
42+
headers,
43+
errorListener,
44+
imageRenderMethodForWeb,
45+
evictImage,
46+
);
47+
}
48+
49+
@override
50+
Stream<ui.Codec> loadBufferAsync(
51+
String url,
52+
String? cacheKey,
53+
StreamController<ImageChunkEvent> chunkEvents,
54+
DecoderBufferCallback decode,
55+
BaseCacheManager cacheManager,
56+
int? maxHeight,
57+
int? maxWidth,
58+
Map<String, String>? headers,
59+
Function()? errorListener,
60+
ImageRenderMethodForWeb imageRenderMethodForWeb,
61+
Function() evictImage) {
62+
return _load(
63+
url,
64+
cacheKey,
65+
chunkEvents,
66+
(bytes) async {
67+
final buffer = await ImmutableBuffer.fromUint8List(bytes);
68+
return decode(buffer);
69+
},
70+
cacheManager,
71+
maxHeight,
72+
maxWidth,
73+
headers,
74+
errorListener,
75+
imageRenderMethodForWeb,
76+
evictImage,
77+
);
78+
}
79+
80+
Stream<ui.Codec> _load(
81+
String url,
82+
String? cacheKey,
83+
StreamController<ImageChunkEvent> chunkEvents,
84+
_FileDecoderCallback decode,
85+
BaseCacheManager cacheManager,
86+
int? maxHeight,
87+
int? maxWidth,
88+
Map<String, String>? headers,
89+
Function()? errorListener,
90+
ImageRenderMethodForWeb imageRenderMethodForWeb,
91+
Function() evictImage,
3092
) async* {
3193
try {
3294
assert(
@@ -75,3 +137,5 @@ class ImageLoader implements platform.ImageLoader {
75137
}
76138
}
77139
}
140+
141+
typedef _FileDecoderCallback = Future<ui.Codec> Function(Uint8List);

cached_network_image/lib/src/image_provider/cached_network_image_provider.dart

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,8 @@ class CachedNetworkImageProvider
7171
return SynchronousFuture<CachedNetworkImageProvider>(this);
7272
}
7373

74+
@Deprecated(
75+
'load is deprecated, use loadBuffer instead, see https://docs.flutter.dev/release/breaking-changes/image-provider-load-buffer')
7476
@override
7577
ImageStreamCompleter load(
7678
image_provider.CachedNetworkImageProvider key, DecoderCallback decode) {
@@ -110,6 +112,45 @@ class CachedNetworkImageProvider
110112
);
111113
}
112114

115+
@override
116+
ImageStreamCompleter loadBuffer(image_provider.CachedNetworkImageProvider key,
117+
DecoderBufferCallback decode) {
118+
final chunkEvents = StreamController<ImageChunkEvent>();
119+
return MultiImageStreamCompleter(
120+
codec: _loadBufferAsync(key, chunkEvents, decode),
121+
chunkEvents: chunkEvents.stream,
122+
scale: key.scale,
123+
informationCollector: () sync* {
124+
yield DiagnosticsProperty<ImageProvider>(
125+
'Image provider: $this \n Image key: $key',
126+
this,
127+
style: DiagnosticsTreeStyle.errorProperty,
128+
);
129+
},
130+
);
131+
}
132+
133+
Stream<ui.Codec> _loadBufferAsync(
134+
image_provider.CachedNetworkImageProvider key,
135+
StreamController<ImageChunkEvent> chunkEvents,
136+
DecoderBufferCallback decode,
137+
) {
138+
assert(key == this);
139+
return ImageLoader().loadBufferAsync(
140+
url,
141+
cacheKey,
142+
chunkEvents,
143+
decode,
144+
cacheManager ?? DefaultCacheManager(),
145+
maxHeight,
146+
maxWidth,
147+
headers,
148+
errorListener,
149+
imageRenderMethodForWeb,
150+
() => PaintingBinding.instance.imageCache.evict(key),
151+
);
152+
}
153+
113154
@override
114155
bool operator ==(dynamic other) {
115156
if (other is CachedNetworkImageProvider) {

cached_network_image/pubspec.yaml

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,10 @@ dependencies:
99
sdk: flutter
1010
flutter_cache_manager: ^3.3.0
1111
octo_image: ^1.0.0
12-
cached_network_image_platform_interface: ^1.0.0
13-
cached_network_image_web: ^1.0.0
12+
cached_network_image_platform_interface:
13+
path: ../cached_network_image_platform_interface
14+
cached_network_image_web:
15+
path: ../cached_network_image_web
1416

1517

1618
dev_dependencies:
@@ -21,5 +23,5 @@ dev_dependencies:
2123
file: ^6.1.0
2224

2325
environment:
24-
flutter: ">=3.0.0"
25-
sdk: ">=2.17.0 <3.0.0"
26+
flutter: ">=3.3.0"
27+
sdk: ">=2.18.0 <3.0.0"

cached_network_image_platform_interface/lib/cached_network_image_platform_interface.dart

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ enum ImageRenderMethodForWeb {
2121
class ImageLoader {
2222
/// loads the images async and gives the resulted codecs on a Stream. The
2323
/// Stream gives the option to show multiple images after each other.
24+
@Deprecated('use loadBufferAsync instead')
2425
Stream<ui.Codec> loadAsync(
2526
String url,
2627
String? cacheKey,
@@ -36,4 +37,22 @@ class ImageLoader {
3637
) {
3738
throw UnimplementedError();
3839
}
40+
41+
/// loads the images async and gives the resulted codecs on a Stream. The
42+
/// Stream gives the option to show multiple images after each other.
43+
Stream<ui.Codec> loadBufferAsync(
44+
String url,
45+
String? cacheKey,
46+
StreamController<ImageChunkEvent> chunkEvents,
47+
DecoderBufferCallback decode,
48+
BaseCacheManager cacheManager,
49+
int? maxHeight,
50+
int? maxWidth,
51+
Map<String, String>? headers,
52+
Function()? errorListener,
53+
ImageRenderMethodForWeb imageRenderMethodForWeb,
54+
Function() evictImage,
55+
) {
56+
throw UnimplementedError();
57+
}
3958
}

cached_network_image_platform_interface/pubspec.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ version: 1.0.0
44
homepage: https://github.com/Baseflow/flutter_cached_network_image
55

66
environment:
7-
sdk: ">=2.12.0 <3.0.0"
8-
flutter: ">=1.17.0"
7+
sdk: ">=2.18.0 <3.0.0"
8+
flutter: ">=3.3.0"
99

1010
dependencies:
1111
flutter:

cached_network_image_web/lib/cached_network_image_web.dart

Lines changed: 71 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
library cached_network_image_web;
22

33
import 'dart:async';
4+
import 'dart:typed_data';
45
import 'dart:ui' as ui;
6+
import 'dart:ui';
57

68
import 'package:cached_network_image_platform_interface'
79
'/cached_network_image_platform_interface.dart' as platform
@@ -14,6 +16,7 @@ import 'package:flutter_cache_manager/flutter_cache_manager.dart';
1416

1517
/// ImageLoader class to load images on the web platform.
1618
class ImageLoader implements platform.ImageLoader {
19+
@Deprecated('use loadBufferAsync instead')
1720
@override
1821
Stream<ui.Codec> loadAsync(
1922
String url,
@@ -43,15 +46,79 @@ class ImageLoader implements platform.ImageLoader {
4346
evictImage,
4447
);
4548
case ImageRenderMethodForWeb.HtmlImage:
46-
return _loadAsyncHtmlImage(url, chunkEvents, decode).asStream();
49+
return _loadAsyncHtmlImage(url, chunkEvents).asStream();
50+
}
51+
}
52+
53+
@override
54+
Stream<ui.Codec> loadBufferAsync(
55+
String url,
56+
String? cacheKey,
57+
StreamController<ImageChunkEvent> chunkEvents,
58+
DecoderBufferCallback decode,
59+
BaseCacheManager cacheManager,
60+
int? maxHeight,
61+
int? maxWidth,
62+
Map<String, String>? headers,
63+
Function()? errorListener,
64+
ImageRenderMethodForWeb imageRenderMethodForWeb,
65+
Function() evictImage,
66+
) {
67+
_load(
68+
url,
69+
cacheKey,
70+
chunkEvents,
71+
(bytes) async {
72+
final buffer = await ImmutableBuffer.fromUint8List(bytes);
73+
return decode(buffer);
74+
},
75+
cacheManager,
76+
maxHeight,
77+
maxWidth,
78+
headers,
79+
errorListener,
80+
imageRenderMethodForWeb,
81+
evictImage,
82+
);
83+
}
84+
85+
Stream<ui.Codec> _load(
86+
String url,
87+
String? cacheKey,
88+
StreamController<ImageChunkEvent> chunkEvents,
89+
_FileDecoderCallback decode,
90+
BaseCacheManager cacheManager,
91+
int? maxHeight,
92+
int? maxWidth,
93+
Map<String, String>? headers,
94+
Function()? errorListener,
95+
ImageRenderMethodForWeb imageRenderMethodForWeb,
96+
Function() evictImage,
97+
) {
98+
switch (imageRenderMethodForWeb) {
99+
case ImageRenderMethodForWeb.HttpGet:
100+
return _loadAsyncHttpGet(
101+
url,
102+
cacheKey,
103+
chunkEvents,
104+
decode,
105+
cacheManager,
106+
maxHeight,
107+
maxWidth,
108+
headers,
109+
errorListener,
110+
evictImage,
111+
);
112+
case ImageRenderMethodForWeb.HtmlImage:
113+
return _loadAsyncHtmlImage(url, chunkEvents).asStream();
47114
}
48115
}
49116

50117
Stream<ui.Codec> _loadAsyncHttpGet(
51118
String url,
52119
String? cacheKey,
53120
StreamController<ImageChunkEvent> chunkEvents,
54-
DecoderCallback decode,
121+
_FileDecoderCallback decode,
55122
BaseCacheManager cacheManager,
56123
int? maxHeight,
57124
int? maxWidth,
@@ -93,7 +160,6 @@ class ImageLoader implements platform.ImageLoader {
93160
Future<ui.Codec> _loadAsyncHtmlImage(
94161
String url,
95162
StreamController<ImageChunkEvent> chunkEvents,
96-
DecoderCallback decode,
97163
) {
98164
final resolved = Uri.base.resolve(url);
99165

@@ -111,3 +177,5 @@ class ImageLoader implements platform.ImageLoader {
111177
) as Future<ui.Codec>;
112178
}
113179
}
180+
181+
typedef _FileDecoderCallback = Future<ui.Codec> Function(Uint8List);

cached_network_image_web/pubspec.yaml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,15 @@ version: 1.0.1
44
homepage: https://github.com/Baseflow/flutter_cached_network_image
55

66
environment:
7-
sdk: ">=2.12.0 <3.0.0"
8-
flutter: ">=1.17.0"
7+
sdk: ">=2.18.0 <3.0.0"
8+
flutter: ">=3.3.0"
99

1010
dependencies:
1111
flutter:
1212
sdk: flutter
1313
flutter_cache_manager: ^3.0.0
14-
cached_network_image_platform_interface: ^1.0.0
14+
cached_network_image_platform_interface:
15+
path: ../cached_network_image_platform_interface
1516

1617
dev_dependencies:
1718
flutter_test:

0 commit comments

Comments
 (0)