From f47fbb11efefa1899831ccbed0943d25f4014f67 Mon Sep 17 00:00:00 2001 From: Ming Ming Date: Thu, 6 May 2021 04:03:39 +0800 Subject: [PATCH] Always use preview when showing image --- lib/theme.dart | 6 ++++++ lib/widget/album_viewer.dart | 39 +++++++++++++++++++++++------------- lib/widget/home_albums.dart | 16 +++++++-------- lib/widget/home_photos.dart | 24 +++++++++++++++------- 4 files changed, 56 insertions(+), 29 deletions(-) diff --git a/lib/theme.dart b/lib/theme.dart index 017977b9..f0e45779 100644 --- a/lib/theme.dart +++ b/lib/theme.dart @@ -113,6 +113,12 @@ class AppTheme extends StatelessWidget { return Colors.white.withOpacity(.5); } + static Color getListItemBackgroundColor(BuildContext context) { + return Theme.of(context).brightness == Brightness.light + ? Colors.black26 + : Colors.white12; + } + static const primarySwatchLight = Colors.blue; static const primarySwatchDark = Colors.cyan; diff --git a/lib/widget/album_viewer.dart b/lib/widget/album_viewer.dart index e36dd2b8..f0f22a11 100644 --- a/lib/widget/album_viewer.dart +++ b/lib/widget/album_viewer.dart @@ -77,13 +77,10 @@ class _AlbumViewerState extends State void _initCover() { try { - final coverFile = _backingFiles.first; - if (coverFile.hasPreview) { - _coverPreviewUrl = api_util.getFilePreviewUrl(widget.account, coverFile, - width: 1024, height: 600); - } else { - _coverPreviewUrl = api_util.getFileUrl(widget.account, coverFile); - } + final coverFile = + _backingFiles.firstWhere((element) => element.hasPreview); + _coverPreviewUrl = api_util.getFilePreviewUrl(widget.account, coverFile, + width: 1024, height: 600); } catch (_) {} } @@ -164,6 +161,10 @@ class _AlbumViewerState extends State Api.getAuthorizationHeaderValue(widget.account), }, filterQuality: FilterQuality.high, + errorWidget: (context, url, error) { + // just leave it empty + return Container(); + }, imageRenderMethodForWeb: ImageRenderMethodForWeb.HttpGet, ), ), @@ -262,13 +263,8 @@ class _AlbumViewerState extends State .sorted(compareFileDateTimeDescending); itemStreamListItems = _backingFiles.mapWithIndex((i, e) { - var previewUrl; - if (e.hasPreview) { - previewUrl = api_util.getFilePreviewUrl(widget.account, e, - width: _thumbSize, height: _thumbSize); - } else { - previewUrl = api_util.getFileUrl(widget.account, e); - } + final previewUrl = api_util.getFilePreviewUrl(widget.account, e, + width: _thumbSize, height: _thumbSize); return _ImageListItem( account: widget.account, previewUrl: previewUrl, @@ -319,6 +315,21 @@ class _ImageListItem extends SelectableItemStreamListItem { }, fadeInDuration: const Duration(), filterQuality: FilterQuality.high, + errorWidget: (context, url, error) { + // where's the preview??? + return Container( + color: AppTheme.getListItemBackgroundColor(context), + width: 128, + height: 128, + child: Center( + child: Icon( + Icons.image_not_supported, + size: 56, + color: Colors.white.withOpacity(.8), + ), + ), + ); + }, imageRenderMethodForWeb: ImageRenderMethodForWeb.HttpGet, ), ); diff --git a/lib/widget/home_albums.dart b/lib/widget/home_albums.dart index da521f87..bd865475 100644 --- a/lib/widget/home_albums.dart +++ b/lib/widget/home_albums.dart @@ -188,17 +188,13 @@ class _HomeAlbumsState extends State { final latestFile = album.items .whereType() .map((e) => e.file) - .where((element) => file_util.isSupportedFormat(element)) + .where((element) => + file_util.isSupportedFormat(element) && element.hasPreview) .sorted(compareFileDateTimeDescending) .first; - String previewUrl; - if (latestFile.hasPreview) { - previewUrl = api_util.getFilePreviewUrl(widget.account, latestFile, - width: 512, height: 512); - } else { - previewUrl = api_util.getFileUrl(widget.account, latestFile); - } + final previewUrl = api_util.getFilePreviewUrl(widget.account, latestFile, + width: 512, height: 512); cover = FittedBox( clipBehavior: Clip.hardEdge, fit: BoxFit.cover, @@ -209,6 +205,10 @@ class _HomeAlbumsState extends State { }, fadeInDuration: const Duration(), filterQuality: FilterQuality.high, + errorWidget: (context, url, error) { + // just leave it empty + return Container(); + }, imageRenderMethodForWeb: ImageRenderMethodForWeb.HttpGet, ), ); diff --git a/lib/widget/home_photos.dart b/lib/widget/home_photos.dart index e5dedd30..fb5d8748 100644 --- a/lib/widget/home_photos.dart +++ b/lib/widget/home_photos.dart @@ -360,13 +360,8 @@ class _HomePhotosState extends State currentDateStr = newDateStr; } - var previewUrl; - if (f.hasPreview) { - previewUrl = api_util.getFilePreviewUrl(widget.account, f, - width: _thumbSize, height: _thumbSize); - } else { - previewUrl = api_util.getFileUrl(widget.account, f); - } + final previewUrl = api_util.getFilePreviewUrl(widget.account, f, + width: _thumbSize, height: _thumbSize); yield _ImageListItem( file: f, account: widget.account, @@ -491,6 +486,21 @@ class _ImageListItem extends _FileListItem { }, fadeInDuration: const Duration(), filterQuality: FilterQuality.high, + errorWidget: (context, url, error) { + // where's the preview??? + return Container( + color: AppTheme.getListItemBackgroundColor(context), + width: 128, + height: 128, + child: Center( + child: Icon( + Icons.image_not_supported, + size: 56, + color: Colors.white.withOpacity(.8), + ), + ), + ); + }, imageRenderMethodForWeb: ImageRenderMethodForWeb.HttpGet, ), );