From 23257176f25f2333561315098d014ea270470d0a Mon Sep 17 00:00:00 2001 From: bwees Date: Mon, 2 Jun 2025 12:00:10 -0500 Subject: [PATCH] add snack bar to tell user that we cannot cast an asset that is not uploaded to server --- i18n/en.json | 1 + .../lib/pages/common/gallery_viewer.page.dart | 36 ++++++++++++++++++- 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/i18n/en.json b/i18n/en.json index 8b366af184..9e0c8c0844 100644 --- a/i18n/en.json +++ b/i18n/en.json @@ -1124,6 +1124,7 @@ "list": "List", "loading": "Loading", "loading_search_results_failed": "Loading search results failed", + "local_asset_cast_failed": "Unable to cast an asset that is not uploaded to the server", "local_network": "Local network", "local_network_sheet_info": "The app will connect to the server through this URL when using the specified Wi-Fi network", "location_permission": "Location permission", diff --git a/mobile/lib/pages/common/gallery_viewer.page.dart b/mobile/lib/pages/common/gallery_viewer.page.dart index 6fce762e05..cca11b7a67 100644 --- a/mobile/lib/pages/common/gallery_viewer.page.dart +++ b/mobile/lib/pages/common/gallery_viewer.page.dart @@ -4,6 +4,7 @@ import 'dart:math'; import 'dart:ui' as ui; import 'package:auto_route/auto_route.dart'; +import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_hooks/flutter_hooks.dart' hide Store; @@ -121,8 +122,26 @@ class GalleryViewerPage extends HookConsumerWidget { useEffect(() { final asset = loadAsset(currentIndex.value); - ref.read(castProvider.notifier).loadMedia(asset, false); + if (asset.isRemote) { + ref.read(castProvider.notifier).loadMedia(asset, false); + } else { + WidgetsBinding.instance.addPostFrameCallback((_) { + if (context.mounted) { + context.scaffoldMessenger.showSnackBar( + SnackBar( + duration: const Duration(seconds: 1), + content: Text( + "local_asset_cast_failed".tr(), + style: context.textTheme.bodyLarge?.copyWith( + color: context.primaryColor, + ), + ), + ), + ); + } + }); + } return null; }, [ ref.watch(castProvider).isCasting, @@ -367,9 +386,24 @@ class GalleryViewerPage extends HookConsumerWidget { precacheNextImage(next); }); + context.scaffoldMessenger.hideCurrentSnackBar(); + // send image to casting if the server has it if (newAsset.isRemote) { ref.read(castProvider.notifier).loadMedia(newAsset, false); + } else { + context.scaffoldMessenger.clearSnackBars(); + context.scaffoldMessenger.showSnackBar( + SnackBar( + duration: const Duration(seconds: 2), + content: Text( + "local_asset_cast_failed".tr(), + style: context.textTheme.bodyLarge?.copyWith( + color: context.primaryColor, + ), + ), + ), + ); } }, builder: buildAsset,