Преглед изворни кода

[fix]分享弹窗根据版本隐藏思维导图

zk пре 1 година
родитељ
комит
9e12c24f5a
2 измењених фајлова са 61 додато и 24 уклоњено
  1. 50 23
      lib/dialog/talk_share_dialog.dart
  2. 11 1
      lib/module/talk/controller.dart

+ 50 - 23
lib/dialog/talk_share_dialog.dart

@@ -12,7 +12,8 @@ import '../resource/colors.gen.dart';
 typedef TalkShareCallback = void Function(ShareTalkType shareType,
     ShareTo shareTo, String fileName, String dialogTag);
 
-void showTalkShareDialog(String? title, TalkShareCallback callback) {
+void showTalkShareDialog(String? title,
+    {required TalkShareCallback callback, List<ShareTalkType>? shareToType}) {
   const String tag = 'showTalkShareDialog';
 
   Rx<ShareTalkType> shareType = ShareTalkType.summary.obs;
@@ -73,31 +74,27 @@ void showTalkShareDialog(String? title, TalkShareCallback callback) {
                   Divider(color: '#F6F6F6'.toColor(), height: 1.h),
                   SizedBox(height: 20.h),
                   Obx(() {
+                    final type = shareToType ?? getDefaultShareType();
                     return Row(
                       children: [
-                        Expanded(
+                        for (int i = 0; i < type.length; i++) ...[
+                          Expanded(
                             child: _buildShareTypeItem(
-                                StringName.talkTabSummary.tr,
-                                Assets.images.iconTalkShareSummary.provider(),
-                                shareType.value == ShareTalkType.summary, () {
-                          shareType.value = ShareTalkType.summary;
-                        })),
-                        SizedBox(width: 8.w),
-                        Expanded(
-                            child: _buildShareTypeItem(
-                                StringName.talkMindMap.tr,
-                                Assets.images.iconTalkMindMap.provider(),
-                                shareType.value == ShareTalkType.mindMap, () {
-                          shareType.value = ShareTalkType.mindMap;
-                        })),
-                        SizedBox(width: 8.w),
-                        Expanded(
-                            child: _buildShareTypeItem(
-                                StringName.talkTabOriginal.tr,
-                                Assets.images.iconTalkShareOriginal.provider(),
-                                shareType.value == ShareTalkType.original, () {
-                          shareType.value = ShareTalkType.original;
-                        })),
+                              _getTitle(
+                                  (shareToType ?? getDefaultShareType())[i]),
+                              _getIconProvider(
+                                  (shareToType ?? getDefaultShareType())[i]),
+                              shareType.value ==
+                                  (shareToType ?? getDefaultShareType())[i],
+                              () {
+                                shareType.value =
+                                    (shareToType ?? getDefaultShareType())[i];
+                              },
+                            ),
+                          ),
+                          if (i < type.length - 1)
+                            SizedBox(width: 8.w), // Add gap between items
+                        ],
                       ],
                     );
                   }),
@@ -213,6 +210,36 @@ Widget _buildShareItem(
   );
 }
 
+String _getTitle(ShareTalkType type) {
+  switch (type) {
+    case ShareTalkType.summary:
+      return StringName.talkTabSummary.tr;
+    case ShareTalkType.mindMap:
+      return StringName.talkMindMap.tr;
+    case ShareTalkType.original:
+      return StringName.talkTabOriginal.tr;
+    default:
+      return '';
+  }
+}
+
+ImageProvider _getIconProvider(ShareTalkType type) {
+  switch (type) {
+    case ShareTalkType.summary:
+      return Assets.images.iconTalkShareSummary.provider();
+    case ShareTalkType.mindMap:
+      return Assets.images.iconTalkMindMap.provider();
+    case ShareTalkType.original:
+      return Assets.images.iconTalkShareOriginal.provider();
+    default:
+      return const AssetImage(''); // Provide a default image if necessary
+  }
+}
+
+List<ShareTalkType> getDefaultShareType() {
+  return [ShareTalkType.summary, ShareTalkType.mindMap, ShareTalkType.original];
+}
+
 enum ShareTalkType { summary, mindMap, original }
 
 enum ShareTo { wechat, qq, ios }

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

@@ -695,6 +695,15 @@ class TalkController extends BaseController {
     return true;
   }
 
+  List<ShareTalkType> _getShareToType(bool isShowMindMap) {
+    List<ShareTalkType> shareToType = [ShareTalkType.summary];
+    if (isShowMindMap) {
+      shareToType.add(ShareTalkType.mindMap);
+    }
+    shareToType.add(ShareTalkType.original);
+    return shareToType;
+  }
+
   void onShareClick() async {
     if (!await checkLogin()) {
       return;
@@ -704,7 +713,8 @@ class TalkController extends BaseController {
     }
     eventReport(EventId.event_101004);
     showTalkShareDialog(talkBean.value?.title.value,
-        (type, shareTo, fileName, tag) async {
+        shareToType: _getShareToType(isShowMindMap.value),
+        callback: (type, shareTo, fileName, tag) async {
       try {
         await isInstalled(shareTo);
         if (type == ShareTalkType.summary || type == ShareTalkType.original) {