Просмотр исходного кода

[new]增加新建模板入口首次新人指引

zk 1 год назад
Родитель
Сommit
1ac62a3a1e

BIN
assets/images/icon_triangular.webp


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

@@ -168,4 +168,5 @@
     <string name="template_title_not_fail">添加模板标题</string>
     <string name="template_detail_update">编辑模板</string>
     <string name="template_dialog_delete_title">是否删除“%s”模板?</string>
+    <string name="talk_template_add_popup_content_txt">不是您想要的总结方\n式?点这里!</string>
 </resources>

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

@@ -88,3 +88,7 @@ class Currency {
   static const String cny = "CNY";
   static const String usd = "USD";
 }
+
+class GuideConstants {
+  static const String talkAddTemplateGuide = "talkAddTemplateGuide";
+}

+ 10 - 8
lib/module/talk/common_view.dart

@@ -8,6 +8,7 @@ import 'package:get/get.dart';
 
 import '../../data/bean/agenda.dart';
 import '../../data/bean/template_bean.dart';
+import '../../popup/talk_add_template_popup.dart';
 import '../../resource/assets.gen.dart';
 import '../../resource/colors.gen.dart';
 import '../../resource/string.gen.dart';
@@ -369,10 +370,8 @@ List<Widget> getTalkAgendaNormalList(List<Agenda>? list) {
 }
 
 Widget buildTemplateView(List<TemplateBean>? templateList, int? id,
-    {bool? isShowAdd,
-    VoidCallback? addCallback,
-    Function(TemplateBean)? onTap}) {
-  return SizedBox(
+    {Widget? addTemplateView, Function(TemplateBean)? onTap}) {
+  Widget targetWidget = SizedBox(
     height: 32.h,
     child: ListView(
       scrollDirection: Axis.horizontal,
@@ -410,16 +409,19 @@ Widget buildTemplateView(List<TemplateBean>? templateList, int? id,
               ),
             ),
           ),
-        isShowAdd == true
-            ? _buildAddTemplateView(addCallback)
-            : const SizedBox.shrink()
+        addTemplateView ?? const SizedBox.shrink()
       ],
     ),
   );
+  return targetWidget;
 }
 
-Widget _buildAddTemplateView(VoidCallback? addCallback) {
+Widget buildAddTemplateView({
+  required key,
+  VoidCallback? addCallback,
+}) {
   return GestureDetector(
+    key: key,
     onTap: addCallback,
     child: Container(
       margin: EdgeInsets.only(right: 8.w),

+ 20 - 1
lib/module/talk/summary/controller.dart

@@ -3,14 +3,17 @@ import 'package:electronic_assistant/base/base_controller.dart';
 import 'package:electronic_assistant/data/bean/agenda.dart';
 import 'package:electronic_assistant/dialog/alert_dialog.dart';
 import 'package:electronic_assistant/module/talk/controller.dart';
+import 'package:electronic_assistant/popup/talk_add_template_popup.dart';
 import 'package:electronic_assistant/resource/colors.gen.dart';
 import 'package:electronic_assistant/resource/string.gen.dart';
+import 'package:electronic_assistant/utils/mmkv_util.dart';
 import 'package:flutter/cupertino.dart';
 import 'package:flutter_screenutil/flutter_screenutil.dart';
 import 'package:get/get.dart';
 import '../../../data/bean/agenda_list_all_bean.dart';
 import '../../../data/bean/talks.dart';
 import '../../../data/bean/template_bean.dart';
+import '../../../data/consts/constants.dart';
 import '../../../data/consts/event_report_id.dart';
 import '../../template/template_edit/view.dart';
 import '../../template/template_list/view.dart';
@@ -37,6 +40,8 @@ class SummaryController extends BaseController {
 
   int? get templateSelectId => talkController.templateSelectId.value;
 
+  GlobalKey addTemplateKey = GlobalKey();
+
   @override
   void onReady() {
     super.onReady();
@@ -53,9 +58,23 @@ class SummaryController extends BaseController {
     _dealTalkUpdate();
   }
 
+  Future<void> _checkShowGuide() async {
+    if (!KVUtil.getBool(GuideConstants.talkAddTemplateGuide, true)) {
+      return;
+    }
+    await Future.delayed(const Duration(milliseconds: 500));
+    if (addTemplateKey.currentContext == null) {
+      return;
+    }
+    talkAddTemplatePopup(addTemplateKey.currentContext!, onDismiss: () {
+      KVUtil.putBool(GuideConstants.talkAddTemplateGuide, false);
+    });
+  }
+
   void _dealTalkUpdate() {
     talkController.refreshTalkDetail().then((data) {
       if (data?.status.value == TalkStatus.analysisSuccess) {
+        _checkShowGuide();
         eventReport(EventId.event_101100);
       } else if (data?.status.value == TalkStatus.analysisFail) {
         eventReport(EventId.event_101101);
@@ -86,7 +105,7 @@ class SummaryController extends BaseController {
     if (talkBean == null || maxTemplateCount == null) {
       return;
     }
-    if ((talkController.templateList.value?.length ?? 0) <= maxTemplateCount) {
+    if ((talkController.templateList.value?.length ?? 0) >= maxTemplateCount) {
       _showMaxTemplateDialog();
       return;
     }

+ 7 - 5
lib/module/talk/summary/view.dart

@@ -127,11 +127,13 @@ class SummaryView extends BasePage<SummaryController> {
             return buildTemplateView(
                 controller.templateList, controller.templateSelectId,
                 onTap: (template) {
-                  controller.selectTemplate(template);
-                },
-                isShowAdd: true, addCallback: () {
-              controller.addTemplateClick();
-            });
+              controller.selectTemplate(template);
+            },
+                addTemplateView: buildAddTemplateView(
+                    key: controller.addTemplateKey,
+                    addCallback: () {
+                      controller.addTemplateClick();
+                    }));
           }),
           buildSummaryView(),
           Container(

+ 54 - 0
lib/popup/talk_add_template_popup.dart

@@ -0,0 +1,54 @@
+import 'package:electronic_assistant/dialog/add_agenda_dialog.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:flutter/cupertino.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_screenutil/flutter_screenutil.dart';
+import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
+import 'package:get/get.dart';
+
+void talkAddTemplatePopup(BuildContext context, {VoidCallback? onDismiss}) {
+  SmartDialog.showAttach(
+    targetContext: context,
+    targetBuilder: (targetOffset, targetSize) =>
+        targetOffset + const Offset(20, 6),
+    animationType: SmartAnimationType.fade,
+    alignment: Alignment.bottomLeft,
+    keepSingle: true,
+    usePenetrate: true,
+    onDismiss: () {
+      onDismiss?.call();
+    },
+    maskColor: Colors.transparent,
+    clickMaskDismiss: true,
+    builder: (_) {
+      return Column(
+        children: [
+          SizedBox(
+            width: 146.w,
+            child: Align(
+              alignment: const Alignment(0.4, 0),
+              child:
+                  Assets.images.iconTriangular.image(width: 18.w, height: 8.w),
+            ),
+          ),
+          Container(
+            height: 58.h,
+            width: 146.w,
+            decoration: BoxDecoration(
+              color: ColorName.colorPrimary,
+              borderRadius: BorderRadius.circular(8.w),
+            ),
+            child: Center(
+              child: Text(
+                StringName.talkTemplateAddPopupContentTxt.tr,
+                style: TextStyle(fontSize: 14.sp, color: Colors.white),
+              ),
+            ),
+          )
+        ],
+      );
+    },
+  );
+}