import 'package:chewie_audio/chewie_audio.dart'; import 'package:flutter/material.dart'; import 'package:sonnat/core/theme/app_colors.dart'; import 'package:sonnat/core/widgets/global_loading.dart'; import 'package:video_player/video_player.dart'; class AudioPlayer extends StatefulWidget { final String url; const AudioPlayer({super.key, required this.url}); @override State createState() => _AudioPlayerState(); } class _AudioPlayerState extends State { ChewieAudioController? chewieController; late VideoPlayerController videoPlayerController; @override void initState() { super.initState(); videoPlayerController = VideoPlayerController.network(widget.url); } Future initAudio() async { await videoPlayerController.initialize(); chewieController = ChewieAudioController( videoPlayerController: videoPlayerController, autoPlay: false, looping: false, ); return Future.value(true); } @override Widget build(BuildContext context) { return FutureBuilder( future: initAudio(), builder: (context, snapshot) { if (snapshot.hasData) { return Container( decoration: BoxDecoration( boxShadow: const [ BoxShadow( color: AppColors.gray2, blurRadius: 1, offset: Offset.zero, spreadRadius: 1, ), ], borderRadius: BorderRadius.circular(16), ), child: ClipRRect( borderRadius: BorderRadius.circular(16), child: ChewieAudio( controller: chewieController!, ), ), ); } else if (snapshot.hasError) { return const Icon(Icons.error_outline); } return const GlobalLoading(isSmallSize: true); }); } @override void dispose() { videoPlayerController.dispose(); chewieController?.dispose(); super.dispose(); } }