Browse Source

修改会议助手

newdev_shunjiawei
tanlongsheng 2 years ago
parent
commit
db7c98735b
  1. 20
      lib/modules/meeting/controllers/meeting_controller.dart
  2. 10
      lib/modules/meeting/controllers/meeting_record_controller.dart
  3. 94
      lib/modules/meeting/views/meeting_view.dart

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

@ -47,4 +47,24 @@ class MeetingController extends GetxController {
isLoadingMore = true; isLoadingMore = true;
} }
} }
// 修改标题
void editMeetingTitle(int id, String title) async {
if (title.isEmpty) return;
SqfliteApi.editMeetingTitle(id, title);
int index = dataList.indexWhere((item) => item['id'] == id);
if (index != -1) {
final dataMap = Map<String, dynamic>.from(dataList[index]);
dataMap['title'] = title;
dataList[index] = dataMap;
}
Get.back();
}
// 删除数据
void deleteMeeting(int id) {
dataList.removeWhere((item) => item['id'] == id);
// 删除数据库中的记录
SqfliteApi.deleteMeeting(id);
}
} }

10
lib/modules/meeting/controllers/meeting_record_controller.dart

@ -5,9 +5,12 @@ import 'package:get/get.dart';
import '../../../data/services/asr_service.dart'; import '../../../data/services/asr_service.dart';
import '../../../data/services/db/sqflite_api.dart'; import '../../../data/services/db/sqflite_api.dart';
import 'meeting_controller.dart';
class MeetingRecordController extends GetxController class MeetingRecordController extends GetxController
with GetSingleTickerProviderStateMixin { with GetSingleTickerProviderStateMixin {
final MeetingController meetingController = Get.find<MeetingController>();
late AnimationController lottieController; late AnimationController lottieController;
late AsrService _asrService; late AsrService _asrService;
@ -113,6 +116,13 @@ class MeetingRecordController extends GetxController
}; };
final result = await SqfliteApi.insertMeeting(data); final result = await SqfliteApi.insertMeeting(data);
if (result != null) { if (result != null) {
meetingController.dataList.insert(0, {
'id': result,
'title': title,
'content': firstContent,
'seconds': seconds.value,
'creationtime': creationTime,
});
Get.back(); Get.back();
} }
} }

94
lib/modules/meeting/views/meeting_view.dart

@ -97,6 +97,50 @@ class MeetingView extends GetView<MeetingController> {
Widget _item(BuildContext context, bool isDarkMode, MeetingModel data) { Widget _item(BuildContext context, bool isDarkMode, MeetingModel data) {
return GestureDetector( return GestureDetector(
onTap: () {}, onTap: () {},
onLongPressStart: (details) {
RenderBox? renderBox =
Overlay.of(context).context.findRenderObject() as RenderBox;
final RelativeRect position = RelativeRect.fromRect(
Rect.fromLTRB(
details.globalPosition.dx,
details.globalPosition.dy,
details.globalPosition.dx + 110, // 菜单显示位置X轴坐标
details.globalPosition.dy - 40, // 菜单显示位置Y轴坐标
),
Offset.zero & renderBox.size,
);
showMenu(
context: context,
position: position,
color: isDarkMode ? AppColors.cardBackground : Colors.white,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12.r),
),
items: [
_popupMenuEntry(
Icon(
Icons.edit_calendar,
color: isDarkMode ? Colors.white : Colors.black87,
),
'编辑',
isDarkMode ? Colors.white : Colors.black87,
() {
controller.titleController.text = data.title;
_bottomSheet(context, isDarkMode, id: data.id);
},
),
_popupMenuEntry(
const Icon(Icons.delete_outline, color: Colors.red),
'删除',
isDarkMode ? Colors.white : Colors.black87,
() {
controller.deleteMeeting(data.id);
},
),
],
);
},
child: Container( child: Container(
padding: EdgeInsets.symmetric(horizontal: 15.w, vertical: 8.w), padding: EdgeInsets.symmetric(horizontal: 15.w, vertical: 8.w),
margin: EdgeInsets.symmetric(vertical: 5.w), margin: EdgeInsets.symmetric(vertical: 5.w),
@ -172,7 +216,35 @@ class MeetingView extends GetView<MeetingController> {
); );
} }
void _bottomSheet(BuildContext context, bool isDarkMode) { PopupMenuEntry _popupMenuEntry(
Icon icon,
String title,
Color color,
Function() onTap,
) {
return PopupMenuItem(
onTap: onTap,
child: SizedBox(
width: 120.w,
child: Row(
children: [
icon,
8.horizontalSpace,
Text(
title,
style: TextStyle(color: color),
),
],
),
),
);
}
void _bottomSheet(
BuildContext context,
bool isDarkMode, {
int? id,
}) {
showModalBottomSheet( showModalBottomSheet(
context: context, context: context,
isScrollControlled: true, isScrollControlled: true,
@ -188,7 +260,7 @@ class MeetingView extends GetView<MeetingController> {
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
Text( Text(
'录音标题(非必填)', id != null ? '修改录音标题(非必填)' : '录音标题(非必填)',
style: TextStyle( style: TextStyle(
color: isDarkMode ? Colors.white : Colors.black87, color: isDarkMode ? Colors.white : Colors.black87,
fontSize: 16.sp, fontSize: 16.sp,
@ -266,14 +338,18 @@ class MeetingView extends GetView<MeetingController> {
onTap: () { onTap: () {
int time = DateTime.now().millisecondsSinceEpoch; int time = DateTime.now().millisecondsSinceEpoch;
String title = controller.titleController.text; String title = controller.titleController.text;
if (title.isEmpty) { if (id != null) {
title = controller.editMeetingTitle(id, title);
'${DateUtil.formatDateMs(time, format: DateFormats.y_mo_d)} 录音'; } else {
if (title.isEmpty) {
title =
'${DateUtil.formatDateMs(time, format: DateFormats.y_mo_d)} 录音';
}
Get.back();
Get.toNamed(Routes.meetingRecord, arguments: {
'title': title,
});
} }
Get.back();
Get.toNamed(Routes.meetingRecord, arguments: {
'title': title,
});
}, },
child: Container( child: Container(
width: 120.w, width: 120.w,

Loading…
Cancel
Save