From 84d66629a75bcd87f3e3e3f9a91473010f089e05 Mon Sep 17 00:00:00 2001 From: lxm <1274844347@qq.com> Date: Tue, 30 Sep 2025 12:11:22 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E5=88=86=E4=BA=AB=E5=8A=9F=E8=83=BD):=20?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0Markdown=E8=BD=AC=E7=BA=AF=E6=96=87=E6=9C=AC?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E4=BB=A5=E6=AD=A3=E7=A1=AE=E5=88=86=E4=BA=AB?= =?UTF-8?q?=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在分享会议总结时,原始内容可能包含Markdown格式标记,导致分享的文本包含不必要的格式符号。添加_markdownToPlainText方法移除所有Markdown标记,确保分享的文本是干净的纯文本格式。 --- .../views/bottomSheet/share_bottom_sheet.dart | 65 ++++++++++++++++++- 1 file changed, 62 insertions(+), 3 deletions(-) diff --git a/lib/modules/meeting/views/bottomSheet/share_bottom_sheet.dart b/lib/modules/meeting/views/bottomSheet/share_bottom_sheet.dart index 66afed3ec..8171cdbd7 100644 --- a/lib/modules/meeting/views/bottomSheet/share_bottom_sheet.dart +++ b/lib/modules/meeting/views/bottomSheet/share_bottom_sheet.dart @@ -128,7 +128,8 @@ class _ShareBottomSheetState extends State { onTap: _controller.meetingDetails.value.tasktype >= 3 ? () { Get.back(); - _copy(_controller.meetingDetails.value.summary); + _copy(_markdownToPlainText( + _controller.meetingDetails.value.summary)); } : null), ]), @@ -168,8 +169,9 @@ class _ShareBottomSheetState extends State { await getTemporaryDirectory(); final file = File( '${tempDir.path}/${_controller.meetingData.value.title}_summary.txt'); - await file.writeAsString(_controller - .meetingDetails.value.summary); + await file.writeAsString( + _markdownToPlainText(_controller + .meetingDetails.value.summary)); _share(file.path, 'exportSummary'.tr); // 对应中文:分享会议总结 } else { @@ -320,6 +322,63 @@ class _ShareBottomSheetState extends State { ); } + /// 将Markdown格式转换为纯文本 + String _markdownToPlainText(String markdown) { + String text = markdown; + + // 移除粗体标记 **text** 或 __text__ + text = text.replaceAllMapped( + RegExp(r'\*\*(.*?)\*\*'), (match) => match.group(1) ?? ''); + text = text.replaceAllMapped( + RegExp(r'__(.*?)__'), (match) => match.group(1) ?? ''); + + // 移除斜体标记 *text* 或 _text_ + text = text.replaceAllMapped( + RegExp(r'\*(.*?)\*'), (match) => match.group(1) ?? ''); + text = text.replaceAllMapped( + RegExp(r'_(.*?)_'), (match) => match.group(1) ?? ''); + + // 移除删除线标记 ~~text~~ + text = text.replaceAllMapped( + RegExp(r'~~(.*?)~~'), (match) => match.group(1) ?? ''); + + // 移除代码块标记 ```code``` + text = text.replaceAll(RegExp(r'```[\s\S]*?```'), ''); + + // 移除行内代码标记 `code` + text = text.replaceAllMapped( + RegExp(r'`(.*?)`'), (match) => match.group(1) ?? ''); + + // 移除链接标记 [text](url) + text = text.replaceAllMapped( + RegExp(r'\[([^\]]+)\]\([^\)]+\)'), (match) => match.group(1) ?? ''); + + // 移除图片标记 ![alt](url) + text = text.replaceAllMapped( + RegExp(r'!\[([^\]]*)\]\([^\)]+\)'), (match) => match.group(1) ?? ''); + + // 移除标题标记 # ## ### 等 + text = text.replaceAll(RegExp(r'^#{1,6}\s+', multiLine: true), ''); + + // 移除引用标记 > + text = text.replaceAll(RegExp(r'^>\s*', multiLine: true), ''); + + // 移除列表标记 - * + + text = text.replaceAll(RegExp(r'^[\s]*[-\*\+]\s+', multiLine: true), ''); + + // 移除有序列表标记 1. 2. 等 + text = text.replaceAll(RegExp(r'^[\s]*\d+\.\s+', multiLine: true), ''); + + // 移除水平分割线 + text = + text.replaceAll(RegExp(r'^[\s]*[-\*_]{3,}[\s]*$', multiLine: true), ''); + + // 清理多余的空行 + text = text.replaceAll(RegExp(r'\n\s*\n\s*\n'), '\n\n'); + + return text.trim(); + } + String _getAllText() { String text = ''; for (var element in _controller.textList) {