Browse Source

优化商务会议助手

newdev_shunjiawei
tanlongsheng 1 year ago
parent
commit
bb0dceadc6
  1. 13
      lib/core/utils/synchrodata.dart
  2. 2
      lib/modules/meeting/controllers/meeting_controller.dart
  3. 4
      lib/modules/meeting/controllers/meeting_details_controller.dart
  4. 36
      lib/modules/meeting/views/more_bottom_sheet.dart
  5. 14
      lib/modules/meeting/views/overview_tab.dart
  6. 106
      lib/modules/meeting/views/share_bottom_sheet.dart

13
lib/core/utils/synchrodata.dart

@ -71,8 +71,8 @@ class Synchrodata {
}
}
// 获取操作记录
static Future startSynchro() async {
// 上传操作记录
static Future uploadOperationRecords({bool isSynchro = false}) async {
if (_isSynchro) return;
_isSynchro = true;
if (_records.isNotEmpty || _delids.isNotEmpty) {
@ -104,7 +104,14 @@ class Synchrodata {
_storage.write("operation_delids", _delids);
}
}
var result = await Api.getOperationRecord();
if (isSynchro) {
await _synchrodata();
}
_isSynchro = false;
}
// 同步数据
static Future _synchrodata() async {
var result = await Api.getOperationRecord();
}
}

2
lib/modules/meeting/controllers/meeting_controller.dart

