// ignore_for_file: unused_element import 'dart:io'; import 'package:didvan/config/theme_data.dart'; import 'package:didvan/constants/app_icons.dart'; import 'package:didvan/models/requests/studio.dart'; import 'package:didvan/models/studio_details_data.dart'; import 'package:didvan/services/media/media.dart'; import 'package:didvan/services/network/request.dart'; import 'package:didvan/services/network/request_helper.dart'; import 'package:didvan/views/ai/widgets/voice_message_view.dart'; import 'package:didvan/views/podcasts/studio_details/studio_details_state.dart'; import 'package:didvan/views/widgets/didvan/icon_button.dart'; import 'package:flutter/material.dart'; import 'package:just_audio/just_audio.dart'; import 'package:provider/provider.dart'; import 'package:voice_message_package/voice_message_package.dart'; class AudioWidget extends StatelessWidget { final String? audioUrl; final File? audioFile; final int id; final StudioDetailsData? audioMetaData; final Function()? deleteClidk; const AudioWidget({ Key? key, this.audioUrl, this.audioFile, required this.id, this.audioMetaData, this.deleteClidk, }) : super(key: key); @override Widget build(BuildContext context) { return MyVoiceMessageView( size: 32, controller: VoiceController( audioSrc: audioUrl != null ? '${RequestHelper.baseUrl + audioUrl!}?accessToken=${RequestService.token}' : audioFile!.path, onComplete: () { /// do something on complete }, onPause: () { /// do something on pause }, onPlaying: () { /// do something on playing }, onError: (err) { /// do somethin on error }, isFile: audioFile != null, maxDuration: const Duration(seconds: 10), ), innerPadding: 0, cornerRadius: 20, circlesColor: Theme.of(context).colorScheme.primary, activeSliderColor: Theme.of(context).colorScheme.primary, backgroundColor: Colors.transparent, trashClick: deleteClidk, ); } } class _AudioControllerButton extends StatelessWidget { final String? audioUrl; final File? audioFile; final int id; final StudioDetailsData? audioMetaData; const _AudioControllerButton({ Key? key, this.audioUrl, this.audioFile, required this.id, this.audioMetaData, }) : super(key: key); bool get _nowPlaying => MediaService.audioPlayerTag == (audioMetaData != null ? '${audioMetaData!.type}-$id' : 'message-$id'); @override Widget build(BuildContext context) { return StreamBuilder( stream: MediaService.audioPlayer.playerStateStream, builder: (context, snapshot) { return DidvanIconButton( icon: MediaService.audioPlayer.playing && _nowPlaying ? DidvanIcons.pause_circle_solid : DidvanIcons.play_circle_solid, gestureSize: 36, color: Theme.of(context).colorScheme.focusedBorder, onPressed: () async { if (audioMetaData?.type == 'podcast') { final state = context.read(); if (MediaService.currentPodcast == null) { await state.getStudioDetails( id, args: const StudioRequestArgs(page: 0, type: 'podcast'), ); } } if (snapshot.data == null && _nowPlaying && MediaService.audioPlayer.playing) { return; } if (audioMetaData != null) { MediaService.currentPodcast = audioMetaData; } MediaService.handleAudioPlayback( audioSource: audioFile?.path ?? audioUrl, id: id, isNetworkAudio: audioFile == null, isVoiceMessage: audioMetaData == null, ); }, ); }); } }