diff --git a/mobile/lib/widgets/common/immich_image.dart b/mobile/lib/widgets/common/immich_image.dart index 243ef55412..cbad9037c0 100644 --- a/mobile/lib/widgets/common/immich_image.dart +++ b/mobile/lib/widgets/common/immich_image.dart @@ -1,5 +1,4 @@ import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; import 'package:immich_mobile/domain/models/store.model.dart'; import 'package:immich_mobile/entities/asset.entity.dart'; import 'package:immich_mobile/entities/store.entity.dart'; @@ -76,39 +75,32 @@ class ImmichImage extends StatelessWidget { ); } + final imageProviderInstance = ImmichImage.imageProvider( + asset: asset, + width: context.width, + height: context.height, + ); + return OctoImage( fadeInDuration: const Duration(milliseconds: 0), - fadeOutDuration: const Duration(milliseconds: 200), + fadeOutDuration: const Duration(milliseconds: 100), placeholderBuilder: (context) { if (placeholder != null) { - // Use the gray box placeholder return placeholder!; } - // No placeholder return const SizedBox(); }, - image: ImmichImage.imageProvider( - asset: asset, - width: context.width, - height: context.height, - ), + image: imageProviderInstance, width: width, height: height, fit: fit, errorBuilder: (context, error, stackTrace) { - if (error is PlatformException && - error.code == "The asset not found!") { - debugPrint( - "Asset ${asset?.localId} does not exist anymore on device!", - ); - } else { - debugPrint( - "Error getting thumb for assetId=${asset?.localId}: $error", - ); - } + imageProviderInstance.evict(); + return Icon( Icons.image_not_supported_outlined, - color: context.primaryColor, + size: 32, + color: Colors.red[200], ); }, ); diff --git a/mobile/lib/widgets/common/immich_thumbnail.dart b/mobile/lib/widgets/common/immich_thumbnail.dart index 35729ead7b..58613a43ec 100644 --- a/mobile/lib/widgets/common/immich_thumbnail.dart +++ b/mobile/lib/widgets/common/immich_thumbnail.dart @@ -77,15 +77,28 @@ class ImmichThumbnail extends HookConsumerWidget { ); } + final thumbnailProviderInstance = ImmichThumbnail.imageProvider( + asset: asset, + userId: userId, + ); + + customErrorBuilder(BuildContext ctx, Object error, StackTrace? stackTrace) { + thumbnailProviderInstance.evict(); + + final originalErrorWidgetBuilder = + blurHashErrorBuilder(blurhash, fit: fit); + return originalErrorWidgetBuilder(ctx, error, stackTrace); + } + return OctoImage.fromSet( placeholderFadeInDuration: Duration.zero, fadeInDuration: Duration.zero, fadeOutDuration: const Duration(milliseconds: 100), - octoSet: blurHashOrPlaceholder(blurhash), - image: ImmichThumbnail.imageProvider( - asset: asset, - userId: userId, + octoSet: OctoSet( + placeholderBuilder: blurHashPlaceholderBuilder(blurhash, fit: fit), + errorBuilder: customErrorBuilder, ), + image: thumbnailProviderInstance, width: width, height: height, fit: fit,