From 0b082677f7619156b1ee7ca90bb2e956c53d4232 Mon Sep 17 00:00:00 2001 From: tanlongsheng <252620078@qq.com> Date: Wed, 14 Jan 2026 19:35:58 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../meeting_details_controller.dart | 12 +- .../views/bottomSheet/more_bottom_sheet.dart | 3 +- .../views/bottomSheet/share_bottom_sheet.dart | 18 +- .../meeting/views/meeting_home_view.dart | 6 + .../meeting/views/tabs/overview_tab.dart | 54 +- .../meeting/views/tabs/speech_tab.dart | 479 ++++++++++-------- .../meeting/views/tabs/summary_tab.dart | 74 ++- 7 files changed, 413 insertions(+), 233 deletions(-) diff --git a/lib/modules/meeting/controllers/meeting_details_controller.dart b/lib/modules/meeting/controllers/meeting_details_controller.dart index aa2e1f4a3..272d02609 100644 --- a/lib/modules/meeting/controllers/meeting_details_controller.dart +++ b/lib/modules/meeting/controllers/meeting_details_controller.dart @@ -57,7 +57,7 @@ class MeetingDetailsController extends GetxController RxInt editSpeakerTextId = 0.obs; String editSpeakerTextChange = ''; - int _everType = 99; + int _everType = 99999; RxInt summaryNumberModifications = 0.obs; RxInt personnelNumberModifications = 0.obs; @@ -94,12 +94,12 @@ class MeetingDetailsController extends GetxController _tasktypeListener = ever(_meetingTaskService.tasktype, (value) { meetingDetails.value.tasktype = value; if (_everType <= value) { - if (value >= 5) { + if (value >= 5 && value < 10000) { meetingDetails.value.personnel = _meetingTaskService.personnel; meetingDetails.value.summary = _meetingTaskService.summary; meetingDetails.value.overview = _meetingTaskService.overview; summaryNumberModifications.value++; - } else if (value >= 3) { + } else if (value >= 3 && value < 10000) { textList.value = _meetingTaskService.textList; } } @@ -132,14 +132,16 @@ class MeetingDetailsController extends GetxController if (meetingDetails.value.tasktype == 5) { await _meetingTaskService.readTask(id); } - if (meetingDetails.value.tasktype >= 5) { + if (meetingDetails.value.tasktype >= 5 && + meetingDetails.value.tasktype < 10000) { dragOffset.value = 0; isTop.value = true; } if (meetingData.value.filepath.isNotEmpty) { await _loadPlayerController(); } - if (meetingDetails.value.tasktype >= 3) { + if (meetingDetails.value.tasktype >= 3 && + meetingDetails.value.tasktype < 10000) { List speakerList = await SqfliteApi.getMeetingSpeaker(id); textList.value = List.from(speakerList); } diff --git a/lib/modules/meeting/views/bottomSheet/more_bottom_sheet.dart b/lib/modules/meeting/views/bottomSheet/more_bottom_sheet.dart index 43335adfe..1701f6c76 100644 --- a/lib/modules/meeting/views/bottomSheet/more_bottom_sheet.dart +++ b/lib/modules/meeting/views/bottomSheet/more_bottom_sheet.dart @@ -26,7 +26,8 @@ class _MoreBottomSheetState extends State { children: [ SizedBox(height: 10.w), _shareItem(Icons.refresh, 'reSummarize'.tr, //重新总结 - onTap: _detailsController.meetingDetails.value.tasktype >= 5 + onTap: _detailsController.meetingDetails.value.tasktype >= 5 && + _detailsController.meetingDetails.value.tasktype < 10002 ? () { Get.back(); Get.bottomSheet( diff --git a/lib/modules/meeting/views/bottomSheet/share_bottom_sheet.dart b/lib/modules/meeting/views/bottomSheet/share_bottom_sheet.dart index 08a76eebf..f4d507a34 100644 --- a/lib/modules/meeting/views/bottomSheet/share_bottom_sheet.dart +++ b/lib/modules/meeting/views/bottomSheet/share_bottom_sheet.dart @@ -117,7 +117,8 @@ class _ShareBottomSheetState extends State { ]), _box([ _shareItem(Icons.copy, 'copyTranscript'.tr, // 对应中文:复制转写 - onTap: _controller.meetingDetails.value.tasktype >= 3 + onTap: _controller.meetingDetails.value.tasktype >= 3 && + _controller.meetingDetails.value.tasktype < 10002 ? () { Get.back(); _copy(_getAllText()); @@ -125,7 +126,8 @@ class _ShareBottomSheetState extends State { : null), _shareItem(Icons.copy, 'copySummary'.tr, // 对应中文:复制总结 isBorder: false, - onTap: _controller.meetingDetails.value.tasktype >= 5 + onTap: _controller.meetingDetails.value.tasktype >= 5 && + _controller.meetingDetails.value.tasktype < 10001 ? () { Get.back(); _copy(_markdownToPlainText( @@ -142,7 +144,8 @@ class _ShareBottomSheetState extends State { 'shareMeetingAudio'.tr); // 对应中文:分享会议音频 }), _shareItem(Icons.message, 'exportTranscript'.tr, // 对应中文:导出转写 - onTap: _controller.meetingDetails.value.tasktype >= 3 + onTap: _controller.meetingDetails.value.tasktype >= 3 && + _controller.meetingDetails.value.tasktype < 10002 ? () async { Get.back(); final tempDir = await getTemporaryDirectory(); @@ -155,7 +158,8 @@ class _ShareBottomSheetState extends State { } : null), _shareItem(Icons.article, 'exportSummary'.tr, // 对应中文:导出总结 - onTap: _controller.meetingDetails.value.tasktype >= 5 + onTap: _controller.meetingDetails.value.tasktype >= 5 && + _controller.meetingDetails.value.tasktype < 10001 ? () async { Get.back(); Get.bottomSheet( @@ -205,7 +209,8 @@ class _ShareBottomSheetState extends State { _shareItem( Icons.save_alt, '保存思维导图', - onTap: _controller.meetingDetails.value.tasktype >= 5 + onTap: _controller.meetingDetails.value.tasktype >= 5 && + _controller.meetingDetails.value.tasktype < 10001 ? () { Get.back(); final mindMapController = @@ -233,7 +238,8 @@ class _ShareBottomSheetState extends State { Icons.lan, 'shareMindMap'.tr, // 对应中文:分享思维导图 isBorder: false, - onTap: _controller.meetingDetails.value.tasktype >= 5 + onTap: _controller.meetingDetails.value.tasktype >= 5 && + _controller.meetingDetails.value.tasktype < 10001 ? () { Get.back(); final mindMapController = diff --git a/lib/modules/meeting/views/meeting_home_view.dart b/lib/modules/meeting/views/meeting_home_view.dart index c15a3f6bf..c754175cf 100644 --- a/lib/modules/meeting/views/meeting_home_view.dart +++ b/lib/modules/meeting/views/meeting_home_view.dart @@ -267,6 +267,12 @@ class _MeetingHomeViewState extends State case 5: tasktypeText = 'summaryComplete'.tr; // 对应中文:总结完成 break; + case 10001: + tasktypeText = '总结失败'; + break; + case 10002: + tasktypeText = '转写失败'; + break; default: tasktypeText = ''; } diff --git a/lib/modules/meeting/views/tabs/overview_tab.dart b/lib/modules/meeting/views/tabs/overview_tab.dart index c43201d9d..69057d32d 100644 --- a/lib/modules/meeting/views/tabs/overview_tab.dart +++ b/lib/modules/meeting/views/tabs/overview_tab.dart @@ -99,7 +99,8 @@ class _OverviewTabState extends State { child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ - if (_controller.meetingDetails.value.tasktype >= 3) + if (_controller.meetingDetails.value.tasktype >= 3 && + _controller.meetingDetails.value.tasktype < 10000) _button( Icons.auto_awesome, 'Ask AI', @@ -138,6 +139,50 @@ class _OverviewTabState extends State { }, ), ), + if (_controller.meetingDetails.value.tasktype == 10002) + SizedBox( + width: 150.w, + child: _button( + Icons.auto_awesome, + '重新生成', + () { + Get.bottomSheet( + const GenerateBottomSheet(), + isScrollControlled: true, + backgroundColor: + isDarkMode ? Colors.grey[800] : Colors.grey[100], + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.vertical( + top: Radius.circular(12.r), + ), + ), + ); + }, + ), + ), + if (_controller.meetingDetails.value.tasktype == 10001) + SizedBox( + width: 150.w, + child: _button( + Icons.auto_awesome, + '重新总结', + () { + Get.bottomSheet( + const GenerateBottomSheet( + isSummarizeAgain: true, + ), + isScrollControlled: true, + backgroundColor: + isDarkMode ? Colors.grey[800] : Colors.grey[100], + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.vertical( + top: Radius.circular(12.r), + ), + ), + ); + }, + ), + ), ], ), ), @@ -200,7 +245,8 @@ class _OverviewTabState extends State { Widget _empty() { final isDarkMode = Theme.of(context).brightness == Brightness.dark; - return Padding( + return Container( + width: double.infinity, padding: EdgeInsets.symmetric(horizontal: 20.w, vertical: 30.w), child: Column( children: [ @@ -221,7 +267,9 @@ class _OverviewTabState extends State { ), ), Text( - 'aiAnalysisDesc'.tr, // 对应中文:AI分析识别录音中的关键事件,让你选择重要事件进行AI生成。 + _controller.meetingDetails.value.tasktype < 10000 + ? 'aiAnalysisDesc'.tr // 对应中文:AI分析识别录音中的关键事件,让你选择重要事件进行AI生成。 + : '分析失败,请稍后重试', style: TextStyle( color: MeetingUIUtils.getSecondaryTextColor(isDarkMode), fontSize: 14.sp, diff --git a/lib/modules/meeting/views/tabs/speech_tab.dart b/lib/modules/meeting/views/tabs/speech_tab.dart index b42d9af49..43acf27cc 100644 --- a/lib/modules/meeting/views/tabs/speech_tab.dart +++ b/lib/modules/meeting/views/tabs/speech_tab.dart @@ -20,229 +20,259 @@ class SpeechTab extends GetView { return Stack( children: [ Obx( - () => ListView.builder( - itemCount: controller.textList.length, - padding: EdgeInsets.only(bottom: 80.w), - itemBuilder: (BuildContext context, int index) { - Map item = controller.textList[index]; - TextStyle textStyle = TextStyle( - fontSize: 15.sp, - color: MeetingUIUtils.getTextColor(isDarkMode), - letterSpacing: 0, - height: 1.4, - ); - return Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Padding( - padding: EdgeInsets.only(top: 10.w), - child: Row( + () => controller.meetingDetails.value.tasktype != 10002 + ? ListView.builder( + itemCount: controller.textList.length, + padding: EdgeInsets.only(bottom: 80.w), + itemBuilder: (BuildContext context, int index) { + Map item = controller.textList[index]; + TextStyle textStyle = TextStyle( + fontSize: 15.sp, + color: MeetingUIUtils.getTextColor(isDarkMode), + letterSpacing: 0, + height: 1.4, + ); + return Column( + crossAxisAlignment: CrossAxisAlignment.start, children: [ - if (item['speaker'].isNotEmpty) - Container( - width: 11.w, - height: 11.w, - margin: EdgeInsets.only(right: 3.w), - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(11.r), - border: Border.all( - color: const Color(0xFFFFC107), - width: 3.w, - ), - ), - ), - if (item['speaker'].isNotEmpty) - GestureDetector( - onTap: () { - if (controller.isSpeakerText.value) return; - Get.bottomSheet( - SpeakerBottomSheet(item['id'], item['speaker']), - isScrollControlled: true, - backgroundColor: isDarkMode ? Colors.grey[800] : Colors.grey[100], - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.vertical( - top: Radius.circular(12.r), + Padding( + padding: EdgeInsets.only(top: 10.w), + child: Row( + children: [ + if (item['speaker'].isNotEmpty) + Container( + width: 11.w, + height: 11.w, + margin: EdgeInsets.only(right: 3.w), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(11.r), + border: Border.all( + color: const Color(0xFFFFC107), + width: 3.w, + ), ), ), - ); - }, - child: Padding( - padding: EdgeInsets.only(right: 5.w), - child: Text( - item['speaker'], + if (item['speaker'].isNotEmpty) + GestureDetector( + onTap: () { + if (controller.isSpeakerText.value) return; + Get.bottomSheet( + SpeakerBottomSheet( + item['id'], item['speaker']), + isScrollControlled: true, + backgroundColor: isDarkMode + ? Colors.grey[800] + : Colors.grey[100], + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.vertical( + top: Radius.circular(12.r), + ), + ), + ); + }, + child: Padding( + padding: EdgeInsets.only(right: 5.w), + child: Text( + item['speaker'], + style: TextStyle( + color: const Color(0xFFFFC107), + fontSize: 13.sp, + ), + ), + ), + ), + Text( + DateUtil.formatDateMs( + item['starttime'], + format: 'HH:mm:ss', + isUtc: true, + ), style: TextStyle( - color: const Color(0xFFFFC107), + color: MeetingUIUtils.getSecondaryTextColor( + isDarkMode), fontSize: 13.sp, ), ), - ), - ), - Text( - DateUtil.formatDateMs( - item['starttime'], - format: 'HH:mm:ss', - isUtc: true, - ), - style: TextStyle( - color: MeetingUIUtils.getSecondaryTextColor(isDarkMode), - fontSize: 13.sp, + Obx(() { + bool isActive = false; + int starttime = item['starttime']; + int endtime = 0; + if (index == controller.textList.length - 1) { + endtime = controller.durationMax.value; + } else { + endtime = controller.textList[index + 1] + ['starttime']; + } + if (controller.currentDuration.value != 0) { + if (controller.currentDuration.value >= + starttime && + controller.currentDuration.value < + endtime) { + isActive = true; + } + } + return isActive + ? Container( + width: 16.w, + height: 16.w, + margin: EdgeInsets.only(left: 5.w), + alignment: Alignment.center, + clipBehavior: Clip.hardEdge, + decoration: BoxDecoration( + color: Colors.red[100], + borderRadius: + BorderRadius.circular(4.r), + ), + child: Transform.scale( + scale: 1.6, + child: Lottie.asset( + 'assets/lottie/sound_effect.json', + controller: + controller.lottieController, + ), + ), + ) + : const SizedBox(); + }), + ], ), ), Obx(() { - bool isActive = false; - int starttime = item['starttime']; - int endtime = 0; - if (index == controller.textList.length - 1) { - endtime = controller.durationMax.value; + if (controller.isSpeakerText.value) { + TextEditingController speakerTextController = + TextEditingController(text: item['content']); + return Obx( + () => Container( + padding: EdgeInsets.symmetric( + horizontal: 14.w, + ), + decoration: BoxDecoration( + color: controller.editSpeakerTextId.value == + item['id'] + ? Colors.blue[100] + : null, + borderRadius: BorderRadius.circular(8.w), + ), + child: FocusScope( + onFocusChange: (bool hasFocus) { + if (hasFocus) { + controller.editSpeakerTextId.value = + item['id']; + controller.editSpeakerTextChange = ''; + } else { + if (speakerTextController.text != + item['content']) { + Map? foundElement = controller + .editSpeakerTextList + .firstWhere( + (element) => + element['id'] == item['id'], + orElse: () => null, + ); + if (foundElement != null) { + foundElement['content'] = + speakerTextController.text; + } else { + controller.editSpeakerTextList.add({ + 'id': item['id'], + 'content': + speakerTextController.text, + }); + } + } + } + }, + child: TextField( + controller: speakerTextController, + style: textStyle, + minLines: 1, + maxLines: 100, + decoration: InputDecoration( + isDense: true, + fillColor: Colors.transparent, + border: InputBorder.none, + contentPadding: + EdgeInsets.symmetric(vertical: 5.w), + ), + onChanged: (String value) { + controller.editSpeakerTextChange = value; + }, + ), + ), + ), + ); } else { - endtime = - controller.textList[index + 1]['starttime']; - } - if (controller.currentDuration.value != 0) { - if (controller.currentDuration.value >= starttime && - controller.currentDuration.value < endtime) { - isActive = true; - } - } - return isActive - ? Container( - width: 16.w, - height: 16.w, - margin: EdgeInsets.only(left: 5.w), - alignment: Alignment.center, - clipBehavior: Clip.hardEdge, - decoration: BoxDecoration( - color: Colors.red[100], - borderRadius: BorderRadius.circular(4.r), + return Obx(() { + bool isActive = false; + int starttime = item['starttime']; + int endtime = 0; + if (index == controller.textList.length - 1) { + endtime = controller.durationMax.value; + } else { + endtime = + controller.textList[index + 1]['starttime']; + } + if (controller.currentDuration.value != 0) { + if (controller.currentDuration.value >= + starttime && + controller.currentDuration.value < + endtime) { + isActive = true; + } + } + return GestureDetector( + behavior: HitTestBehavior.translucent, + onTap: () { + if (isActive) { + if (controller.isPlay.value) { + controller.playerController.pausePlayer(); + } else { + controller.playerController.startPlayer(); + } + } else { + controller.playerController + .seekTo(item['starttime']); + controller.playerController.startPlayer(); + } + }, + child: Container( + width: double.infinity, + padding: EdgeInsets.symmetric( + horizontal: 14.w, + vertical: 5.w, ), - child: Transform.scale( - scale: 1.6, - child: Lottie.asset( - 'assets/lottie/sound_effect.json', - controller: controller.lottieController, + child: Text( + item['content'], + style: TextStyle( + fontSize: 15.sp, + color: isActive + ? Colors.red + : MeetingUIUtils.getTextColor( + isDarkMode), + letterSpacing: 0, + height: 1.4, ), ), - ) - : const SizedBox(); + ), + ); + }); + } }), ], + ); + }, + ) + : Container( + height: 200.w, + alignment: Alignment.center, + child: Text( + '转写失败,请稍后重试', + style: TextStyle( + color: MeetingUIUtils.getSecondaryTextColor(isDarkMode), + fontSize: 14.sp, ), ), - Obx(() { - if (controller.isSpeakerText.value) { - TextEditingController speakerTextController = - TextEditingController(text: item['content']); - return Obx( - () => Container( - padding: EdgeInsets.symmetric( - horizontal: 14.w, - ), - decoration: BoxDecoration( - color: - controller.editSpeakerTextId.value == item['id'] - ? Colors.blue[100] - : null, - borderRadius: BorderRadius.circular(8.w), - ), - child: FocusScope( - onFocusChange: (bool hasFocus) { - if (hasFocus) { - controller.editSpeakerTextId.value = item['id']; - controller.editSpeakerTextChange = ''; - } else { - if (speakerTextController.text != - item['content']) { - Map? foundElement = - controller.editSpeakerTextList.firstWhere( - (element) => element['id'] == item['id'], - orElse: () => null, - ); - if (foundElement != null) { - foundElement['content'] = - speakerTextController.text; - } else { - controller.editSpeakerTextList.add({ - 'id': item['id'], - 'content': speakerTextController.text, - }); - } - } - } - }, - child: TextField( - controller: speakerTextController, - style: textStyle, - minLines: 1, - maxLines: 100, - decoration: InputDecoration( - isDense: true, - fillColor: Colors.transparent, - border: InputBorder.none, - contentPadding: - EdgeInsets.symmetric(vertical: 5.w), - ), - onChanged: (String value) { - controller.editSpeakerTextChange = value; - }, - ), - ), - ), - ); - } else { - return Obx(() { - bool isActive = false; - int starttime = item['starttime']; - int endtime = 0; - if (index == controller.textList.length - 1) { - endtime = controller.durationMax.value; - } else { - endtime = controller.textList[index + 1]['starttime']; - } - if (controller.currentDuration.value != 0) { - if (controller.currentDuration.value >= starttime && - controller.currentDuration.value < endtime) { - isActive = true; - } - } - return GestureDetector( - behavior: HitTestBehavior.translucent, - onTap: () { - if (isActive) { - if (controller.isPlay.value) { - controller.playerController.pausePlayer(); - } else { - controller.playerController.startPlayer(); - } - } else { - controller.playerController - .seekTo(item['starttime']); - controller.playerController.startPlayer(); - } - }, - child: Container( - width: double.infinity, - padding: EdgeInsets.symmetric( - horizontal: 14.w, - vertical: 5.w, - ), - child: Text( - item['content'], - style: TextStyle( - fontSize: 15.sp, - color: isActive ? Colors.red : MeetingUIUtils.getTextColor(isDarkMode), - letterSpacing: 0, - height: 1.4, - ), - ), - ), - ); - }); - } - }), - ], - ); - }, - ), + ), ), Obx( () => Positioned( @@ -253,7 +283,8 @@ class SpeechTab extends GetView { mainAxisAlignment: MainAxisAlignment.center, children: [ if (controller.meetingDetails.value.tasktype >= 2 && - !controller.isSpeakerText.value) + !controller.isSpeakerText.value && + controller.meetingDetails.value.tasktype != 10002) _button( Icons.edit, 'editSpeaker'.tr, // 对应中文:编辑 @@ -264,7 +295,8 @@ class SpeechTab extends GetView { }, ), if (controller.meetingDetails.value.tasktype >= 2 && - !controller.isSpeakerText.value) + !controller.isSpeakerText.value && + controller.meetingDetails.value.tasktype != 10002) _button( Icons.supervisor_account, 'nameSpeaker'.tr, // 对应中文:命名发言者 @@ -272,7 +304,8 @@ class SpeechTab extends GetView { Get.bottomSheet( const SpeakerAllBottomSheet(), isScrollControlled: true, - backgroundColor: isDarkMode ? Colors.grey[800] : Colors.grey[100], + backgroundColor: + isDarkMode ? Colors.grey[800] : Colors.grey[100], shape: RoundedRectangleBorder( borderRadius: BorderRadius.vertical( top: Radius.circular(12.r), @@ -282,7 +315,8 @@ class SpeechTab extends GetView { }, ), if (controller.meetingDetails.value.tasktype >= 2 && - !controller.isSpeakerText.value) + !controller.isSpeakerText.value && + controller.meetingDetails.value.tasktype != 10002) _button( Icons.auto_awesome, 'Ask AI', @@ -290,7 +324,8 @@ class SpeechTab extends GetView { Get.bottomSheet( const AIBottomSheet(), isScrollControlled: true, - backgroundColor: isDarkMode ? Colors.grey[800] : Colors.white, + backgroundColor: + isDarkMode ? Colors.grey[800] : Colors.white, shape: RoundedRectangleBorder( borderRadius: BorderRadius.vertical( top: Radius.circular(12.r), @@ -309,7 +344,29 @@ class SpeechTab extends GetView { Get.bottomSheet( const GenerateBottomSheet(), isScrollControlled: true, - backgroundColor: isDarkMode ? Colors.grey[800] : Colors.grey[100], + backgroundColor: + isDarkMode ? Colors.grey[800] : Colors.grey[100], + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.vertical( + top: Radius.circular(12.r), + ), + ), + ); + }, + ), + ), + if (controller.meetingDetails.value.tasktype == 10002) + SizedBox( + width: 150.w, + child: _button( + Icons.auto_awesome, + '重新生成', + () { + Get.bottomSheet( + const GenerateBottomSheet(), + isScrollControlled: true, + backgroundColor: + isDarkMode ? Colors.grey[800] : Colors.grey[100], shape: RoundedRectangleBorder( borderRadius: BorderRadius.vertical( top: Radius.circular(12.r), diff --git a/lib/modules/meeting/views/tabs/summary_tab.dart b/lib/modules/meeting/views/tabs/summary_tab.dart index 995e18d42..a64103edc 100644 --- a/lib/modules/meeting/views/tabs/summary_tab.dart +++ b/lib/modules/meeting/views/tabs/summary_tab.dart @@ -8,6 +8,7 @@ import 'package:parchment/codecs.dart'; import '../../../../data/services/db/sqflite_api.dart'; import '../../../../data/services/network/api.dart'; import '../../controllers/meeting_details_controller.dart'; +import '../../utils/meeting_ui_utils.dart'; import '../bottomSheet/ai_bottom_sheet.dart'; import '../bottomSheet/generate_bottom_sheet.dart'; import '../bottomSheet/speaker_all_bottom_sheet.dart'; @@ -335,11 +336,22 @@ class _SummaryTabState extends State { ), Padding( padding: EdgeInsets.only(top: 10.w), - child: FleatherEditor( - controller: _fleatherController!, - focusNode: _focusNode, - editorKey: _editorKey, - ), + child: _controller.meetingDetails.value.tasktype < 10000 + ? FleatherEditor( + controller: _fleatherController!, + focusNode: _focusNode, + editorKey: _editorKey, + ) + : Center( + child: Text( + '总结失败,请稍后重试', + style: TextStyle( + color: MeetingUIUtils.getSecondaryTextColor( + isDarkMode), + fontSize: 14.sp, + ), + ), + ), ), ], ), @@ -354,7 +366,8 @@ class _SummaryTabState extends State { child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ - if (_controller.meetingDetails.value.tasktype >= 3) + if (_controller.meetingDetails.value.tasktype >= 3 && + _controller.meetingDetails.value.tasktype < 10000) _button( Icons.supervisor_account, 'editSpeaker'.tr, // 对应中文:编辑发言者 @@ -372,7 +385,8 @@ class _SummaryTabState extends State { ); }, ), - if (_controller.meetingDetails.value.tasktype >= 3) + if (_controller.meetingDetails.value.tasktype >= 3 && + _controller.meetingDetails.value.tasktype < 10000) _button( Icons.auto_awesome, 'Ask AI', @@ -412,6 +426,52 @@ class _SummaryTabState extends State { }, ), ), + if (_controller.meetingDetails.value.tasktype == 10002) + SizedBox( + width: 150.w, + child: _button( + Icons.auto_awesome, + '重新生成', + () { + Get.bottomSheet( + const GenerateBottomSheet(), + isScrollControlled: true, + backgroundColor: isDarkMode + ? Colors.grey[800] + : Colors.grey[100], + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.vertical( + top: Radius.circular(12.r), + ), + ), + ); + }, + ), + ), + if (_controller.meetingDetails.value.tasktype == 10001) + SizedBox( + width: 150.w, + child: _button( + Icons.auto_awesome, + '重新总结', + () { + Get.bottomSheet( + const GenerateBottomSheet( + isSummarizeAgain: true, + ), + isScrollControlled: true, + backgroundColor: isDarkMode + ? Colors.grey[800] + : Colors.grey[100], + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.vertical( + top: Radius.circular(12.r), + ), + ), + ); + }, + ), + ), ], ), ),