Преглед на файлове

[new]增加思维导图根据内核版本判断是否显示

zk преди 1 година
родител
ревизия
7dfc9ab1d4
променени са 5 файла, в които са добавени 133 реда и са изтрити 69 реда
  1. 4 0
      lib/data/consts/event_report_id.dart
  2. 76 11
      lib/module/talk/controller.dart
  3. 48 50
      lib/module/talk/view.dart
  4. 5 0
      lib/utils/common_utils.dart
  5. 0 8
      pubspec.lock

+ 4 - 0
lib/data/consts/event_report_id.dart

@@ -74,4 +74,8 @@ abstract class EventId {
   static const String event_104003 =
       '104003'; //充电办理失败 104003 带ID: 微信支付-------001 支付宝-------002
   static const String event_105001 = '105001'; //点击“检查更新” 105001
+
+  //思维导图
+  static const String event_101401 = '101401'; //思维导图曝光
+  static const String event_101402 = '101402'; //思维导图报错
 }

+ 76 - 11
lib/module/talk/controller.dart

@@ -12,7 +12,9 @@ import 'package:electronic_assistant/module/login/view.dart';
 import 'package:electronic_assistant/module/record/record_handler.dart';
 import 'package:electronic_assistant/module/store/view.dart';
 import 'package:electronic_assistant/module/talk/mindmap/mind_util.dart';
+import 'package:electronic_assistant/module/talk/summary/view.dart';
 import 'package:electronic_assistant/module/talk/todo/controller.dart';
+import 'package:electronic_assistant/module/talk/todo/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';
@@ -51,6 +53,9 @@ import '../../utils/system_share_util.dart';
 import '../../utils/toast_util.dart';
 import 'package:webview_flutter/webview_flutter.dart';
 