@ -82,7 +82,7 @@ class MeetingController extends GetxController {
}
void onPopInvokedWithResult(didPop, result) {
Synchrodata.startSynchro();
Synchrodata.uploadOperationRecords(isSynchro: true);
}
void _onScroll() {

4
lib/modules/meeting/controllers/meeting_details_controller.dart

@ -233,7 +233,7 @@ class MeetingDetailsController extends GetxController
String text = '';
for (var element in textList) {
if (element['speaker'].isNotEmpty) {
text += '[${element['speaker']}]:';
text += '[${element['speaker']}]: ';
}
text += '${element['content']}\n';
}
@ -403,7 +403,7 @@ class MeetingDetailsController extends GetxController
String speaker = '';
if (element['additions'].isNotEmpty) {
speaker = 'Speaker ${element['additions']['speaker']}';
text += '[$speaker]:';
text += '[$speaker]: ';
if (!personnel.contains(speaker)) {
personnel += '[$speaker] ';
}

36
lib/modules/meeting/views/more_bottom_sheet.dart

@ -25,22 +25,24 @@ class _MoreBottomSheetState extends State<MoreBottomSheet> {
mainAxisSize: MainAxisSize.min,
children: [
SizedBox(height: 10.w),
if (_detailsController.meetingDetails.value.tasktype == 3)
_shareItem(Icons.refresh, '重新总结', onTap: () {
Get.back();
Get.bottomSheet(
const GenerateBottomSheet(
isSummarizeAgain: true,
),
isScrollControlled: true,
backgroundColor: Colors.grey[100],
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.vertical(
top: Radius.circular(12.r),
),
),
);
}),
_shareItem(Icons.refresh, '重新总结',
onTap: _detailsController.meetingDetails.value.tasktype >= 3
? () {
Get.back();
Get.bottomSheet(
const GenerateBottomSheet(
isSummarizeAgain: true,
),
isScrollControlled: true,
backgroundColor: Colors.grey[100],
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.vertical(
top: Radius.circular(12.r),
),
),
);
}
: null),
_shareItem(Icons.delete_outline, '删除', onTap: () async {
_controller.deleteMeeting(
_detailsController.meetingData.value.id,
@ -65,7 +67,7 @@ class _MoreBottomSheetState extends State<MoreBottomSheet> {
padding: EdgeInsets.symmetric(horizontal: 12.w, vertical: 15.w),
margin: EdgeInsets.only(bottom: 10.w),
decoration: BoxDecoration(
color: Colors.white,
color: onTap != null ? Colors.white : Colors.grey[200],
borderRadius: BorderRadius.circular(12.r),
),
child: Row(

14
lib/modules/meeting/views/overview_tab.dart

@ -1,12 +1,22 @@
import 'package:flutter/material.dart';
class OverviewTab extends StatelessWidget {
class OverviewTab extends StatefulWidget {
const OverviewTab({super.key});
@override
State<OverviewTab> createState() => _OverviewTabState();
}
class _OverviewTabState extends State<OverviewTab> {
@override
Widget build(BuildContext context) {
return SingleChildScrollView(
child: Text(''),
child: Column(
children: [
Text(''),
Text(''),
],
),
);
}
}

106
lib/modules/meeting/views/share_bottom_sheet.dart

@ -11,6 +11,7 @@ import 'package:path_provider/path_provider.dart';
import 'package:share_plus/share_plus.dart';
import 'package:webview_flutter/webview_flutter.dart';
import '../../../core/utils/synchrodata.dart';
import '../controllers/meeting_details_controller.dart';
import '../controllers/mind_map_controller.dart';
@ -80,6 +81,7 @@ class _ShareBottomSheetState extends State<ShareBottomSheet> {
isBorder: false,
onTap: () async {
Get.back();
Synchrodata.uploadOperationRecords();
final GetStorage storage = GetStorage();
String token = storage.read("logintoken") ?? '';
String userId = '';
@ -112,61 +114,77 @@ class _ShareBottomSheetState extends State<ShareBottomSheet> {
),
]),
_box([
_shareItem(Icons.copy, '复制转写', onTap: () {
Get.back();
_copy(_getAllText());
}),
_shareItem(Icons.copy, '复制总结', isBorder: false, onTap: () {
Get.back();
_copy(_controller.meetingDetails.value.summary);
}),
_shareItem(Icons.copy, '复制转写',
onTap: _controller.meetingDetails.value.tasktype >= 2
? () {
Get.back();
_copy(_getAllText());
}
: null),
_shareItem(Icons.copy, '复制总结',
isBorder: false,
onTap: _controller.meetingDetails.value.tasktype >= 3
? () {
Get.back();
_copy(_controller.meetingDetails.value.summary);
}
: null),
]),
_box([
_shareItem(Icons.multitrack_audio, '导出音频', onTap: () {
Get.back();
_share(_controller.meetingData.value.filepath, '分享会议音频');
}),
_shareItem(Icons.message, '导出转写', onTap: () async {
Get.back();
final tempDir = await getTemporaryDirectory();
final file = File(
'${tempDir.path}/${_controller.meetingData.value.title} speaker.txt');
String allText = _getAllText();
await file.writeAsString(allText);
_share(file.path, '分享会议转写');
}),
_shareItem(Icons.article, '导出总结', onTap: () async {
Get.back();
final tempDir = await getTemporaryDirectory();
final file = File(
'${tempDir.path}/${_controller.meetingData.value.title} summary.txt');
await file.writeAsString(
_controller.meetingDetails.value.summary);
_share(file.path, '分享会议总结');
}),
_shareItem(Icons.message, '导出转写',
onTap: _controller.meetingDetails.value.tasktype >= 2
? () async {
Get.back();
final tempDir = await getTemporaryDirectory();
final file = File(
'${tempDir.path}/${_controller.meetingData.value.title} speaker.txt');
String allText = _getAllText();
await file.writeAsString(allText);
_share(file.path, '分享会议转写');
}
: null),
_shareItem(Icons.article, '导出总结',
onTap: _controller.meetingDetails.value.tasktype >= 3
? () async {
Get.back();
final tempDir = await getTemporaryDirectory();
final file = File(
'${tempDir.path}/${_controller.meetingData.value.title} summary.txt');
await file.writeAsString(
_controller.meetingDetails.value.summary);
_share(file.path, '分享会议总结');
}
: null),
_shareItem(
Icons.lan,
'导出思维导图',
isBorder: false,
onTap: () {
Get.back();
final mindMapController = Get.find<MindMapController>();
if (mindMapController.isWebViewReady) {
mindMapController.webViewController
.runJavaScript('captureImage()');
} else {
mindMapController.webViewController
.setNavigationDelegate(
NavigationDelegate(
onPageFinished: (String url) {
mindMapController.isWebViewReady = true;
onTap: _controller.meetingDetails.value.tasktype >= 3
? () {
Get.back();
final mindMapController =
Get.find<MindMapController>();
if (mindMapController.isWebViewReady) {
mindMapController.webViewController
.runJavaScript('captureImage()');
},
),
);
}
},
} else {
mindMapController.webViewController
.setNavigationDelegate(
NavigationDelegate(
onPageFinished: (String url) {
mindMapController.isWebViewReady = true;
mindMapController.webViewController
.runJavaScript('captureImage()');
},
),
);
}
}
: null,
),
]),
],
@ -180,6 +198,7 @@ class _ShareBottomSheetState extends State<ShareBottomSheet> {
Widget _box(List<Widget> children) {
return Container(
margin: EdgeInsets.only(bottom: 10.w),
clipBehavior: Clip.hardEdge,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(12.r),
@ -201,6 +220,7 @@ class _ShareBottomSheetState extends State<ShareBottomSheet> {
child: Container(
padding: EdgeInsets.symmetric(horizontal: 12.w, vertical: 15.w),
decoration: BoxDecoration(
color: onTap != null ? null : Colors.grey[200],
border: isBorder
? Border(
bottom: BorderSide(

Loading…
Cancel
Save