Pārlūkot izejas kodu

[feat]键盘引导页,支持是否开启自动检查完成教程步骤的参数

hezihao 7 mēneši atpakaļ
vecāks
revīzija
16ac61a8fa

+ 24 - 12
lib/module/keyboard_tutorial/android/keyboard_tutorial_android_view.dart

@@ -18,7 +18,13 @@ import 'keyboard_tutorial_android_view_controller.dart';
 /// 键盘教程页-Android平台
 class KeyboardTutorialAndroidView
     extends BaseView<KeyboardTutorialAndroidViewController> {
-  const KeyboardTutorialAndroidView({super.key});
+  KeyboardTutorialAndroidView({
+    super.key,
+    required bool checkTutorialComplete,
+  }) {
+    // 更新值
+    controller.setCheckTutorialComplete(checkTutorialComplete);
+  }
 
   @override
   Color backgroundColor() {
@@ -29,13 +35,15 @@ class KeyboardTutorialAndroidView
   Widget buildBody(BuildContext context) {
     return AppLifecycleWidget(
       onAppLifecycleCallback: (isForeground) async {
-        // 步骤都做完了,则跳转去键盘引导页
-        if (await controller.checkHasComplete()) {
-          return;
-        }
-        // 未完成,则每次切换到前台时,重新检查设置,更新按钮状态
         if (isForeground) {
+          // 未完成,则每次切换到前台时,重新检查设置,更新按钮状态
           controller.checkSetting();
+          // 步骤都做完了,则跳转去键盘引导页
+          if (controller.checkTutorialComplete.value) {
+            if (await controller.checkHasComplete()) {
+              return;
+            }
+          }
         }
       },
       child: Stack(
@@ -128,9 +136,11 @@ class KeyboardTutorialAndroidView
           enable: !controller.isKeyboardEnable.value,
           StringName.tutorialEnableKeyboardStep,
           onPressed: () {
-            // 已启用,不响应点击
-            if (controller.isKeyboardEnable.value) {
-              return;
+            if (controller.checkTutorialComplete.value) {
+              // 已启用,不响应点击
+              if (controller.isKeyboardEnable.value) {
+                return;
+              }
             }
             // 去启用键盘
             controller.goEnableKeyboard();
@@ -153,9 +163,11 @@ class KeyboardTutorialAndroidView
           enable: isHighlightBtn,
           StringName.tutorialEnableFloatingBallStep,
           onPressed: () {
-            // 已获取,不响应点击
-            if (controller.isFloatingWindowEnable.value) {
-              return;
+            if (controller.checkTutorialComplete.value) {
+              // 已获取,不响应点击
+              if (controller.isFloatingWindowEnable.value) {
+                return;
+              }
             }
             // 去启用悬浮球
             controller.jumpFloatingWindowSetting();

+ 9 - 1
lib/module/keyboard_tutorial/android/keyboard_tutorial_android_view_controller.dart

@@ -11,6 +11,9 @@ import '../../../utils/keyboard_tutorial_util.dart';
 /// 键盘教程页-Android平台Controller
 @injectable
 class KeyboardTutorialAndroidViewController extends BaseController {
+  /// 是否检查完成教程,完成了就自动跳转去键盘引导页
+  Rx<bool> checkTutorialComplete = true.obs;
+
   /// 键盘是否启用
   Rx<bool> isKeyboardEnable = false.obs;
 
@@ -27,6 +30,11 @@ class KeyboardTutorialAndroidViewController extends BaseController {
     checkSetting();
   }
 
+  /// 设置是否检查完成教程
+  void setCheckTutorialComplete(bool check) {
+    checkTutorialComplete.value = check;
+  }
+
   /// 检查设置
   void checkSetting() {
     // 检查键盘是否启用
@@ -86,4 +94,4 @@ class KeyboardTutorialAndroidViewController extends BaseController {
     }
     return false;
   }
-}
+}

+ 31 - 0
lib/module/keyboard_tutorial/keyboard_tutorial_controller.dart

@@ -1,7 +1,38 @@
+import 'package:get/get.dart';
 import 'package:injectable/injectable.dart';
 import 'package:keyboard/base/base_controller.dart';
 
+import '../../router/app_page_arguments.dart';
+import '../../utils/atmob_log.dart';
+
 /// 键盘使用教程-引导页Controller
 @injectable
 class KeyboardTutorialController extends BaseController {
+  final String _tag = "KeyboardTutorialController";
+
+  /// 是否检查完成教程,完成了就自动跳转去键盘引导页
+  Rx<bool> checkTutorialComplete = true.obs;
+
+  @override
+  void onInit() {
+    super.onInit();
+    _initArgs();
+  }
+
+  /// 初始化参数
+  void _initArgs() {
+    final arguments = Get.arguments as Map<String, dynamic>?;
+
+    // 当前索引
+    if (arguments?[AppPageArguments.isCheckTutorialComplete] == null) {
+      AtmobLog.i(_tag, '没有传递 isCheckTutorialComplete 参数');
+    } else {
+      final bool? isCheckTutorialComplete =
+          arguments?[AppPageArguments.isCheckTutorialComplete] as bool?;
+      if (isCheckTutorialComplete != null) {
+        checkTutorialComplete.value = isCheckTutorialComplete;
+        AtmobLog.i(_tag, "isCheckTutorialComplete: $isCheckTutorialComplete");
+      }
+    }
+  }
 }

+ 11 - 3
lib/module/keyboard_tutorial/keyboard_tutorial_page.dart

@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
 import 'package:get/get.dart';
 import 'package:keyboard/base/base_page.dart';
 import 'package:keyboard/router/app_pages.dart';
+import '../../router/app_page_arguments.dart';
 import '../../widget/platform_util.dart';
 import 'android/keyboard_tutorial_android_view.dart';
 import 'ios/keyboard_tutorial_ios_view.dart';
@@ -11,8 +12,11 @@ import 'keyboard_tutorial_controller.dart';
 class KeyboardTutorialPage extends BasePage<KeyboardTutorialController> {
   const KeyboardTutorialPage({super.key});
 
-  static start() {
-    Get.toNamed(RoutePath.keyboardTutorial);
+  static start({required bool isCheckTutorialComplete}) {
+    Map<String, dynamic> args = {
+      AppPageArguments.isCheckTutorialComplete: isCheckTutorialComplete,
+    };
+    Get.toNamed(RoutePath.keyboardTutorial, arguments: args);
   }
 
   /// 跳转并关闭当前页
@@ -42,7 +46,11 @@ class KeyboardTutorialPage extends BasePage<KeyboardTutorialController> {
     if (PlatformUtil.isIOS) {
       content = const KeyboardTutorialIosView();
     } else {
-      content = const KeyboardTutorialAndroidView();
+      content = Obx(() {
+        return KeyboardTutorialAndroidView(
+          checkTutorialComplete: controller.checkTutorialComplete.value,
+        );
+      });
     }
     return content;
   }

+ 3 - 0
lib/router/app_page_arguments.dart

@@ -11,4 +11,7 @@ abstract class AppPageArguments {
 
   /// Tab名称
   static const tabName = "tabName";
+
+  /// 是否需要检查教程完成,就自动跳转到键盘引导页
+  static const isCheckTutorialComplete = "isCheckTutorialComplete";
 }

+ 17 - 7
lib/utils/keyboard_tutorial_util.dart

@@ -8,14 +8,24 @@ import '../plugins/keyboard_android_platform.dart';
 /// 键盘教程工具类
 class KeyboardTutorialUtil {
   /// 跳转方法
-  static void start() async {
-    bool isComplete = await isTutorialComplete();
-    if (isComplete) {
-      // 如果完成了教程,则跳转到键盘引导页
-      KeyboardGuidePage.start();
+  /// [isCheckTutorialComplete] 是否需要检查教程完成,就自动跳转到键盘引导页
+  static void start({bool isCheckTutorialComplete = true}) async {
+    if (isCheckTutorialComplete) {
+      bool isComplete = await isTutorialComplete();
+      if (isComplete) {
+        // 如果完成了教程,则跳转到键盘引导页
+        KeyboardGuidePage.start();
+      } else {
+        // 如果没有完成教程,则跳转到键盘教程页
+        KeyboardTutorialPage.start(
+          isCheckTutorialComplete: isCheckTutorialComplete,
+        );
+      }
     } else {
-      // 如果没有完成教程,则跳转到键盘教程页
-      KeyboardTutorialPage.start();
+      // 不需要开启自动检查
+      KeyboardTutorialPage.start(
+        isCheckTutorialComplete: isCheckTutorialComplete,
+      );
     }
   }