Skip to content

Commit bdbfe33

Browse files
authored
Merge pull request #773 from Baseflow/bugfix/use-loadbuffer
use loadbuffer and deprecate load
2 parents 607a2eb + f611c96 commit bdbfe33

15 files changed

+223
-22
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: 44 additions & 1 deletion
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) {
@@ -89,6 +91,8 @@ class CachedNetworkImageProvider
8991
);
9092
}
9193

94+
@Deprecated(
95+
'_loadAsync is deprecated, use loadBuffer instead, see https://docs.flutter.dev/release/breaking-changes/image-provider-load-buffer')
9296
Stream<ui.Codec> _loadAsync(
9397
image_provider.CachedNetworkImageProvider key,
9498
StreamController<ImageChunkEvent> chunkEvents,
@@ -110,6 +114,45 @@ class CachedNetworkImageProvider
110114
);
111115
}
112116

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

124167
@override
125-
int get hashCode => hashValues(cacheKey ?? url, scale, maxHeight, maxWidth);
168+
int get hashCode => Object.hash(cacheKey ?? url, scale, maxHeight, maxWidth);
126169

127170
@override
128171
String toString() => '$runtimeType("$url", scale: $scale)';

cached_network_image/pubspec.yaml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ 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: ^2.0.0
13+
cached_network_image_web: ^1.0.2
1414

1515

1616
dev_dependencies:
@@ -21,5 +21,5 @@ dev_dependencies:
2121
file: ^6.1.0
2222

2323
environment:
24-
flutter: ">=3.0.0"
25-
sdk: ">=2.17.0 <3.0.0"
24+
flutter: ">=3.3.0"
25+
sdk: ">=2.18.0 <3.0.0"
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,5 @@
1+
## [2.0.0] - 2022-08-31
2+
* Added loadBufferAsync for Flutter 3.3
3+
14
## [1.0.0] - 2021-07-16
25
* Initial release

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: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
name: cached_network_image_platform_interface
22
description: Platform interface for CachedNetworkImage
3-
version: 1.0.0
3+
version: 2.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_platform_interface/test/cached_network_image_platform_interface_test.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
// ignore_for_file: deprecated_member_use_from_same_package
2+
13
import 'dart:async';
24
import 'dart:typed_data';
35
import 'dart:ui' as ui;

cached_network_image_web/CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
## [1.0.2] - 2022-08-31
2+
* Added loadBufferAsync and deprecated loadAsync
3+
14
## [1.0.1] - 2021-08-02
25
* Bug: fixed CORS issues in HTML image version.
36

0 commit comments

Comments
 (0)