From a3353421eae798052712778bb80c51f47b9b6318 Mon Sep 17 00:00:00 2001 From: Fabian Freund Date: Fri, 18 Apr 2025 23:01:01 +0200 Subject: [PATCH] improved snackbars --- .../browser/presentation/screens/browser.dart | 10 ++++++-- .../widgets/browser_modules/browser_view.dart | 8 ++++++ app/lib/utils/ui_helper.dart | 25 ++++++++++++++++--- 3 files changed, 38 insertions(+), 5 deletions(-) diff --git a/app/lib/features/geckoview/features/browser/presentation/screens/browser.dart b/app/lib/features/geckoview/features/browser/presentation/screens/browser.dart index f8719895..b845f87c 100644 --- a/app/lib/features/geckoview/features/browser/presentation/screens/browser.dart +++ b/app/lib/features/geckoview/features/browser/presentation/screens/browser.dart @@ -27,6 +27,8 @@ import 'package:lensai/features/geckoview/features/tabs/features/chat/presentati import 'package:lensai/utils/ui_helper.dart' as ui_helper; class BrowserScreen extends HookConsumerWidget { + Duration get _backButtonPressTimeout => const Duration(seconds: 2); + const BrowserScreen({super.key}); @override @@ -189,7 +191,7 @@ class BrowserScreen extends HookConsumerWidget { DateTime.now().difference( lastBackButtonPress.value!, ) < - const Duration(seconds: 2)) { + _backButtonPressTimeout) { lastBackButtonPress.value = null; if (tabState != null && tabCount > 1) { @@ -203,7 +205,11 @@ class BrowserScreen extends HookConsumerWidget { } } else { lastBackButtonPress.value = DateTime.now(); - ui_helper.showTabBackButtonMessage(context, tabCount); + ui_helper.showTabBackButtonMessage( + context, + tabCount, + _backButtonPressTimeout, + ); return true; } diff --git a/app/lib/features/geckoview/features/browser/presentation/widgets/browser_modules/browser_view.dart b/app/lib/features/geckoview/features/browser/presentation/widgets/browser_modules/browser_view.dart index 5a249890..0be157bf 100644 --- a/app/lib/features/geckoview/features/browser/presentation/widgets/browser_modules/browser_view.dart +++ b/app/lib/features/geckoview/features/browser/presentation/widgets/browser_modules/browser_view.dart @@ -26,6 +26,7 @@ import 'package:lensai/features/user/domain/services/local_authentication.dart'; import 'package:lensai/features/web_feed/domain/providers/add_dialog_blocking.dart'; import 'package:lensai/features/web_feed/domain/services/article_content_processor.dart'; import 'package:lensai/presentation/hooks/on_initialization.dart'; +import 'package:lensai/utils/ui_helper.dart'; class BrowserView extends StatefulHookConsumerWidget { final Duration screenshotPeriod; @@ -203,6 +204,13 @@ class _BrowserViewState extends ConsumerState ); _timerPaused = false; } + + showSuggestNewTabMessage( + context, + onAdd: () async { + await const SearchRoute().push(context); + }, + ); } } diff --git a/app/lib/utils/ui_helper.dart b/app/lib/utils/ui_helper.dart index 2d1d9588..366420b9 100644 --- a/app/lib/utils/ui_helper.dart +++ b/app/lib/utils/ui_helper.dart @@ -14,12 +14,17 @@ void showErrorMessage(BuildContext context, String message) { ScaffoldMessenger.of(context).showSnackBar(snackBar); } -void showTabBackButtonMessage(BuildContext context, int tabCount) { +void showTabBackButtonMessage( + BuildContext context, + int tabCount, + Duration duration, +) { final snackbar = SnackBar( content: (tabCount > 1) - ? const Text('Please click BACK again to close current tab') - : const Text('Please click BACK again to exit app'), + ? const Text('Navigate BACK again to close current tab') + : const Text('Navigate BACK again to exit app'), + duration: duration, ); ScaffoldMessenger.of(context) @@ -47,6 +52,20 @@ void showTabOpenedMessage( ScaffoldMessenger.of(context).showSnackBar(snackBar); } +void showSuggestNewTabMessage( + BuildContext context, { + required void Function() onAdd, + Duration duration = const Duration(seconds: 2), +}) { + final snackBar = SnackBar( + content: const Text('Want to open a new tab?'), + action: SnackBarAction(label: 'New Tab', onPressed: onAdd), + duration: duration, + ); + + ScaffoldMessenger.of(context).showSnackBar(snackBar); +} + void showTabSwitchMessage( BuildContext context, { String? tabName,