Поиск аудио не работает с пакетом Audioplayers
Мне нужно сделать приложение для прослушивания аудио, и для этого нужно реализовать искатель. Теперь я могу слушать аудио, а также могу приостановить его, но когда я ищу аудио, оно начинается снова. Для этого я использовал версию пакета Audioplayers(https://pub.dev/packages/audioplayers): ^0.20.1.
import 'package:audioplayers/audioplayers.dart';
import 'package:flutter/material.dart';
class PlayAudio extends StatefulWidget {
const PlayAudio({Key? key}) : super(key: key);
@override
State<PlayAudio> createState() => _PlayAudioState();
}
class _PlayAudioState extends State<PlayAudio> {
var value=0.0;
bool isPlaying=false;
Duration duration=const Duration();
Duration position=const Duration();
AudioPlayer audioPlayer=AudioPlayer();
// AudioPlayer player = AudioPlayer();
@override
void initState() {
// TODO: implement initState
super.initState();
audioPlayer.onPlayerStateChanged.listen((event) {
setState((){
isPlaying=event==PlayerState.PLAYING;
});
});
///listen to audio duration
audioPlayer.onDurationChanged.listen((event) {
setState((){
duration=event;
});
});
audioPlayer.onAudioPositionChanged.listen((event) {
setState((){
position=event;
});
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
InkWell(
onTap: ()async{
if(isPlaying){
await audioPlayer.pause();
}else if(!isPlaying){
String url="https://www.learningcontainer.com/wp-content/uploads/2020/02/Kalimba.mp3";
await audioPlayer.play(url);
}
},
child: Container(
color: Colors.red,
child: const Padding(
padding: EdgeInsets.all(8.0),
child: Text("play Audio"),
),
),
),
Slider.adaptive(
min: 0.0,
value: position.inSeconds.toDouble(),
max: 120,
onChanged: (value1)async{
Duration newDuration = Duration(seconds: value1.toInt());
await audioPlayer.seek(newDuration);
}),
Text(formatTime(position)),
Text(formatTime(duration-position)),
],
),
),
);
}
String formatTime(Duration duration){
String twoDigits(int n)=>n.toString().padLeft(2,"0");
final hours=twoDigits(duration.inHours);
final minutes=twoDigits(duration.inMinutes.remainder(60));
final seconds=twoDigits(duration.inSeconds.remainder(60));
return [
if(duration.inHours>0) hours,minutes,seconds
].join(":");
}
}
когда я проверил это на симуляторе IOS, он работал нормально, но на реальном устройстве Android он показал проблему.