0
import 'dart:io';

import 
'package:flutter/material.dart';
  import 'package:flutter_audio_query/flutter_audio_query.dart';
import 'package:just_audio/just_audio.dart';

class MusicPlayer extends 
StatefulWidget {
   SongInfo songInfo;
  Function changeTrack;
  final GlobalKey<MusicPlayerState> key;  
MusicPlayer{this.songInfo,this.changeTrack,this.key}):super(key: key);
 MusicPlayerState 

  createState()=>MusicPlayerState();
}
                             
class MusicPlayerState extends State<MusicPlayer> {
   double minimumValue=0.0, 
      maximumValue=0.0, 
  currentValue=0.0;
     String currentTime='', 
   endTime='';
    bool isPlaying=false;
    final AudioPlayer 
 player=AudioPlayer();

   void initState()  {
super.initState();
setSong(widget.songInfo);
  }
    void dispose()  {
super.dispose();
player?.dispose();
    }

  void changeTrack(bool isNext) {
       if(isNext)  {
       if(currentIndex!=songs.length-1)  {
       currentIndex++;
     }
     } else  {
  if(currentIndex!=0) {
    currentIndex--;
      }
     }
     key.currentState.setSong(songs[currentIndex]);
  }

   void setSong(SongInfo songInfo) async {
widget.songInfo=songInfo;
await player.setUrl(widget.songInfo.uri);
currentValue=minimumValue;
maximumValue=player.duration.inMilliseconds.toDouble();
setState(() {
  currentTime=getDuration(currentValue);
  endTime=getDuration(maximumValue);
});
isPlaying=false;
changeStatus();
player.positionStream.listen((duration) {
  currentValue=duration.inMilliseconds.toDouble();
     
 if(currentValue>=maximumValue) {
 widget.changeTrack(true);.          
   }
  setState(() {
    currentTime=getDuration(currentValue);
  });
});
    }
     void changeStatus() {
        setState(() {
  isPlaying=!isPlaying;
      });
     if(isPlaying) {
  player.play();
      } else  {
  player.pause();
     }
     }
       String getDuration(double value)  {
Duration duration=Duration(milliseconds: value.round());

return [duration.inMinutes, duration.inSeconds].map((element)=>element.remainder(60).toString().padLeft(2, '0')).join(':');
  }
     Slider(
 inactiveColor: 
Colors.black12,      
 activeColor: 
Colors.black,    
    min: minimumValue,      
    max: maximumValue,       
 value: currentValue,      
onChanged: (value) {
    currentValue=value;
    
 if(currentValue>=maximumValue) {
 widget.changeTrack(true);
}

player.seek(Duration(milliseconds: currentValue.round()));
},),

当我将歌曲的滑块拖动到持续时间的末尾时,它会跳过一两首歌曲并带来错误,但如果我从 player.positionstream.listen 函数中删除 if (currentvalue >= maximum value) 它拖动时播放下一首曲目,但如果滑块在不拖动的情况下达到歌曲的最大持续时间,则返回错误行 166 pos 15: 'value >= min && value <= max': is not true。请问我需要你的帮助来解决这个错误

4

0 回答 0