ソースを参照

[feat]键盘教程页,点跳过,跳转到键盘引导页

hezihao 7 ヶ月 前
コミット
664b1b7a61

+ 26 - 16
lib/main.dart

@@ -14,9 +14,11 @@ import 'package:keyboard/router/app_pages.dart';
 import 'package:keyboard/utils/app_info_util.dart';
 import 'package:keyboard/utils/atmob_log.dart';
 import 'package:keyboard/utils/channel_util.dart';
+import 'package:keyboard/utils/floating_window_helper.dart';
 import 'package:keyboard/utils/mmkv_util.dart';
 import 'package:keyboard/utils/privacy_compliance.dart';
 import 'package:keyboard/utils/toast_util.dart';
+import 'package:keyboard/widget/app_lifecycle_widget.dart';
 
 import 'data/consts/build_config.dart';
 import 'data/consts/constants.dart';
@@ -100,24 +102,32 @@ class MyApp extends StatelessWidget {
   }
 
   _buildMaterialApp() {
-    return GetMaterialApp(
-      onGenerateTitle: AppCommonConfig.appName,
-      getPages: AppCommonConfig.getPages,
-      initialRoute: AppCommonConfig.initialRoute,
-      initialBinding: AppCommonConfig.initialBinding,
-      theme: ThemeData(
-        useMaterial3: true,
-        textSelectionTheme: const TextSelectionThemeData(
-          cursorColor: ColorName.colorPrimary, // 设置默认光标颜色
-          selectionHandleColor: ColorName.colorPrimary, // 设置光标下面水滴的颜色
+    return AppLifecycleWidget(
+      onAppLifecycleCallback: (isForeground) {
+        if (isForeground) {
+          // 更新悬浮窗权限状态
+          FloatingWindowHelper.updatePermissionState();
+        }
+      },
+      child: GetMaterialApp(
+        onGenerateTitle: AppCommonConfig.appName,
+        getPages: AppCommonConfig.getPages,
+        initialRoute: AppCommonConfig.initialRoute,
+        initialBinding: AppCommonConfig.initialBinding,
+        theme: ThemeData(
+          useMaterial3: true,
+          textSelectionTheme: const TextSelectionThemeData(
+            cursorColor: ColorName.colorPrimary, // 设置默认光标颜色
+            selectionHandleColor: ColorName.colorPrimary, // 设置光标下面水滴的颜色
+          ),
         ),
+        navigatorObservers: AppCommonConfig.navigatorObservers,
+        builder: AppCommonConfig.builder,
+        translations: AppCommonConfig.localizationsTranslations,
+        localizationsDelegates: AppCommonConfig.localizations.delegates,
+        locale: AppCommonConfig.localizations.locale,
+        fallbackLocale: AppCommonConfig.localizations.fallbackLocale,
       ),
-      navigatorObservers: AppCommonConfig.navigatorObservers,
-      builder: AppCommonConfig.builder,
-      translations: AppCommonConfig.localizationsTranslations,
-      localizationsDelegates: AppCommonConfig.localizations.delegates,
-      locale: AppCommonConfig.localizations.locale,
-      fallbackLocale: AppCommonConfig.localizations.fallbackLocale,
     );
   }
 

+ 8 - 5
lib/module/keyboard_guide/keyboard_guide_controller.dart

@@ -8,7 +8,7 @@ import '../../base/base_controller.dart';
 import '../../data/bean/keyboard_guide_msg.dart';
 import '../../utils/clipboard_util.dart';
 import '../../utils/default_keyboard_helper.dart';
-import '../../utils/floating_window_util.dart';
+import '../../utils/floating_window_helper.dart';
 import '../../utils/keyboard_guide_record_util.dart';
 import '../../utils/keyboard_tutorial_util.dart';
 import '../../utils/toast_util.dart';
@@ -38,6 +38,9 @@ class KeyboardGuidePageController extends BaseController {
   /// 是否选择为了默认键盘
   RxBool get isDefaultKeyboard => DefaultKeyboardHelper.isDefaultKeyboard;
 
+  /// 是否有悬浮窗权限
+  RxBool get hasFloatingWindowPermission => FloatingWindowHelper.hasFloatingWindowPermission;
+
   @override
   void onInit() {
     super.onInit();
@@ -63,11 +66,11 @@ class KeyboardGuidePageController extends BaseController {
   /// 马上检查设置
   void checkSetting() async {
     // 没有完成键盘教程,却跳到了键盘引导页,说明是用户手动去设置修改了权限,则关闭该页面,跳回键盘教程页
-    if (!await KeyboardTutorialUtil.isTutorialComplete()) {
-      KeyboardTutorialPage.startAndOffMe();
-    }
+    // if (!await KeyboardTutorialUtil.isTutorialComplete()) {
+    //   KeyboardTutorialPage.startAndOffMe();
+    // }
     // 有权限,则马上显示悬浮窗
-    FloatingWindowUtil.showFloatingBall();
+    FloatingWindowHelper.showFloatingBall();
   }
 
   /// 关闭页面

+ 4 - 4
lib/module/keyboard_guide/keyboard_guide_page.dart

@@ -47,7 +47,7 @@ class KeyboardGuidePage extends BasePage<KeyboardGuidePageController> {
             // 切换到前台时,重新检查设置,更新按钮状态
             controller.checkSetting();
             // 如果选择为默认键盘了,则尝试显示引导弹窗
-            if (controller.isDefaultKeyboard.value) {
+            if (controller.hasFloatingWindowPermission.value) {
               controller.showGuideOverlayDialog();
             }
           }
@@ -134,11 +134,11 @@ class KeyboardGuidePage extends BasePage<KeyboardGuidePageController> {
   /// 内容
   Widget _buildContent() {
     return Obx(() {
-      // 键盘已启用,显示聊天列表
-      if (controller.isDefaultKeyboard.value) {
+      // 有悬浮窗权限,显示聊天列表
+      if (controller.hasFloatingWindowPermission.value) {
         return _buildChatList();
       } else {
-        // 未启用,显示引导动画
+        // 没权限,显示引导动画
         return _buildGuideAnimation();
       }
     });

+ 5 - 3
lib/module/keyboard_tutorial/keyboard_tutorial_controller.dart

@@ -4,7 +4,7 @@ import 'package:keyboard/base/base_controller.dart';
 import 'package:keyboard/module/keyboard_guide/keyboard_guide_page.dart';
 
 import '../../plugins/keyboard_android_platform.dart';
-import '../../utils/floating_window_util.dart';
+import '../../utils/floating_window_helper.dart';
 import '../../utils/keyboard_tutorial_util.dart';
 
 /// 键盘使用教程-引导页Controller
@@ -37,7 +37,7 @@ class KeyboardTutorialController extends BaseController {
       isFloatingWindowEnable.value = hasPermission;
     });
     // 有权限,则开启悬浮窗
-    FloatingWindowUtil.showFloatingBall();
+    FloatingWindowHelper.showFloatingBall();
   }
 
   /// 点击返回
@@ -47,8 +47,10 @@ class KeyboardTutorialController extends BaseController {
 
   /// 点击跳过
   void clickSkip() {
+    // 标记,已经完成了键盘引导
     KeyboardTutorialUtil.setNotFirstShowKeyboardTutorial();
-    Get.back();
+    // 跳转到键盘引导页,并关闭自己
+    KeyboardGuidePage.startAndOffMe();
   }
 
   /// 去启用键盘

+ 7 - 9
lib/plugins/keyboard_android_platform.dart

@@ -4,6 +4,7 @@ import 'package:keyboard/plugins/plugin_constant.dart';
 import 'package:keyboard/utils/atmob_log.dart';
 
 import '../utils/default_keyboard_helper.dart';
+import '../utils/floating_window_helper.dart';
 import 'keyboard_android_service.dart';
 import 'keyboard_method_handler.dart';
 
@@ -27,17 +28,14 @@ class KeyboardAndroidPlatform {
     await initPlugin();
     // 默认键盘切换监听器
     DefaultKeyboardHelper.init();
-    startFlowingBall();
+    initFlowingBall();
   }
 
-  /// 开启悬浮球
-  static Future<void> startFlowingBall() async {
-    bool hasFloatingWindowPermission =
-        await KeyboardAndroidPlatform.hasFloatingWindowPermission();
-    // 已有权限,则显示悬浮球
-    if (hasFloatingWindowPermission) {
-      KeyboardAndroidPlatform.enableFloatingWindow(true);
-    }
+  /// 初始化悬浮球
+  static Future<void> initFlowingBall() async {
+    FloatingWindowHelper.init();
+    // 有权限,则马上显示悬浮窗
+    FloatingWindowHelper.showFloatingBall();
   }
 
   static Future<void> sendDynamicTextRequest(

+ 1 - 0
lib/utils/default_keyboard_helper.dart

@@ -11,6 +11,7 @@ class DefaultKeyboardHelper {
 
   /// 初始化
   static void init() {
+    // 初始化默认键盘监听
     DefaultKeyboardMonitor.init();
     // 监听默认键盘切换事件
     DefaultKeyboardMonitor.registerDefaultKeyboardChangeEvent((isDefault) {

+ 36 - 0
lib/utils/floating_window_helper.dart

@@ -0,0 +1,36 @@
+import 'package:get/get.dart';
+
+import '../plugins/keyboard_android_platform.dart';
+
+/// 悬浮窗工具类
+class FloatingWindowHelper {
+  FloatingWindowHelper._();
+
+  /// 是否有悬浮权限
+  static RxBool hasFloatingWindowPermission = false.obs;
+
+  /// 初始化
+  static void init() {
+    KeyboardAndroidPlatform.hasFloatingWindowPermission().then((hasPermission) {
+      hasFloatingWindowPermission.value = hasPermission;
+    });
+  }
+
+  /// 更新权限状态
+  static void updatePermissionState() {
+    KeyboardAndroidPlatform.hasFloatingWindowPermission().then((hasPermission) {
+      hasFloatingWindowPermission.value = hasPermission;
+    });
+  }
+
+  /// 显示悬浮窗
+  static void showFloatingBall() {
+    // 检查是否有悬浮窗权限
+    KeyboardAndroidPlatform.hasFloatingWindowPermission().then((hasPermission) {
+      // 有权限,则启动悬浮窗
+      if (hasPermission) {
+        KeyboardAndroidPlatform.enableFloatingWindow(true);
+      }
+    });
+  }
+}

+ 0 - 17
lib/utils/floating_window_util.dart

@@ -1,17 +0,0 @@
-import '../plugins/keyboard_android_platform.dart';
-
-/// 悬浮窗工具类
-class FloatingWindowUtil {
-  FloatingWindowUtil._();
-
-  /// 显示悬浮窗
-  static void showFloatingBall() {
-    // 检查是否有悬浮窗权限
-    KeyboardAndroidPlatform.hasFloatingWindowPermission().then((hasPermission) {
-      // 有权限,则启动悬浮窗
-      if (hasPermission) {
-        KeyboardAndroidPlatform.enableFloatingWindow(true);
-      }
-    });
-  }
-}