You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
143 lines
4.7 KiB
143 lines
4.7 KiB
import 'package:flutter/material.dart';
|
|
import 'package:flutter_easyloading/flutter_easyloading.dart';
|
|
import 'package:get/get.dart';
|
|
import 'package:just_audio/just_audio.dart';
|
|
|
|
import '../../../data/services/ai_service.dart';
|
|
import '../../../data/services/db/sqflite_api.dart';
|
|
import '../../../data/services/volcano_ai_service.dart';
|
|
import 'meeting_controller.dart';
|
|
import 'meeting_details_controller.dart';
|
|
|
|
class MeetingEditController extends GetxController
|
|
with GetSingleTickerProviderStateMixin {
|
|
late AiService _aiService;
|
|
|
|
final MeetingController meetingController = Get.find<MeetingController>();
|
|
final MeetingDetailsController meetingDetailsController =
|
|
Get.find<MeetingDetailsController>();
|
|
|
|
late AnimationController lottieController;
|
|
|
|
late TextEditingController titleController;
|
|
late TextEditingController contentController;
|
|
|
|
final AudioPlayer audioPlayer = AudioPlayer();
|
|
|
|
int creationTime = 0;
|
|
|
|
RxString address = ''.obs;
|
|
String _longitude = '';
|
|
String _latitude = '';
|
|
|
|
int id = 0;
|
|
|
|
RxBool isPlay = false.obs;
|
|
|
|
@override
|
|
void onInit() {
|
|
super.onInit();
|
|
lottieController = AnimationController(vsync: this);
|
|
final Map<String, dynamic> args = Get.arguments ?? {};
|
|
id = args['id'];
|
|
_getDataDetails();
|
|
}
|
|
|
|
@override
|
|
void onClose() {
|
|
lottieController.dispose();
|
|
titleController.dispose();
|
|
contentController.dispose();
|
|
audioPlayer.dispose();
|
|
super.onClose();
|
|
}
|
|
|
|
void _getDataDetails() async {
|
|
titleController = TextEditingController(
|
|
text: meetingDetailsController.meetingData.value.title,
|
|
);
|
|
contentController = TextEditingController(
|
|
text: meetingDetailsController.dataDetails.value.content,
|
|
);
|
|
creationTime = meetingDetailsController.meetingData.value.creationtime;
|
|
address.value = meetingDetailsController.meetingData.value.address;
|
|
_longitude = meetingDetailsController.meetingData.value.longitude;
|
|
_latitude = meetingDetailsController.meetingData.value.latitude;
|
|
audioPlayer.setAudioSource(
|
|
AudioSource.file(meetingDetailsController.dataDetails.value.audio));
|
|
audioPlayer.playerStateStream.listen((state) async {
|
|
if (state.processingState == ProcessingState.completed) {
|
|
await audioPlayer.seek(Duration.zero);
|
|
audioPlayer.pause();
|
|
lottieController.stop();
|
|
isPlay.value = false;
|
|
}
|
|
});
|
|
}
|
|
|
|
void start() async {
|
|
if (isPlay.value) {
|
|
lottieController.stop();
|
|
audioPlayer.pause();
|
|
isPlay.value = false;
|
|
} else {
|
|
lottieController.repeat();
|
|
audioPlayer.play();
|
|
isPlay.value = true;
|
|
}
|
|
}
|
|
|
|
void confirm() async {
|
|
EasyLoading.show();
|
|
_aiService = Get.find<VolcanoAIService>();
|
|
String aiSummary = await _aiService.sendMessage(
|
|
systemPrompt: '',
|
|
messages: [
|
|
{'role': 'user', 'content': contentController.text},
|
|
{'role': 'user', 'content': '帮我总结一下这次会议'},
|
|
],
|
|
);
|
|
String content = contentController.text;
|
|
String firstContent =
|
|
content.length >= 30 ? content.substring(0, 30) : content;
|
|
String title = titleController.text.isNotEmpty
|
|
? titleController.text
|
|
: meetingDetailsController.meetingData.value.title;
|
|
Map<String, Object?> data = {
|
|
'title': title,
|
|
'firstContent': firstContent.replaceAll("\n", ""),
|
|
'seconds': meetingDetailsController.seconds,
|
|
'content': contentController.text,
|
|
'aisummary': aiSummary,
|
|
'address': address.value,
|
|
'longitude': _longitude,
|
|
'latitude': _latitude,
|
|
};
|
|
final result = await SqfliteApi.editMeeting(id, data);
|
|
if (result != null) {
|
|
int index = meetingController.dataList.indexWhere(
|
|
(item) => item['id'] == id,
|
|
);
|
|
if (index != -1) {
|
|
final dataMap =
|
|
Map<String, dynamic>.from(meetingController.dataList[index]);
|
|
dataMap['title'] = title;
|
|
dataMap['content'] = firstContent.replaceAll("\n", "");
|
|
dataMap['seconds'] = meetingDetailsController.seconds;
|
|
dataMap['address'] = address.value;
|
|
meetingController.dataList[index] = dataMap;
|
|
}
|
|
meetingDetailsController.meetingData.value.title = title;
|
|
meetingDetailsController.meetingData.value.address = address.value;
|
|
meetingDetailsController.meetingData.value.longitude = _longitude;
|
|
meetingDetailsController.meetingData.value.latitude = _latitude;
|
|
meetingDetailsController.dataDetails.value.content =
|
|
contentController.text;
|
|
meetingDetailsController.dataDetails.value.aisummary = aiSummary;
|
|
meetingDetailsController.meetingData.refresh();
|
|
meetingDetailsController.dataDetails.refresh();
|
|
Get.back();
|
|
}
|
|
EasyLoading.dismiss();
|
|
}
|
|
}
|
|
|