diff --git a/lib/ui/thumbnail_widget.dart b/lib/ui/thumbnail_widget.dart index 246d00119..47de2eee5 100644 --- a/lib/ui/thumbnail_widget.dart +++ b/lib/ui/thumbnail_widget.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:photos/core/cache/image_cache.dart'; import 'package:photos/core/cache/thumbnail_cache.dart'; import 'package:photos/file_repository.dart'; import 'package:photos/models/file.dart'; @@ -119,6 +120,12 @@ class _ThumbnailWidgetState extends State { !_encounteredErrorLoadingThumbnail && !_isLoadingThumbnail) { _isLoadingThumbnail = true; + final cachedThumbnail = ThumbnailFileLruCache.get(widget.file); + if (cachedThumbnail != null) { + _imageProvider = Image.file(cachedThumbnail).image; + _hasLoadedThumbnail = true; + return; + } getThumbnailFromServer(widget.file).then((file) { final imageProvider = Image.file(file).image; if (mounted) { diff --git a/lib/utils/file_util.dart b/lib/utils/file_util.dart index d0d0ace5d..b73f15dca 100644 --- a/lib/utils/file_util.dart +++ b/lib/utils/file_util.dart @@ -101,14 +101,23 @@ Future getFileFromServer(File file) async { Future getThumbnailFromServer(File file) async { if (!file.isEncrypted) { - return ThumbnailCacheManager().getSingleFile(file.getThumbnailUrl()); + return ThumbnailCacheManager() + .getSingleFile(file.getThumbnailUrl()) + .then((data) { + ThumbnailFileLruCache.put(file, data); + return data; + }); } else { return ThumbnailCacheManager() .getFileFromCache(file.getThumbnailUrl()) .then((info) { if (info == null) { - return _downloadAndDecryptThumbnail(file); + return _downloadAndDecryptThumbnail(file).then((data) { + ThumbnailFileLruCache.put(file, data); + return data; + }); } else { + ThumbnailFileLruCache.put(file, info.file); return info.file; } });