cancel in image stream completer

This commit is contained in:
mertalev 2025-08-13 00:15:27 -04:00
parent f931060670
commit 84462560e3
No known key found for this signature in database
GPG key ID: DF6ABC77AAD98C95
2 changed files with 12 additions and 4 deletions

View file

@ -21,13 +21,15 @@ class LocalThumbProvider extends ImageProvider<LocalThumbProvider> with Cancella
@override @override
ImageStreamCompleter loadImage(LocalThumbProvider key, ImageDecoderCallback decode) { ImageStreamCompleter loadImage(LocalThumbProvider key, ImageDecoderCallback decode) {
return OneFramePlaceholderImageStreamCompleter( final completer = OneFramePlaceholderImageStreamCompleter(
_codec(key, decode), _codec(key, decode),
informationCollector: () => <DiagnosticsNode>[ informationCollector: () => <DiagnosticsNode>[
DiagnosticsProperty<String>('Id', key.id), DiagnosticsProperty<String>('Id', key.id),
DiagnosticsProperty<Size>('Size', key.size), DiagnosticsProperty<Size>('Size', key.size),
], ],
); );
completer.addOnLastListenerRemovedCallback(cancel);
return completer;
} }
Stream<ImageInfo> _codec(LocalThumbProvider key, ImageDecoderCallback decode) async* { Stream<ImageInfo> _codec(LocalThumbProvider key, ImageDecoderCallback decode) async* {
@ -68,7 +70,7 @@ class LocalFullImageProvider extends ImageProvider<LocalFullImageProvider> with
@override @override
ImageStreamCompleter loadImage(LocalFullImageProvider key, ImageDecoderCallback decode) { ImageStreamCompleter loadImage(LocalFullImageProvider key, ImageDecoderCallback decode) {
return OneFramePlaceholderImageStreamCompleter( final completer = OneFramePlaceholderImageStreamCompleter(
_codec(key, decode), _codec(key, decode),
initialImage: getCachedImage(LocalThumbProvider(id: key.id)), initialImage: getCachedImage(LocalThumbProvider(id: key.id)),
informationCollector: () => <DiagnosticsNode>[ informationCollector: () => <DiagnosticsNode>[
@ -77,6 +79,8 @@ class LocalFullImageProvider extends ImageProvider<LocalFullImageProvider> with
DiagnosticsProperty<Size>('Size', key.size), DiagnosticsProperty<Size>('Size', key.size),
], ],
); );
completer.addOnLastListenerRemovedCallback(cancel);
return completer;
} }
Stream<ImageInfo> _codec(LocalFullImageProvider key, ImageDecoderCallback decode) async* { Stream<ImageInfo> _codec(LocalFullImageProvider key, ImageDecoderCallback decode) async* {

View file

@ -24,13 +24,15 @@ class RemoteThumbProvider extends ImageProvider<RemoteThumbProvider> with Cancel
@override @override
ImageStreamCompleter loadImage(RemoteThumbProvider key, ImageDecoderCallback decode) { ImageStreamCompleter loadImage(RemoteThumbProvider key, ImageDecoderCallback decode) {
return OneFramePlaceholderImageStreamCompleter( final completer = OneFramePlaceholderImageStreamCompleter(
_codec(key, decode), _codec(key, decode),
informationCollector: () => <DiagnosticsNode>[ informationCollector: () => <DiagnosticsNode>[
DiagnosticsProperty<ImageProvider>('Image provider', this), DiagnosticsProperty<ImageProvider>('Image provider', this),
DiagnosticsProperty<String>('Asset Id', key.assetId), DiagnosticsProperty<String>('Asset Id', key.assetId),
], ],
); );
completer.addOnLastListenerRemovedCallback(cancel);
return completer;
} }
Stream<ImageInfo> _codec(RemoteThumbProvider key, ImageDecoderCallback decode) async* { Stream<ImageInfo> _codec(RemoteThumbProvider key, ImageDecoderCallback decode) async* {
@ -73,7 +75,7 @@ class RemoteFullImageProvider extends ImageProvider<RemoteFullImageProvider> wit
@override @override
ImageStreamCompleter loadImage(RemoteFullImageProvider key, ImageDecoderCallback decode) { ImageStreamCompleter loadImage(RemoteFullImageProvider key, ImageDecoderCallback decode) {
return OneFramePlaceholderImageStreamCompleter( final completer = OneFramePlaceholderImageStreamCompleter(
_codec(key, decode), _codec(key, decode),
initialImage: getCachedImage(RemoteThumbProvider(assetId: assetId)), initialImage: getCachedImage(RemoteThumbProvider(assetId: assetId)),
informationCollector: () => <DiagnosticsNode>[ informationCollector: () => <DiagnosticsNode>[
@ -81,6 +83,8 @@ class RemoteFullImageProvider extends ImageProvider<RemoteFullImageProvider> wit
DiagnosticsProperty<String>('Asset Id', key.assetId), DiagnosticsProperty<String>('Asset Id', key.assetId),
], ],
); );
completer.addOnLastListenerRemovedCallback(cancel);
return completer;
} }
Stream<ImageInfo> _codec(RemoteFullImageProvider key, ImageDecoderCallback decode) async* { Stream<ImageInfo> _codec(RemoteFullImageProvider key, ImageDecoderCallback decode) async* {