我正在使用 flutter assets_audio_player 包,它有一个错误。它正在播放多个音频而不是替换现有音频。我在initState()方法中尝试了很多停止播放的方法,但都没有用。我不想处理它,因为我希望能够在后台播放音频时导航到其他屏幕。
如果我不处理它在后台播放的音频实例,但当我返回再次加载相同的音频时,它不会停止播放音频,而是开始播放多个音频。
import 'package:assets_audio_player/assets_audio_player.dart';
import 'package:flutter/material.dart';
class AudioPlayer6Page extends StatefulWidget {
const AudioPlayer6Page({super.key});
@override
State<AudioPlayer6Page> createState() => _AudioPlayer6PageState();
}
class _AudioPlayer6PageState extends State<AudioPlayer6Page> {
late AssetsAudioPlayer assetsAudioPlayer;
@override
void initState() {
// TODO: implement initState
super.initState();
assetsAudioPlayer = AssetsAudioPlayer.newPlayer();
loadMedia();
}
Future<void> loadMedia() async {
try {
await assetsAudioPlayer.open(
Audio.network(
"https://s3.amazonaws.com/scifri-episodes/scifri20181123-episode.mp3"),
autoStart: false,
showNotification: true);
} catch (t) {
//mp3 unreachable
}
}
@override
void dispose() {
// TODO: implement dispose
super.dispose();
print('dispose');
}
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: Scaffold(
body: SingleChildScrollView(
child: Container(
height: MediaQuery.of(context).size.height,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Center(
child: Text('Another audio player'),
),
StreamBuilder(
stream: assetsAudioPlayer.isPlaying,
builder: (context, asyncSnapshot) {
final bool? isPlaying = asyncSnapshot.data;
return isPlaying == true
? Center(
child: IconButton(
onPressed: () {
assetsAudioPlayer.pause();
},
icon: Icon(
Icons.pause,
size: 50,
)))
: Center(
child: IconButton(
onPressed: () {
assetsAudioPlayer.play();
},
icon: Icon(
Icons.play_arrow,
size: 50,
)),
);
}),
],
),
),
),
),
);
}
}
请帮忙!