|
|
|
@ -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<ShareBottomSheet> { |
|
|
|
_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<ShareBottomSheet> { |
|
|
|
); |
|
|
|
} |
|
|
|
|
|
|
|
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; |
|
|
|
} |
|
|
|
} |
|
|
|
|