Flutter: звуковой запрос Flutter запускает неправильную песню
Я делаю музыкальный проигрыватель с Flutter Audio Query(я сторонняя модифицированная версия с нулевой безопасностью от этого джентльмена), и до сих пор он работал нормально. Но начиная с сегодняшнего дня, когда я нажимаю песню в списке, она играет другую песню. Я использую Just Audio, и проблемы здесь нет. я добавил
print
чтобы увидеть, что происходит, когда я нажимаю песню, и что играет. Вот логи терминала:
//This is what was pressed
I/flutter (12413): 3
I/flutter (12413): 3
I/flutter (12413): 25 To Life
//Music Player page open's ignore the exception below, it connected with getting the length of the song
Another exception was thrown: type 'Null' is not a subtype of type 'double'
I/ExoPlayerImpl(12413): Init 48cbf28 [ExoPlayerLib/2.13.1] [santoni, Redmi 4X, Xiaomi, 25]
D/AudioManager(12413): getStreamVolume isRestricted mode = 0
I/OMXClient(12413): MuxOMX ctor
I/ACodec (12413): codec does not support config priority (err -2147483648)
I/ExtendedACodec(12413): no bitwidth, setting default bitwidth as 16 bits
I/ExtendedACodec(12413): no min blksize, setting default block size as 16
I/ExtendedACodec(12413): no max blksize, setting default block size as 16
I/ExtendedACodec(12413): no min frame size, setting default frame size as 0
I/ExtendedACodec(12413): no max frame size, setting default frame size as 0
I/ACodec (12413): codec does not support config priority (err -2147483648)
//Here it seems to be fine but...
I/flutter (12413): SongInfo({composer: null, artist_id: 59, album: Recovery, is_notification: false, is_ringtone: false, duration: 241586, artist: Eminem, year: null, album_id: 363, is_podcast: false, _size: 30016283, _data: /storage/9C33-6BBD/Music/Eminem/Recovery/12. 25 To Life.flac, track: 12, title: 25 To Life, bookmark: null, is_music: true, album_artwork: /storage/emulated/0/Android/data/com.android.providers.media/albumthumbs/1535901762320, _id: 145014, is_alarm: false, _display_name: 12. 25 To Life.flac, uri: content://media/external/audio/media/145014})
I/flutter (12413): 25 To Life
I/OMXClient(12413): MuxOMX ctor
I/ACodec (12413): codec does not support config priority (err -2147483648)
I/ExtendedACodec(12413): no bitwidth, setting default bitwidth as 16 bits
I/ExtendedACodec(12413): no min blksize, setting default block size as 16
I/ExtendedACodec(12413): no max blksize, setting default block size as 16
I/ExtendedACodec(12413): no min frame size, setting default frame size as 0
I/ExtendedACodec(12413): no max frame size, setting default frame size as 0
I/ACodec (12413): codec does not support config priority (err -2147483648)
D/AudioTrack(12413): Client defaulted notificationFrames to 4714 for frameCount 14144
E/DefaultAudioSink(12413): Discontinuity detected [expected 371518, got 650158]
//In the end it changes to next song and plays it
I/flutter (12413): SongInfo({composer: null, artist_id: 59, album: Relapse: Refill, is_notification: false, is_ringtone: false, duration: 319853, artist: Eminem, year: null, album_id: 364, is_podcast: false, _size: 40203456, _data: /storage/9C33-6BBD/Music/Eminem/Relapse_ Refill/Disk 01/02. 3 a.m.flac, track: 2, title: 3 a.m., bookmark: null, is_music: true, album_artwork: /storage/emulated/0/Android/data/com.android.providers.media/albumthumbs/1535901774371, _id: 145024, is_alarm: false, _display_name: 02. 3 a.m.flac, uri: content://media/external/audio/media/145024})
I/flutter (12413): 3 a.m.
Вот мой код:
SongInfo songInfo;
Function changeTrack;
final GlobalKey<MusicPlayerState> key;
MusicPlayer(
{required this.songInfo, required this.changeTrack, required this.key})
: super(key: key);
@override
MusicPlayerState createState() => MusicPlayerState();
}
class MusicPlayerState extends State<MusicPlayer> {
double minValue = 0.0;
double maxValue = 0.0;
double currentValue = 0.0;
String currentTime = '';
String endTime = '';
final AudioPlayer audioPlayer = AudioPlayer();
bool isPlaying = false;
@override
void initState() {
super.initState();
setSong(widget.songInfo);
}
void setSong(SongInfo songInfo) async {
widget.songInfo = songInfo;
await audioPlayer.setUrl(widget.songInfo.uri!);
currentValue = minValue;
maxValue = audioPlayer.duration!.inMilliseconds.toDouble();
setState(() {
currentTime = getDuration(currentValue);
endTime = getDuration(maxValue);
});
isPlaying = false;
changeStatus();
audioPlayer.positionStream.listen((duration) {
currentValue = duration.inMilliseconds.toDouble();
setState(() {
currentTime = getDuration(currentValue);
});
});
print(songInfo);
print(songInfo.title);
}
void changeStatus() {
setState(() {
isPlaying = !isPlaying;
});
if (isPlaying)
audioPlayer.play();
else
audioPlayer.pause();
}
String getDuration(double value) {
Duration duration = Duration(milliseconds: value.round());
return [duration.inMinutes, duration.inSeconds]
.map((e) => e.remainder(60).toString().padLeft(2, '0'))
.join(':');
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Colors.blueGrey,
title: Text(
'Now Playing',
style: TextStyle(color: Colors.black),
),
),
body: mainBody(),
);
}
@override
void dispose() {
super.dispose();
audioPlayer.dispose();
}
Что пошло не так? Не знаю, что случилось, перепроверил со старыми версиями проекта. За последний день на этих двух страницах не было сделано никаких изменений. Я удалил свое приложение и использовал более старую версию, но та же проблема возникает со всеми версиями моего проекта.