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.
112 lines
3.4 KiB
112 lines
3.4 KiB
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 'meeting_controller.dart';
|
|
import 'meeting_details_controller.dart';
|
|
|
|
class MeetingEditController extends GetxController
|
|
with GetSingleTickerProviderStateMixin {
|
|
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;
|
|
|
|
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;
|
|
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 {
|
|
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,
|
|
};
|
|
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;
|
|
meetingController.dataList[index] = dataMap;
|
|
}
|
|
meetingDetailsController.meetingData.value.title = title;
|
|
meetingDetailsController.dataDetails.value.content =
|
|
contentController.text;
|
|
meetingDetailsController.meetingData.refresh();
|
|
meetingDetailsController.dataDetails.refresh();
|
|
Get.back();
|
|
}
|
|
}
|
|
}
|
|
|