我正在使用 audioplayers: ^0.18.0
在屏幕出现时播放音频。
这是在initstate中调用的播放音频的代码:
void initState() {
startTimer();
playLocalAsset();
super.initState();
}
这是调用播放函数:
AudioPlayer player;
Future<AudioPlayer> playLocalAsset() async {
AudioCache cache = new AudioCache();
//At the next line, DO NOT pass the entire reference such as assets/yes.mp3. This will not work.
//Just pass the file name only.
return await cache.play("audio.wav");
}
我想在 onPressed() 中停止它:
onPressed: () {
// this is where stop audio should be used
Navigator.push(
context,
MaterialPageRoute(
builder: (context) {
return Homepage(
device: widget.device,
);
},
),
);
},
当我按下我在 Flutter 应用程序中制作的取消按钮时,如何停止音频声音。我不能称之为 Future 来阻止它,请帮助我。
答案 0 :(得分:0)
娜比亚萨尔曼
我 1 年前制作了一个音频播放器。我真的不知道我在做什么。我只是想做点什么。
我在这里复制了我的代码。希望能帮到你。
您可以自由使用此代码。这段代码是在 Flutter 2.2 之前写的,所以可能会因为 null 安全而出现一些错误。
class _SongsPage extends State<SongsPage> {
List<String> pictures = <String>["assets/images/thespectre.jpg", "assets/images/home.jpg", "assets/images/alone.jpg", "assets/images/lostf.jpg", "assets/images/breakingme.png", "assets/images/cry.jpg", "assets/images/onelife.jpg", "assets/images/coming.jpg", "assets/images/allnight.jpg", "assets/images/wildest.jpg", "assets/images/lovers.jpg", "assets/images/nothing.jpg"];
List<String> songname = <String>["The Spectre", "Home", "Alone", "Don't Leave Me Now", "Breaking Me", "Cry", "One Life", "Coming Home", "All Night", "Wildest Dream", "Lovers For The Weekend", "Nothing Stopping Me"];
List<String> performer = <String>["Alan Walker", "Martin Garrix", "Marshmello", "Lost Frequencies", "Topic", "Gryffin", "Mike Perry", "Dimitri Vangelis & Wyman", "Afrojack", "Thomas Gold", "John De Sohn", "Vicetone"];
List<String> song = <String>['TheSpectre.mp3', 'Home.mp3', 'Alone.mp3', 'DontLeaveMeNow.mp3', 'BreakingMe.mp3', 'Cry.mp3', 'OneLife.mp3', 'ComingHome.mp3', 'AllNight.mp3', 'WildestDream.mp3', 'LoversForTheWeekend.mp3', 'NothingStoppingMe.mp3'];
bool isPlaying = false;
bool isLiked = false;
int index = 0;
Duration _duration = new Duration();
Duration _position = new Duration();
AudioPlayer advancedPlayer;
AudioCache audioCache;
_SongsPage(int indexer){
index = indexer;
}
@override
void initState() {
super.initState();
initPlayer();
}
void initPlayer() {
advancedPlayer = new AudioPlayer();
audioCache = new AudioCache(fixedPlayer: advancedPlayer);
advancedPlayer.durationHandler = (d) => setState(() {
_duration = d;
});
advancedPlayer.positionHandler = (p) => setState(() {
_position = p;
});
}
String localFilePath;
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
decoration: BoxDecoration(
gradient: LinearGradient(
begin: Alignment.topLeft,
end: Alignment.bottomRight,
colors: [kbackgroundcolorpink, kbackgroundcolorblue],
tileMode: TileMode.repeated,
),
),
child: Column(
children: <Widget>[
Expanded(
flex: 10,
child: Column(
children: <Widget>[
//Picture
Container(
margin: EdgeInsets.only(top: 120),
width: 200,
height: 200,
decoration: BoxDecoration(
boxShadow: [
BoxShadow(
color: kblack.withOpacity(0.4),
spreadRadius: 3,
blurRadius: 4,
offset: Offset(3, 2),
),
],
),
child: Image.asset(pictures[index]),
),
//Song and Performer
Container(
margin: EdgeInsets.only(top: 20),
height: 80,
child: Column(
children: <Widget>[
Text(songname[index], style: kheadlinesong),
Text(performer[index], style: kheadlineperformer),
],
),
),
//Timer
Container(
padding: EdgeInsets.only(right: 36),
child: Align(
alignment: Alignment.centerRight,
child: Text((_position.inMinutes).toString() + ":" + (_position.inSeconds - (_position.inMinutes * 60)).toString().padLeft(2, "0") + " / " + (_duration.inMinutes).toString() + ":" + (_duration.inSeconds - (_duration.inMinutes * 60)).toString().padLeft(2, "0"), textAlign: TextAlign.right, style: kheadlineperformer),
),
),
//Line
Container(
padding: EdgeInsets.only(right: 12, left: 12),
child: Slider(
activeColor: kbackgroundcolorpink,
inactiveColor: kbackgroundcolorblue,
value: _position.inSeconds.toDouble(),
min: 0.0,
max: _duration.inSeconds.toDouble(),
onChanged: (double value) {
setState(() {
seekToSecond(value.toInt());
value = value;
});
}),
),
],
),
),
Expanded(
flex: 3,
child: Container(
child: Column(
children: <Widget>[
Container(
padding: EdgeInsets.only(bottom: 15),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Spacer(),
Spacer(),
IconButton(
icon: PreviousIcon,
onPressed: () {PreviousIconClick();},
),
Spacer(),
IconButton(
icon: Icon(isPlaying ? PauseIcon : PlayIcon2, color: kwhite, size: 40),
onPressed: () {PausePlayIconClick();},
),
Spacer(),
IconButton(
icon: NextIcon,
onPressed: () {NextIconClick();},
),
Spacer(),
Spacer(),
],
),
),
Container(
padding: EdgeInsets.only(top: 15),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Spacer(),
IconButton(
icon: Icon(isLiked ? LikeIcon2 : LikeIcon, color: kwhite, size: 26),
onPressed: () {LikeIconClick();},
),
Spacer(),
IconButton(
icon: ShareIcon,
onPressed: () {ShareIconClick();},
),
Spacer(),
IconButton(
icon: Icon(ReplayIcon, color: isPlaying ? kbackgroundcolorpink : kwhite, size: 26),
onPressed: () {ReplayIconClick();},
),
Spacer(),
IconButton(
icon: AddToListIcon,
onPressed: () {AddIconClick();},
),
Spacer(),
],
),
),
],
),
),
),
],
),
),
);
}
void seekToSecond(int second) {
Duration newDuration = Duration(seconds: second);
advancedPlayer.seek(newDuration);
}
void PreviousIconClick(){
if(index == 0){
index = index;
Playing();
}
else {
index--;
Playing();
}
}
void NextIconClick(){
if (index == song.length - 1){
index = 0;
Playing();
}
else{
index++;
Playing();
}
}
void LikeIconClick(){
if(isLiked){
setState(() {
isLiked = false;
});
}
else{
setState(() {
isLiked = true;
});
}
}
void ReplayIconClick(){
}
void AddIconClick(){
}
void ShareIconClick(){
}
void Playing(){
audioCache.play(song[index]);
setState(() {
isPlaying = true;
});
}
void PausePlayIconClick(){
if(isPlaying){
advancedPlayer.pause();
setState(() {
isPlaying = false;
});
}
else{
audioCache.play(song[index]);
setState(() {
isPlaying = true;
});
}
}
}
这看起来像这样,并且工作正常。
答案 1 :(得分:-1)
为 play
和 stop
初始化函数
AudioPlayer player = new AudioPlayer();
AudioCache audioCache;
String mp3Uri = "audio.wav";
void _playSound() {
audioCache = new AudioCache(fixedPlayer: player);
audioCache.play("audio.wav");
}
void _stopSound() {
player.stop();
}
现在在 initState 和 onPressed 内部调用 _playSound
函数调用 _stopSound
函数