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 '../model/meeting_details_model.dart'; import '../model/meeting_model.dart'; class MeetingDetailsController extends GetxController with GetSingleTickerProviderStateMixin { late AnimationController lottieController; final AudioPlayer audioPlayer = AudioPlayer(); int id = 0; RxBool isLoading = true.obs; Rx meetingData = MeetingModel().obs; Rx dataDetails = MeetingDetailsModel().obs; int seconds = 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(); audioPlayer.dispose(); super.onClose(); } void _getDataDetails() async { final data = await SqfliteApi.getMeetingDetails(id); meetingData.value = MeetingModel.fromJson(data); dataDetails.value = MeetingDetailsModel.fromJson(data['details']); audioPlayer.setAudioSource(AudioSource.file(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; } }); isLoading.value = false; } void start() async { if (isPlay.value) { lottieController.stop(); audioPlayer.pause(); isPlay.value = false; } else { lottieController.repeat(); audioPlayer.play(); isPlay.value = true; } } }