flutter如何实现音频播放
在Flutter中如何实现音频播放功能?需要使用哪个插件或者原生代码?能否提供简单的代码示例说明如何加载本地音频文件和网络音频流?播放过程中如何控制暂停、继续和音量调节?是否需要处理后台播放或锁屏控制?不同平台(iOS/Android)的实现是否有差异?
2 回复
Flutter 中实现音频播放主要有以下几种方式:
-
audioplayers 插件(最常用):
- 支持播放本地和网络音频
- 基本用法:
final player = AudioPlayer(); await player.play(UrlSource('https://example.com/audio.mp3'));- 可控制暂停、音量、进度等
-
just_audio 插件(功能更强大):
- 支持高级功能如循环播放、播放列表
- 适合复杂音频应用
-
其他方式:
- 使用
video_player播放音频(不推荐) - 原生集成(适合特殊需求)
- 使用
建议步骤:
- 在 pubspec.yaml 添加依赖
- 配置安卓/iOS 权限
- 实现基本播放控制
- 处理后台播放(需要额外配置)
推荐先用 audioplayers 快速上手,需要高级功能时再考虑 just_audio。注意网络音频需要网络权限,本地文件需要存储权限。
更多关于flutter如何实现音频播放的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中实现音频播放,可以使用以下几种常用方式:
1. audioplayers 包(推荐)
这是最常用的音频播放库,支持本地和网络音频。
安装依赖:
dependencies:
audioplayers: ^5.0.0
基本使用:
import 'package:audioplayers/audioplayers.dart';
class AudioPlayerPage extends StatefulWidget {
@override
_AudioPlayerPageState createState() => _AudioPlayerPageState();
}
class _AudioPlayerPageState extends State<AudioPlayerPage> {
final AudioPlayer audioPlayer = AudioPlayer();
bool isPlaying = false;
Duration duration = Duration.zero;
Duration position = Duration.zero;
@override
void initState() {
super.initState();
// 监听播放状态
audioPlayer.onPlayerStateChanged.listen((state) {
setState(() {
isPlaying = state == PlayerState.playing;
});
});
// 监听音频时长
audioPlayer.onDurationChanged.listen((newDuration) {
setState(() {
duration = newDuration;
});
});
// 监听播放进度
audioPlayer.onPositionChanged.listen((newPosition) {
setState(() {
position = newPosition;
});
});
}
// 播放网络音频
Future<void> playAudio() async {
await audioPlayer.play(UrlSource('https://example.com/audio.mp3'));
}
// 播放本地音频
Future<void> playLocalAudio() async {
await audioPlayer.play(AssetSource('audios/sample.mp3'));
}
// 暂停
Future<void> pauseAudio() async {
await audioPlayer.pause();
}
// 停止
Future<void> stopAudio() async {
await audioPlayer.stop();
}
// 调整进度
Future<void> seekAudio(Duration position) async {
await audioPlayer.seek(position);
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
children: [
// 进度条
Slider(
min: 0,
max: duration.inSeconds.toDouble(),
value: position.inSeconds.toDouble(),
onChanged: (value) {
seekAudio(Duration(seconds: value.toInt()));
},
),
// 控制按钮
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
IconButton(
icon: Icon(isPlaying ? Icons.pause : Icons.play_arrow),
onPressed: () {
if (isPlaying) {
pauseAudio();
} else {
playAudio();
}
},
),
IconButton(
icon: Icon(Icons.stop),
onPressed: stopAudio,
),
],
),
],
),
);
}
@override
void dispose() {
audioPlayer.dispose();
super.dispose();
}
}
2. just_audio 包
如果需要更高级的音频功能,可以使用 just_audio:
dependencies:
just_audio: ^0.9.35
import 'package:just_audio/just_audio.dart';
final player = AudioPlayer();
// 播放音频
await player.setUrl('https://example.com/audio.mp3');
await player.play();
// 循环播放
player.setLoopMode(LoopMode.one);
3. 权限配置
在 android/app/src/main/AndroidManifest.xml 中添加网络权限:
<uses-permission android:name="android.permission.INTERNET" />
主要特性
- 支持本地和网络音频
- 后台播放
- 音量控制
- 进度控制
- 播放状态监听
audioplayers 是最简单易用的选择,适合大多数音频播放需求。

