Kaynağa Gözat

[new]增加退出应用toast

zk 1 yıl önce
ebeveyn
işleme
c464464332

+ 1 - 0
assets/string/base/string.xml

@@ -123,4 +123,5 @@
     <string name="store_query_pay_state">正在查询订单状态..</string>
     <string name="store_pay_success">充电成功</string>
     <string name="talk_summary_todo_title">所有待办</string>
+    <string name="exit_app_tip">再按一次退出应用</string>
 </resources>

+ 7 - 0
lib/module/main/controller.dart

@@ -36,6 +36,9 @@ class MainController extends BaseController {
 
   int get currentIndex => _currentIndex.value;
 
+  DateTime? _lastPressedAt; // 上次点击时间
+
+  DateTime? get lastPressedAt => _lastPressedAt;
 
   void changeIndex(int index) {
     _currentIndex.value = index;
@@ -69,6 +72,10 @@ class MainController extends BaseController {
       LoginPage.start(fromType: LoginFromType.aiChat);
     }
   }
+
+  void setLastPressedAt(lastPressedAt) {
+    _lastPressedAt = lastPressedAt;
+  }
 }
 
 class TabBean {

+ 32 - 15
lib/module/main/view.dart

@@ -3,8 +3,11 @@ import 'package:electronic_assistant/module/main/controller.dart';
 import 'package:electronic_assistant/module/main/drawer/view.dart';
 import 'package:electronic_assistant/resource/assets.gen.dart';
 import 'package:electronic_assistant/resource/colors.gen.dart';
+import 'package:electronic_assistant/resource/string.gen.dart';
 import 'package:electronic_assistant/utils/expand.dart';
+import 'package:electronic_assistant/utils/toast_util.dart';
 import 'package:flutter/material.dart';
+import 'package:flutter/services.dart';
 import 'package:flutter_screenutil/flutter_screenutil.dart';
 import 'package:get/get.dart';
 import '../files/view.dart';
@@ -20,22 +23,36 @@ class MainTabPage extends BasePage<MainController> {
 
   @override
   Widget buildBody(BuildContext context) {
-    return Scaffold(
-      key: controller.scaffoldKey,
-      body: Obx(() {
-        return pages[controller.currentIndex];
-      }),
-      resizeToAvoidBottomInset: false,
-      floatingActionButton: buildAIChatBtn(),
-      floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
-      bottomNavigationBar: buildBottomAppBar(),
-      drawerEdgeDragWidth: 0,
-      drawer: Drawer(
-        shape: const RoundedRectangleBorder(
-          borderRadius: BorderRadius.zero,
+    return PopScope(
+      canPop: false,
+      onPopInvokedWithResult: (bool didPop, dynamic result) async {
+        if (!didPop &&
+            (controller.lastPressedAt == null ||
+                DateTime.now().difference(controller.lastPressedAt!) >
+                    const Duration(seconds: 2))) {
+          controller.setLastPressedAt(DateTime.now());
+          ToastUtil.showToast(StringName.exitAppTip.tr);
+        } else {
+          SystemNavigator.pop();
+        }
+      },
+      child: Scaffold(
+        key: controller.scaffoldKey,
+        body: Obx(() {
+          return pages[controller.currentIndex];
+        }),
+        resizeToAvoidBottomInset: false,
+        floatingActionButton: buildAIChatBtn(),
+        floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
+        bottomNavigationBar: buildBottomAppBar(),
+        drawerEdgeDragWidth: 0,
+        drawer: Drawer(
+          shape: const RoundedRectangleBorder(
+            borderRadius: BorderRadius.zero,
+          ),
+          backgroundColor: "#F6F5F8".toColor(),
+          child: const MainDrawerView(),
         ),
-        backgroundColor: "#F6F5F8".toColor(),
-        child: const MainDrawerView(),
       ),
     );
   }

+ 2 - 9
lib/utils/toast_util.dart

@@ -9,15 +9,8 @@ class ToastUtil {
       SmartToastType? displayType = SmartToastType.normal,
       bool? addPostFrame}) {
     if (msg != null) {
-      if (SchedulerBinding.instance.schedulerPhase != SchedulerPhase.idle) {
-        SmartDialog.showToast(msg,
-            displayType: displayType, displayTime: displayTime);
-      } else {
-        SchedulerBinding.instance.addPostFrameCallback((_) {
-          SmartDialog.showToast(msg,
-              displayType: displayType, displayTime: displayTime);
-        });
-      }
+      SmartDialog.showToast(msg,
+          displayType: displayType, displayTime: displayTime);
     }
   }
 }