fix eviction race condition

This commit is contained in:
mertalev
2026-01-23 14:39:30 -05:00
parent 3555021173
commit f1b1f90fb6
3 changed files with 6 additions and 11 deletions
@@ -1,5 +1,3 @@
import 'dart:async';
import 'package:async/async.dart'; import 'package:async/async.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:immich_mobile/domain/models/asset/base_asset.model.dart'; import 'package:immich_mobile/domain/models/asset/base_asset.model.dart';
@@ -53,14 +51,14 @@ mixin CancellableImageProviderMixin<T extends Object> on CancellableImageProvide
Stream<ImageInfo> loadRequest(ImageRequest request, ImageDecoderCallback decode) async* { Stream<ImageInfo> loadRequest(ImageRequest request, ImageDecoderCallback decode) async* {
if (isCancelled) { if (isCancelled) {
this.request = null; this.request = null;
unawaited(evict()); PaintingBinding.instance.imageCache.evict(this);
return; return;
} }
try { try {
final image = await request.load(decode); final image = await request.load(decode);
if (image == null || isCancelled) { if (image == null || isCancelled) {
unawaited(evict()); PaintingBinding.instance.imageCache.evict(this);
return; return;
} }
yield image; yield image;
@@ -1,4 +1,3 @@
import 'dart:async';
import 'dart:ui'; import 'dart:ui';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
@@ -85,7 +84,7 @@ class LocalFullImageProvider extends CancellableImageProvider<LocalFullImageProv
yield* initialImageStream(); yield* initialImageStream();
if (isCancelled) { if (isCancelled) {
unawaited(evict()); PaintingBinding.instance.imageCache.evict(this);
return; return;
} }
@@ -103,7 +102,7 @@ class LocalFullImageProvider extends CancellableImageProvider<LocalFullImageProv
} }
if (isCancelled) { if (isCancelled) {
unawaited(evict()); PaintingBinding.instance.imageCache.evict(this);
return; return;
} }
@@ -1,5 +1,3 @@
import 'dart:async';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/painting.dart'; import 'package:flutter/painting.dart';
import 'package:immich_mobile/domain/models/setting.model.dart'; import 'package:immich_mobile/domain/models/setting.model.dart';
@@ -86,7 +84,7 @@ class RemoteFullImageProvider extends CancellableImageProvider<RemoteFullImagePr
yield* initialImageStream(); yield* initialImageStream();
if (isCancelled) { if (isCancelled) {
unawaited(evict()); PaintingBinding.instance.imageCache.evict(this);
return; return;
} }
@@ -98,7 +96,7 @@ class RemoteFullImageProvider extends CancellableImageProvider<RemoteFullImagePr
yield* loadRequest(request, decode); yield* loadRequest(request, decode);
if (isCancelled) { if (isCancelled) {
unawaited(evict()); PaintingBinding.instance.imageCache.evict(this);
return; return;
} }