just_audio的使用
just_audio
,它是一个用于播放音频的 Flutter 插件。
安装和导入 just_audio
要使用 just_audio
库,需要将其添加到项目的 pubspec.yaml
文件中:
dependencies:
just_audio: ^0.9.34
然后运行以下命令以安装该库:
flutter pub get
要使用 just_audio
,需要在代码中导入它:
import 'package:just_audio/just_audio.dart';
播放本地音频文件
要播放本地音频文件,需要创建 AudioPlayer
对象并调用 setFilePath
方法将音频文件的路径传递给它。
以下是一个简单的示例代码,演示了如何使用 just_audio
播放本地音频文件:
import 'package:flutter/material.dart';
import 'package:just_audio/just_audio.dart';
class AudioPlayerPage extends StatefulWidget {
@override
_AudioPlayerPageState createState() => _AudioPlayerPageState();
}
class _AudioPlayerPageState extends State<AudioPlayerPage> {
final _player = AudioPlayer();
@override
void initState() {
super.initState();
_player.setFilePath('assets/audio/sample.mp3');
}
@override
void dispose() {
_player.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Audio Player'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
IconButton(
icon: Icon(Icons.play_arrow),
onPressed: () {
_player.play();
},
),
SizedBox(height: 20),
IconButton(
icon: Icon(Icons.pause),
onPressed: () {
_player.pause();
},
),
],
),
),
);
}
}
在这个例子中,我们创建了一个 AudioPlayer
对象 _player
,并在 initState
方法中调用了 setFilePath
方法,将本地音频文件的路径传递给它。在 build
方法中,我们创建了两个按钮,一个用于播放音频,另一个用于暂停音频。当用户按下播放按钮时,我们调用 _player.play()
方法来播放音频。当用户按下暂停按钮时,我们调用 _player.pause()
方法来暂停音频。
在 dispose
方法中,我们调用 _player.dispose()
方法来释放所有资源。
播放网络音频文件
要播放网络音频文件,需要调用 setUrl
方法将音频文件的 URL 传递给 AudioPlayer
对象。以下是一个简单的示例代码,演示了如何使用 just_audio
播放网络音频文件:
import 'package:flutter/material.dart';
import 'package:just_audio/just_audio.dart';
class AudioPlayerPage extends StatefulWidget {
@override
_AudioPlayerPageState createState() => _AudioPlayerPageState();
}
class _AudioPlayerPageState extends State<AudioPlayerPage> {
final _player = AudioPlayer();
final _url = 'https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3';
@override
void initState() {
super.initState();
_player.setUrl(_url);
}
@override
void dispose() {
_player.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Audio Player'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
IconButton(
icon: Icon(Icons.play_arrow),
onPressed: () {
_player.play();
},
),
SizedBox(height: 20),
IconButton(
icon: Icon(Icons.pause),
onPressed: () {
_player.pause();
},
),
],
),
),
);
}
}
在这个例子中,我们创建了一个 AudioPlayer
对象 _player
,并在 initState
方法中调用了 setUrl
方法,将网络音频文件的 URL 传递给它。在 build
方法中,我们创建了两个按钮,一个用于播放音频,另一个用于暂停音频。当用户按下播放按钮时,我们调用 _player.play()
方法来播放音频。当用户按下暂停按钮时,我们调用 _player.pause()
方法来暂停音频。
在 dispose
方法中,我们调用 _player.dispose()
方法来释放所有资源。
播放音频流
要播放音频流,需要创建一个 AudioPlayer
对象,并调用 setAudioSource
方法来设置音频源。setAudioSource
方法可以接收多种参数类型,包括本地文件路径、网络 URL、DASH/HLS URL、以及自定义的 AudioSource
对象。以下是一个简单的示例代码,演示了如何使用 just_audio
播放音频流:
import'package:flutter/material.dart';
import 'package:just_audio/just_audio.dart';
class AudioPlayerPage extends StatefulWidget {
@override
_AudioPlayerPageState createState() => _AudioPlayerPageState();
}
class _AudioPlayerPageState extends State<AudioPlayerPage> {
final _player = AudioPlayer();
final _url = 'https://stream.radio.co/sb8ebfa4b0/listen';
@override
void initState() {
super.initState();
_player.setAudioSource(AudioSource.uri(Uri.parse(_url)));
}
@override
void dispose() {
_player.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Audio Player'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
IconButton(
icon: Icon(Icons.play_arrow),
onPressed: () {
_player.play();
},
),
SizedBox(height: 20),
IconButton(
icon: Icon(Icons.pause),
onPressed: () {
_player.pause();
},
),
],
),
),
);
}
}
在这个例子中,我们创建了一个 AudioPlayer
对象 _player
,并在 initState
方法中调用了 setAudioSource
方法,将音频流的 URL 传递给它。在 build
方法中,我们创建了两个按钮,一个用于播放音频,另一个用于暂停音频。当用户按下播放按钮时,我们调用 _player.play()
方法来播放音频。当用户按下暂停按钮时,我们调用 _player.pause()
方法来暂停音频。
在 dispose
方法中,我们调用 _player.dispose()
方法来释放所有资源。
播放音频列表
要播放音频列表,需要创建一个包含多个音频源的 ConcatenatingAudioSource
对象,并将其传递给 AudioPlayer
对象的 setAudioSource
方法。以下是一个简单的示例代码,演示了如何使用 just_audio
播放音频列表:
import 'package:flutter/material.dart';
import 'package:just_audio/just_audio.dart';
class AudioPlayerPage extends StatefulWidget {
@override
_AudioPlayerPageState createState() => _AudioPlayerPageState();
}
class _AudioPlayerPageState extends State<AudioPlayerPage> {
final _player = AudioPlayer();
final _playlist = ConcatenatingAudioSource(children: [
AudioSource.uri(Uri.parse('https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3')),
AudioSource.uri(Uri.parse('https://www.soundhelix.com/examples/mp3/SoundHelix-Song-2.mp3')),
AudioSource.uri(Uri.parse('https://www.soundhelix.com/examples/mp3/SoundHelix-Song-3.mp3')),
]);
@override
void initState() {
super.initState();
_player.setAudioSource(_playlist);
}
@override
void dispose() {
_player.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Audio Player'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
IconButton(
icon: Icon(Icons.play_arrow),
onPressed: () {
_player.play();
},
),
SizedBox(height: 20),
IconButton(
icon: Icon(Icons.pause),
onPressed: () {
_player.pause();
},
),
],
),
),
);
}
}
在这个例子中,我们创建了一个 AudioPlayer
对象 _player
,并创建了一个包含三个音频源的 ConcatenatingAudioSource
对象 _playlist
。在 initState
方法中,我们调用了 _player.setAudioSource(_playlist)
方法,将音频列表传递给 _player
对象。在 build
方法中,我们创建了两个按钮,一个用于播放音频列表,另一个用于暂停音频列表。当用户按下播放按钮时,我们调用 _player.play()
方法来播放音频列表。当用户按下暂停按钮时,我们调用 _player.pause()
方法来暂停音频列表。
在 dispose
方法中,我们调用 _player.dispose()
方法来释放所有资源。