From 354af05222810a79ffc59201fddebc367a911d87 Mon Sep 17 00:00:00 2001 From: LongCatIsLooong <31859944+LongCatIsLooong@users.noreply.github.com> Date: Tue, 22 Aug 2023 12:14:49 -0700 Subject: [PATCH] Remove deprecated `ImageProvider` methods (#4725) Have to keep `loadBuffer` since `loadImage` isn't available on 3.7. Fixes https://github.com/flutter/flutter/issues/105336 --- packages/flutter_image/CHANGELOG.md | 3 ++- packages/flutter_image/lib/network.dart | 25 +++++++++++-------- packages/flutter_image/pubspec.yaml | 2 +- packages/flutter_image/test/network_test.dart | 16 ++++++------ 4 files changed, 25 insertions(+), 21 deletions(-) diff --git a/packages/flutter_image/CHANGELOG.md b/packages/flutter_image/CHANGELOG.md index c791bd145f..f4819722dd 100644 --- a/packages/flutter_image/CHANGELOG.md +++ b/packages/flutter_image/CHANGELOG.md @@ -1,6 +1,7 @@ -## NEXT +## 4.1.7 * Updates minimum supported SDK version to Flutter 3.7/Dart 2.19. +* Migrates deprecated `ImageProvider.load` to `ImageProvider.loadBuffer`. ## 4.1.6 diff --git a/packages/flutter_image/lib/network.dart b/packages/flutter_image/lib/network.dart index 79317378e1..a1cd332643 100644 --- a/packages/flutter_image/lib/network.dart +++ b/packages/flutter_image/lib/network.dart @@ -17,6 +17,10 @@ import 'dart:ui' as ui; import 'package:flutter/foundation.dart'; import 'package:flutter/widgets.dart'; +// Method signature for _loadWithRetry decode callbacks. +typedef _SimpleDecoderCallback = Future Function( + ui.ImmutableBuffer buffer); + /// Fetches the image from the given URL, associating it with the given scale. /// /// If [fetchStrategy] is specified, uses it instead of the @@ -95,10 +99,13 @@ class NetworkImageWithRetry extends ImageProvider { } @override - // TODO(cyanglaz): migrate to use the new APIs - // https://github.com/flutter/flutter/issues/105336 - // ignore: deprecated_member_use - ImageStreamCompleter load(NetworkImageWithRetry key, DecoderCallback decode) { + ImageStreamCompleter loadBuffer( + NetworkImageWithRetry key, + // TODO(LongCatIsLooong): migrate to use new `loadImage` API. + // https://github.com/flutter/flutter/issues/132856 + // ignore: deprecated_member_use + DecoderBufferCallback decode, + ) { return OneFrameImageStreamCompleter(_loadWithRetry(key, decode), informationCollector: () sync* { yield ErrorDescription('Image provider: $this'); @@ -126,12 +133,7 @@ class NetworkImageWithRetry extends ImageProvider { } Future _loadWithRetry( - // TODO(cyanglaz): migrate to use the new APIs - // https://github.com/flutter/flutter/issues/105336 - // ignore: deprecated_member_use - NetworkImageWithRetry key, - // ignore: deprecated_member_use - DecoderCallback decode) async { + NetworkImageWithRetry key, _SimpleDecoderCallback decode) async { assert(key == this); final Stopwatch stopwatch = Stopwatch()..start(); @@ -181,7 +183,8 @@ class NetworkImageWithRetry extends ImageProvider { ); } - final ui.Codec codec = await decode(bytes); + final ui.Codec codec = + await decode(await ui.ImmutableBuffer.fromUint8List(bytes)); final ui.Image image = (await codec.getNextFrame()).image; return ImageInfo( image: image, diff --git a/packages/flutter_image/pubspec.yaml b/packages/flutter_image/pubspec.yaml index e9a907272a..03192b0486 100644 --- a/packages/flutter_image/pubspec.yaml +++ b/packages/flutter_image/pubspec.yaml @@ -3,7 +3,7 @@ description: > Image utilities for Flutter: improved network providers, effects, etc. repository: https://github.com/flutter/packages/tree/main/packages/flutter_image issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+flutter_image%22 -version: 4.1.6 +version: 4.1.7 environment: sdk: ">=2.19.0 <4.0.0" diff --git a/packages/flutter_image/test/network_test.dart b/packages/flutter_image/test/network_test.dart index 6711fb2180..6270e53394 100644 --- a/packages/flutter_image/test/network_test.dart +++ b/packages/flutter_image/test/network_test.dart @@ -140,12 +140,12 @@ void assertThatImageLoadingFails( NetworkImageWithRetry subject, List errorLog, ) { - final ImageStreamCompleter completer = subject.load( + final ImageStreamCompleter completer = subject.loadBuffer( subject, - // TODO(cyanglaz): migrate to use the new APIs - // https://github.com/flutter/flutter/issues/105336 + // TODO(LongCatIsLooong): migrate to use new `instantiateImageCodecWithSize` API. + // https://github.com/flutter/flutter/issues/132856 // ignore: deprecated_member_use - PaintingBinding.instance.instantiateImageCodec, + PaintingBinding.instance.instantiateImageCodecFromBuffer, ); completer.addListener(ImageStreamListener( (ImageInfo image, bool synchronousCall) {}, @@ -160,12 +160,12 @@ void assertThatImageLoadingFails( void assertThatImageLoadingSucceeds( NetworkImageWithRetry subject, ) { - final ImageStreamCompleter completer = subject.load( + final ImageStreamCompleter completer = subject.loadBuffer( subject, - // TODO(cyanglaz): migrate to use the new APIs - // https://github.com/flutter/flutter/issues/105336 + // TODO(LongCatIsLooong): migrate to use new `instantiateImageCodecWithSize` API. + // https://github.com/flutter/flutter/issues/132856 // ignore: deprecated_member_use - PaintingBinding.instance.instantiateImageCodec, + PaintingBinding.instance.instantiateImageCodecFromBuffer, ); completer.addListener(ImageStreamListener( expectAsync2((ImageInfo image, bool synchronousCall) {