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();
  }

Что пошло не так? Не знаю, что случилось, перепроверил со старыми версиями проекта. За последний день на этих двух страницах не было сделано никаких изменений. Я удалил свое приложение и использовал более старую версию, но та же проблема возникает со всеми версиями моего проекта.

0 ответов

Другие вопросы по тегам