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(); final MeetingDetailsController meetingDetailsController = Get.find(); 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 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(); 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 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.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(); } }