From 84462560e3c4e9a7af7b3ff389b0e4f9a60d82ed Mon Sep 17 00:00:00 2001 From: mertalev <101130780+mertalev@users.noreply.github.com> Date: Wed, 13 Aug 2025 00:15:27 -0400 Subject: [PATCH] cancel in image stream completer --- .../presentation/widgets/images/local_image_provider.dart | 8 ++++++-- .../widgets/images/remote_image_provider.dart | 8 ++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/mobile/lib/presentation/widgets/images/local_image_provider.dart b/mobile/lib/presentation/widgets/images/local_image_provider.dart index 5098ab98e7..e85033dcad 100644 --- a/mobile/lib/presentation/widgets/images/local_image_provider.dart +++ b/mobile/lib/presentation/widgets/images/local_image_provider.dart @@ -21,13 +21,15 @@ class LocalThumbProvider extends ImageProvider with Cancella @override ImageStreamCompleter loadImage(LocalThumbProvider key, ImageDecoderCallback decode) { - return OneFramePlaceholderImageStreamCompleter( + final completer = OneFramePlaceholderImageStreamCompleter( _codec(key, decode), informationCollector: () => [ DiagnosticsProperty('Id', key.id), DiagnosticsProperty('Size', key.size), ], ); + completer.addOnLastListenerRemovedCallback(cancel); + return completer; } Stream _codec(LocalThumbProvider key, ImageDecoderCallback decode) async* { @@ -68,7 +70,7 @@ class LocalFullImageProvider extends ImageProvider with @override ImageStreamCompleter loadImage(LocalFullImageProvider key, ImageDecoderCallback decode) { - return OneFramePlaceholderImageStreamCompleter( + final completer = OneFramePlaceholderImageStreamCompleter( _codec(key, decode), initialImage: getCachedImage(LocalThumbProvider(id: key.id)), informationCollector: () => [ @@ -77,6 +79,8 @@ class LocalFullImageProvider extends ImageProvider with DiagnosticsProperty('Size', key.size), ], ); + completer.addOnLastListenerRemovedCallback(cancel); + return completer; } Stream _codec(LocalFullImageProvider key, ImageDecoderCallback decode) async* { diff --git a/mobile/lib/presentation/widgets/images/remote_image_provider.dart b/mobile/lib/presentation/widgets/images/remote_image_provider.dart index 9e918f3f52..4ef9129743 100644 --- a/mobile/lib/presentation/widgets/images/remote_image_provider.dart +++ b/mobile/lib/presentation/widgets/images/remote_image_provider.dart @@ -24,13 +24,15 @@ class RemoteThumbProvider extends ImageProvider with Cancel @override ImageStreamCompleter loadImage(RemoteThumbProvider key, ImageDecoderCallback decode) { - return OneFramePlaceholderImageStreamCompleter( + final completer = OneFramePlaceholderImageStreamCompleter( _codec(key, decode), informationCollector: () => [ DiagnosticsProperty('Image provider', this), DiagnosticsProperty('Asset Id', key.assetId), ], ); + completer.addOnLastListenerRemovedCallback(cancel); + return completer; } Stream _codec(RemoteThumbProvider key, ImageDecoderCallback decode) async* { @@ -73,7 +75,7 @@ class RemoteFullImageProvider extends ImageProvider wit @override ImageStreamCompleter loadImage(RemoteFullImageProvider key, ImageDecoderCallback decode) { - return OneFramePlaceholderImageStreamCompleter( + final completer = OneFramePlaceholderImageStreamCompleter( _codec(key, decode), initialImage: getCachedImage(RemoteThumbProvider(assetId: assetId)), informationCollector: () => [ @@ -81,6 +83,8 @@ class RemoteFullImageProvider extends ImageProvider wit DiagnosticsProperty('Asset Id', key.assetId), ], ); + completer.addOnLastListenerRemovedCallback(cancel); + return completer; } Stream _codec(RemoteFullImageProvider key, ImageDecoderCallback decode) async* {