import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:just_audio/just_audio.dart'; import '../../../data/services/db/sqflite_api.dart'; import '../../../data/services/speech_impl/volcano_tts_api_service.dart'; import 'meeting_controller.dart'; import 'meeting_details_controller.dart'; class MeetingEditController extends GetxController with GetSingleTickerProviderStateMixin { 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; 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; audioPlayer.setAudioSource( BytesAudioSource(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(); await audioPlayer.seek(Duration.zero); audioPlayer.play(); isPlay.value = true; } } void confirm() async { 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, }; 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; meetingController.dataList[index] = dataMap; } meetingDetailsController.meetingData.value.title = title; meetingDetailsController.dataDetails.value.content = contentController.text; meetingDetailsController.meetingData.refresh(); meetingDetailsController.dataDetails.refresh(); Get.back(); } } }