improved snackbars
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
+8
@@ -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<BrowserView>
|
||||
);
|
||||
_timerPaused = false;
|
||||
}
|
||||
|
||||
showSuggestNewTabMessage(
|
||||
context,
|
||||
onAdd: () async {
|
||||
await const SearchRoute().push(context);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user