From b394fa6c61d6b1fd2f52bc67c20147d49641a256 Mon Sep 17 00:00:00 2001 From: tanlongsheng <252620078@qq.com> Date: Thu, 19 Jun 2025 21:52:27 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=9A=E8=AE=AE=E5=8A=A9=E6=89=8B=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E5=88=86=E4=BA=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../meeting/views/share_bottom_sheet.dart | 86 +++++++++++++++---- 1 file changed, 71 insertions(+), 15 deletions(-) diff --git a/lib/modules/meeting/views/share_bottom_sheet.dart b/lib/modules/meeting/views/share_bottom_sheet.dart index 7ad740d1f..229d83501 100644 --- a/lib/modules/meeting/views/share_bottom_sheet.dart +++ b/lib/modules/meeting/views/share_bottom_sheet.dart @@ -1,7 +1,12 @@ +import 'dart:io'; + +import 'package:common_utils/common_utils.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; +import 'package:path_provider/path_provider.dart'; import 'package:share_plus/share_plus.dart'; import '../controllers/meeting_details_controller.dart'; @@ -69,18 +74,44 @@ class _ShareBottomSheetState extends State { _shareItem(Icons.link, '分享链接', isBorder: false), ]), _box([ - _shareItem(Icons.copy, '复制转写'), - _shareItem(Icons.copy, '复制总结', isBorder: false), + _shareItem(Icons.copy, '复制转写', onTap: () { + Get.back(); + _copy(_getAllText()); + }), + _shareItem(Icons.copy, '复制总结', isBorder: false, onTap: () { + Get.back(); + _copy(_controller.meetingDetails.value.summary); + }), ]), _box([ + _shareItem(Icons.multitrack_audio, '导出音频', onTap: () { + Get.back(); + _share(_controller.meetingData.value.filepath, '分享会议音频'); + }), + _shareItem(Icons.message, '导出转写', onTap: () async { + final tempDir = await getTemporaryDirectory(); + final file = File( + '${tempDir.path}/${_controller.meetingData.value.title} speaker.txt'); + String allText = _getAllText(); + await file.writeAsString(allText); + Get.back(); + _share(file.path, '分享会议转写'); + }), + _shareItem(Icons.article, '导出总结', onTap: () async { + final tempDir = await getTemporaryDirectory(); + final file = File( + '${tempDir.path}/${_controller.meetingData.value.title} summary.txt'); + await file.writeAsString( + _controller.meetingDetails.value.summary); + Get.back(); + _share(file.path, '分享会议总结'); + }), _shareItem( - Icons.multitrack_audio, - '导出音频', - onTap: shareAllTranslatAudio, + Icons.lan, + '导出思维导图', + isBorder: false, + onTap: () {}, ), - _shareItem(Icons.message, '导出转写'), - _shareItem(Icons.article, '导出总结'), - _shareItem(Icons.lan, '导出思维导图', isBorder: false), ]), ], ), @@ -144,17 +175,42 @@ class _ShareBottomSheetState extends State { ); } - void shareAllTranslatAudio() async { - if (_controller.meetingData.value.filepath.isEmpty) { - EasyLoading.showToast('没有可分享的音频文件'); - return; - } + void _share(String filepath, String title) async { final result = await SharePlus.instance.share(ShareParams( - text: '分享会议音频', - files: [XFile(_controller.meetingData.value.filepath)], + text: title, + files: [XFile(filepath)], )); if (result.status == ShareResultStatus.success) { EasyLoading.showToast('分享完成!'); } } + + void _copy(String text) { + Clipboard.setData(ClipboardData( + text: text, + )).then( + (value) => Get.snackbar( + 'success'.tr, // 成功 + '复制成功', + backgroundColor: Colors.blue.withOpacity(0.8), + colorText: Colors.white, + ), + ); + } + + String _getAllText() { + String text = ''; + for (var element in _controller.textList) { + if (element['speaker'].isNotEmpty) { + text += '${element['speaker']} '; + } + text += '${DateUtil.formatDateMs( + element['starttime'], + format: 'HH:mm:ss', + isUtc: true, + )}\n'; + text += '${element['content']}\n'; + } + return text; + } }