improved snackbars

This commit is contained in:
Fabian Freund
2025-04-18 23:01:01 +02:00
parent b80813a3be
commit a3353421ea
3 changed files with 38 additions and 5 deletions
@@ -27,6 +27,8 @@ import 'package:lensai/features/geckoview/features/tabs/features/chat/presentati
import 'package:lensai/utils/ui_helper.dart' as ui_helper; import 'package:lensai/utils/ui_helper.dart' as ui_helper;
class BrowserScreen extends HookConsumerWidget { class BrowserScreen extends HookConsumerWidget {
Duration get _backButtonPressTimeout => const Duration(seconds: 2);
const BrowserScreen({super.key}); const BrowserScreen({super.key});
@override @override
@@ -189,7 +191,7 @@ class BrowserScreen extends HookConsumerWidget {
DateTime.now().difference( DateTime.now().difference(
lastBackButtonPress.value!, lastBackButtonPress.value!,
) < ) <
const Duration(seconds: 2)) { _backButtonPressTimeout) {
lastBackButtonPress.value = null; lastBackButtonPress.value = null;
if (tabState != null && tabCount > 1) { if (tabState != null && tabCount > 1) {
@@ -203,7 +205,11 @@ class BrowserScreen extends HookConsumerWidget {
} }
} else { } else {
lastBackButtonPress.value = DateTime.now(); lastBackButtonPress.value = DateTime.now();
ui_helper.showTabBackButtonMessage(context, tabCount); ui_helper.showTabBackButtonMessage(
context,
tabCount,
_backButtonPressTimeout,
);
return true; return true;
} }
@@ -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/providers/add_dialog_blocking.dart';
import 'package:lensai/features/web_feed/domain/services/article_content_processor.dart'; import 'package:lensai/features/web_feed/domain/services/article_content_processor.dart';
import 'package:lensai/presentation/hooks/on_initialization.dart'; import 'package:lensai/presentation/hooks/on_initialization.dart';
import 'package:lensai/utils/ui_helper.dart';
class BrowserView extends StatefulHookConsumerWidget { class BrowserView extends StatefulHookConsumerWidget {
final Duration screenshotPeriod; final Duration screenshotPeriod;
@@ -203,6 +204,13 @@ class _BrowserViewState extends ConsumerState<BrowserView>
); );
_timerPaused = false; _timerPaused = false;
} }
showSuggestNewTabMessage(
context,
onAdd: () async {
await const SearchRoute().push(context);
},
);
} }
} }
+22 -3
View File
@@ -14,12 +14,17 @@ void showErrorMessage(BuildContext context, String message) {
ScaffoldMessenger.of(context).showSnackBar(snackBar); ScaffoldMessenger.of(context).showSnackBar(snackBar);
} }
void showTabBackButtonMessage(BuildContext context, int tabCount) { void showTabBackButtonMessage(
BuildContext context,
int tabCount,
Duration duration,
) {
final snackbar = SnackBar( final snackbar = SnackBar(
content: content:
(tabCount > 1) (tabCount > 1)
? const Text('Please click BACK again to close current tab') ? const Text('Navigate BACK again to close current tab')
: const Text('Please click BACK again to exit app'), : const Text('Navigate BACK again to exit app'),
duration: duration,
); );
ScaffoldMessenger.of(context) ScaffoldMessenger.of(context)
@@ -47,6 +52,20 @@ void showTabOpenedMessage(
ScaffoldMessenger.of(context).showSnackBar(snackBar); 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( void showTabSwitchMessage(
BuildContext context, { BuildContext context, {
String? tabName, String? tabName,