+import 'mindmap/view.dart';
+import 'original/view.dart';
+
 class TalkController extends BaseController {
   static const String argumentItem = 'argument_item';
   static const String argumentTalkId = 'argument_talk_id';
@@ -90,13 +95,9 @@ class TalkController extends BaseController {
 
   final Rxn<TalkBarBean> checkTabBean = Rxn();
 
-  final List<TalkBarBean> tabBeans = [
-    TalkBarBean(TalkBarType.summary, StringName.talkTabSummary.tr, true),
-    TalkBarBean(TalkBarType.mindMap, StringName.talkMindMap.tr, false,
-        isDisallowScroll: true),
-    TalkBarBean(TalkBarType.myTask, StringName.talkTabMyTask.tr, true),
-    TalkBarBean(TalkBarType.original, StringName.talkTabOriginal.tr, false)
-  ];
+  final RxList<TalkBarBean> _tabBeans = RxList();
+
+  List<TalkBarBean> get tabBeans => _tabBeans;
 
   bool get isEditModel => _isEditModel.value;
 
@@ -155,17 +156,81 @@ class TalkController extends BaseController {
 
   DWebViewController? get temporaryController => _temporaryController.value;
 
+  RxBool isShowMindMap = false.obs;
+
+  final RxList<Widget> pages = RxList();
+
   @override
-  void onInit() {
+  void onInit() async {
     super.onInit();
-    checkTabBean.value = tabBeans[defaultIndex];
+    _getArguments();
+    await _analyticWebVersion();
+    checkTabBean.value = _tabBeans[defaultIndex];
+  }
+
+  Future<void> _analyticWebVersion() async {
+    if (Platform.isAndroid) {
+      String? userAgent = await webViewController.getUserAgent();
+      bool shouldShowMindMap = true;
+      String? version;
+      if (userAgent != null) {
+        RegExp regExp = RegExp(r'Chrome/(\d+)\.');
+        Match? match = regExp.firstMatch(userAgent);
+        if (match != null) {
+          version = match.group(1) ?? '';
+          if (version.isNotEmpty && isNumeric(version)) {
+            int versionNum = int.parse(version);
+            shouldShowMindMap = versionNum > 92;
+          } else {
+            shouldShowMindMap = false;
+          }
+        }
+      } else {
+        shouldShowMindMap = false;
+      }
+      _setMindMap(shouldShowMindMap, version: version);
+    } else {
+      _setMindMap(true);
+    }
+  }
+
+  void _setMindMap(bool isShow, {String? version}) {
+    isShowMindMap.value = isShow;
+    String? talkId = talkBean.value != null ? talkBean.value!.id : paramId;
+    if (isShow) {
+      pages.value = [
+        SummaryView(talkId),
+        MindMapView(talkId),
+        TodoView(talkId),
+        OriginalView(talkId),
+      ];
+      _tabBeans.value = [
+        TalkBarBean(TalkBarType.summary, StringName.talkTabSummary.tr, true),
+        TalkBarBean(TalkBarType.mindMap, StringName.talkMindMap.tr, false,
+            isDisallowScroll: true),
+        TalkBarBean(TalkBarType.myTask, StringName.talkTabMyTask.tr, true),
+        TalkBarBean(TalkBarType.original, StringName.talkTabOriginal.tr, false)
+      ];
+      EventHandler.report(EventId.event_101401, params: {EventId.id: version});
+    } else {
+      pages.value = [
+        SummaryView(talkId),
+        TodoView(talkId),
+        OriginalView(talkId),
+      ];
+      _tabBeans.value = [
+        TalkBarBean(TalkBarType.summary, StringName.talkTabSummary.tr, true),
+        TalkBarBean(TalkBarType.myTask, StringName.talkTabMyTask.tr, true),
+        TalkBarBean(TalkBarType.original, StringName.talkTabOriginal.tr, true)
+      ];
+      EventHandler.report(EventId.event_101402, params: {EventId.id: version});
+    }
   }
 
   @override
   void onReady() {
     super.onReady();
     _initAudioPlayer();
-    _getArguments();
     eventReport(EventId.event_101001, params: {EventId.id: eventTag});
     WidgetsBinding.instance.addPostFrameCallback((_) {
       _bottomViewHeight = bottomGlobalKey.currentContext?.size?.height;
@@ -523,7 +588,7 @@ class TalkController extends BaseController {
   }
 
   void updateTabIndex(int index) {
-    checkTabBean.value = tabBeans[index];
+    checkTabBean.value = _tabBeans[index];
   }
 
   void onEditCancel() {

+ 48 - 50
lib/module/talk/view.dart

@@ -1,9 +1,6 @@
 import 'package:dsbridge_flutter/dsbridge_flutter.dart';
 import 'package:electronic_assistant/base/base_page.dart';
 import 'package:electronic_assistant/module/talk/controller.dart';
-import 'package:electronic_assistant/module/talk/mindmap/view.dart';
-import 'package:electronic_assistant/module/talk/summary/view.dart';
-import 'package:electronic_assistant/module/talk/todo/view.dart';
 import 'package:electronic_assistant/resource/colors.gen.dart';
 import 'package:electronic_assistant/utils/expand.dart';
 import 'package:electronic_assistant/utils/fixed_size_tab_indicator.dart';
@@ -23,18 +20,10 @@ import 'original/view.dart';
 class TalkPage extends BasePage<TalkController> {
   final String? talkId;
 
-  late final List<Widget> _pages;
-
   TalkPage({super.key})
       : talkId = Get.arguments[TalkController.argumentTalkId] {
     Get.lazyPut<TalkController>(() => TalkController(),
         tag: talkId, fenix: true);
-    _pages = [
-      SummaryView(talkId),
-      MindMapView(talkId),
-      TodoView(talkId),
-      OriginalView(talkId),
-    ];
   }
 
   @override
@@ -81,21 +70,24 @@ class TalkPage extends BasePage<TalkController> {
         }
         return true;
       },
-      child: DefaultTabController(
-        initialIndex: controller.defaultIndex,
-        length: controller.tabBeans.length,
-        child: Stack(
-          children: [
-            Obx(() {
-              return controller.temporaryController != null
-                  ? DWebViewWidget(controller: controller.temporaryController!)
-                  : const SizedBox.shrink();
-            }),
-            _buildTalkContentView(),
-            buildBottomView()
-          ],
-        ),
-      ),
+      child: Obx(() {
+        return DefaultTabController(
+          initialIndex: controller.defaultIndex,
+          length: controller.tabBeans.length,
+          child: Stack(
+            children: [
+              Obx(() {
+                return controller.temporaryController != null
+                    ? DWebViewWidget(
+                        controller: controller.temporaryController!)
+                    : const SizedBox.shrink();
+              }),
+              _buildTalkContentView(),
+              buildBottomView()
+            ],
+          ),
+        );
+      }),
     );
   }
 
@@ -150,23 +142,25 @@ class TalkPage extends BasePage<TalkController> {
       if (!controller.isEditModel) {
         return Column(
           children: [
-            TabBar(
-                labelStyle:
-                    TextStyle(fontSize: 16.sp, fontWeight: FontWeight.bold),
-                unselectedLabelStyle: TextStyle(fontSize: 14.sp),
-                labelColor: ColorName.primaryTextColor,
-                unselectedLabelColor: ColorName.secondaryTextColor,
-                labelPadding: EdgeInsets.only(top: 4.h),
-                dividerHeight: 0,
-                splashFactory: NoSplash.splashFactory,
-                indicator: FixedSizeTabIndicator(
-                    width: 16.w,
-                    height: 3.w,
-                    radius: 3,
-                    color: ColorName.colorPrimary),
-                tabs: controller.tabBeans
-                    .map((bean) => Tab(text: bean.title))
-                    .toList()),
+            controller.tabBeans.isEmpty
+                ? const SizedBox.shrink()
+                : TabBar(
+                    labelStyle:
+                        TextStyle(fontSize: 16.sp, fontWeight: FontWeight.bold),
+                    unselectedLabelStyle: TextStyle(fontSize: 14.sp),
+                    labelColor: ColorName.primaryTextColor,
+                    unselectedLabelColor: ColorName.secondaryTextColor,
+                    labelPadding: EdgeInsets.only(top: 4.h),
+                    dividerHeight: 0,
+                    splashFactory: NoSplash.splashFactory,
+                    indicator: FixedSizeTabIndicator(
+                        width: 16.w,
+                        height: 3.w,
+                        radius: 3,
+                        color: ColorName.colorPrimary),
+                    tabs: controller.tabBeans
+                        .map((bean) => Tab(text: bean.title))
+                        .toList()),
             SizedBox(height: 6.h),
             Divider(height: 1, color: '#F2F4F9'.color)
           ],
@@ -199,13 +193,17 @@ class TalkPage extends BasePage<TalkController> {
 
   Widget buildTabContentView() {
     return Expanded(
-      child: TabBarView(
-        physics: controller.isEditModel ||
-                controller.checkTabBean.value?.isDisallowScroll == true
-            ? const NeverScrollableScrollPhysics()
-            : null,
-        children: _pages,
-      ),
+      child: Obx(() {
+        return controller.pages.isEmpty
+            ? const SizedBox.shrink()
+            : TabBarView(
+                physics: controller.isEditModel ||
+                        controller.checkTabBean.value?.isDisallowScroll == true
+                    ? const NeverScrollableScrollPhysics()
+                    : null,
+                children: controller.pages,
+              );
+      }),
     );
   }
 

+ 5 - 0
lib/utils/common_utils.dart

@@ -28,4 +28,9 @@ String? getDeviceId() {
 
 void backToSpecificPage(String targetRoute) {
   Get.until((route) => Get.currentRoute == targetRoute);
+}
+
+bool isNumeric(String str) {
+  final numericRegex = RegExp(r'^-?[0-9]+$');
+  return numericRegex.hasMatch(str);
 }

+ 0 - 8
pubspec.lock

@@ -1804,14 +1804,6 @@ packages:
       url: "https://pub.dev"
     source: hosted
     version: "1.1.5"
-  x5_webview:
-    dependency: "direct main"
-    description:
-      name: x5_webview
-      sha256: "47e429e55fe1eeb5ca75259529cc7051f05cc5bd132cc8231b46475e94207f39"
-      url: "https://pub.dev"
-    source: hosted
-    version: "0.4.0"
   xdg_directories:
     dependency: transitive
     description: