diff --git a/packages/livestock/lib/presentation/page/root/logic.dart b/packages/livestock/lib/presentation/page/root/logic.dart index 5d0805c..dbc2e00 100644 --- a/packages/livestock/lib/presentation/page/root/logic.dart +++ b/packages/livestock/lib/presentation/page/root/logic.dart @@ -43,6 +43,8 @@ class RootLogic extends GetxController { late StreamSubscription> connectivitySubscription; RxList connectivityResults = [].obs; + DateTime? lastBackPressed; + @override void onInit() { super.onInit(); diff --git a/packages/livestock/lib/presentation/page/root/view.dart b/packages/livestock/lib/presentation/page/root/view.dart index d0474bb..ded02db 100644 --- a/packages/livestock/lib/presentation/page/root/view.dart +++ b/packages/livestock/lib/presentation/page/root/view.dart @@ -7,7 +7,29 @@ import 'logic.dart'; class RootPage extends GetView { RootPage({super.key}); - DateTime? _lastBackPressed; + // Extracted back-press + Future _handleBackPress(BuildContext context) async { + final nestedKey = Get.nestedKey(controller.currentIndex.value); + final currentNavigator = nestedKey?.currentState; + if (currentNavigator?.canPop() ?? false) { + currentNavigator?.pop(); + return; + } + final now = DateTime.now(); + if (controller.lastBackPressed == null || + now.difference(controller.lastBackPressed!) > const Duration(seconds: 2)) { + controller.lastBackPressed = now; + Get.snackbar( + 'خروج از برنامه', + 'برای خروج دوباره بازگشت را بزنید', + snackPosition: SnackPosition.TOP, + duration: const Duration(seconds: 2), + backgroundColor: AppColor.warning, + ); + } else { + await SystemNavigator.pop(); + } + } @override Widget build(BuildContext context) { @@ -15,36 +37,14 @@ class RootPage extends GetView { return PopScope( canPop: false, onPopInvokedWithResult: (didPop, result) async { - final nestedKey = Get.nestedKey(controller.currentIndex.value); - final currentNavigator = nestedKey?.currentState; - - if (currentNavigator?.canPop() ?? false) { - currentNavigator?.pop(); - } else { - final now = DateTime.now(); - if (_lastBackPressed == null || - now.difference(_lastBackPressed!) > Duration(seconds: 2)) { - _lastBackPressed = now; - Get.snackbar( - 'خروج از برنامه', - 'برای خروج دوباره بازگشت را بزنید', - snackPosition: SnackPosition.TOP, - duration: Duration(seconds: 2), - backgroundColor: AppColor.warning, - ); - } else { - await SystemNavigator.pop(); - } - } + await _handleBackPress(context); }, - child: Scaffold( body: IndexedStack( - children: [...controller.pages], + children: controller.pages, index: currentIndex.value, sizing: StackFit.expand, ), - bottomNavigationBar: RBottomNavigation( mainAxisAlignment: MainAxisAlignment.spaceEvenly, items: [ @@ -66,7 +66,6 @@ class RootPage extends GetView { controller.changePage(1); }, ), - RBottomNavigationItem( label: 'پروفایل', icon: Assets.vec.profileCircleSvg.path,