Flutter音频播放插件flutter_minimalist_audio_player的使用
Flutter音频播放插件flutter_minimalist_audio_player的使用
该插件是一个简单的UI实现,用于AudioPlayer插件。它仅显示一个用于播放媒体的图标按钮。
极简音频播放器还提供了淡入淡出过渡效果。
使用方法
查看示例文件夹中的示例代码。
import 'package:flutter/material.dart';
import 'package:flutter_minimalist_audio_player/flutter_minimalist_audio_player.dart';
const radios = {
"Europe 2": "https://europe2.lmn.fm/europe2.mp3",
"RTS": "https://sc.creacast.com/rts-national.mp3",
"Skyrock": "https://icecast8.play.cz/skyrock128.mp3",
"Europe 1": "https://europe1.lmn.fm/europe1.mp3"
};
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
MiniPlayer? _currentPlayer;
@override
void initState() {
super.initState();
}
// 平台消息是异步的,因此我们通过异步方法进行初始化。
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('极简音频播放器'),
),
body: Center(
child: ListView.builder(
shrinkWrap: true,
itemCount: radios.length,
itemExtent: 50,
itemBuilder: (context, index) {
return DefaultTextStyle(
style: const TextStyle().copyWith(fontSize: 25, color: Colors.amber),
child: radioWidget(radios.keys.elementAt(index), radios.values.elementAt(index)));
},
),
),
),
);
}
Widget radioWidget(String name, String url) {
return Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Icon(
Icons.radio,
color: Theme.of(context).colorScheme.primary,
),
const SizedBox(width: 5),
Text(name),
const SizedBox(width: 5),
MinimalistAudioPlayer(
media: url,
beforeStart: (p) async {
// 在开始播放前,先停止当前播放器并淡出。
await _currentPlayer?.fadeOut();
_currentPlayer = p;
},
onStop: (p) {
// 当播放器停止时,将当前播放器置为空。
if (_currentPlayer == p) _currentPlayer = null;
},
),
],
);
}
}
代码解释
-
导入必要的库:
import 'package:flutter/material.dart'; import 'package:flutter_minimalist_audio_player/flutter_minimalist_audio_player.dart';
-
定义广播电台列表:
const radios = { "Europe 2": "https://europe2.lmn.fm/europe2.mp3", "RTS": "https://sc.creacast.com/rts-national.mp3", "Skyrock": "https://icecast8.play.cz/skyrock128.mp3", "Europe 1": "https://europe1.lmn.fm/europe1.mp3" };
-
创建主应用类:
void main() { runApp(const MyApp()); } class MyApp extends StatefulWidget { const MyApp({super.key}); @override State<MyApp> createState() => _MyAppState(); }
-
定义状态类:
class _MyAppState extends State<MyApp> { MiniPlayer? _currentPlayer; @override void initState() { super.initState(); } @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar( title: const Text('极简音频播放器'), ), body: Center( child: ListView.builder( shrinkWrap: true, itemCount: radios.length, itemExtent: 50, itemBuilder: (context, index) { return DefaultTextStyle( style: const TextStyle().copyWith(fontSize: 25, color: Colors.amber), child: radioWidget(radios.keys.elementAt(index), radios.values.elementAt(index))); }, ), ), ), ); } }
-
定义单个广播电台的组件:
Widget radioWidget(String name, String url) { return Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Icon( Icons.radio, color: Theme.of(context).colorScheme.primary, ), const SizedBox(width: 5), Text(name), const SizedBox(width: 5), MinimalistAudioPlayer( media: url, beforeStart: (p) async { // 在开始播放前,先停止当前播放器并淡出。 await _currentPlayer?.fadeOut(); _currentPlayer = p; }, onStop: (p) { // 当播放器停止时,将当前播放器置为空。 if (_currentPlayer == p) _currentPlayer = null; }, ), ], ); }
更多关于Flutter音频播放插件flutter_minimalist_audio_player的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter音频播放插件flutter_minimalist_audio_player的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何使用 flutter_minimalist_audio_player
插件的示例代码。这个插件用于在 Flutter 应用中实现音频播放功能。首先,确保你已经在 pubspec.yaml
文件中添加了依赖:
dependencies:
flutter:
sdk: flutter
flutter_minimalist_audio_player: ^2.0.0 # 请注意版本号,根据实际情况调整
然后运行 flutter pub get
来安装依赖。
以下是一个简单的示例,展示如何使用 flutter_minimalist_audio_player
播放音频文件:
import 'package:flutter/material.dart';
import 'package:flutter_minimalist_audio_player/flutter_minimalist_audio_player.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Audio Player Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: AudioPlayerScreen(),
);
}
}
class AudioPlayerScreen extends StatefulWidget {
@override
_AudioPlayerScreenState createState() => _AudioPlayerScreenState();
}
class _AudioPlayerScreenState extends State<AudioPlayerScreen> {
final AudioPlayerController _audioPlayerController = AudioPlayerController();
bool _isPlaying = false;
@override
void initState() {
super.initState();
// 设置音频文件的路径,可以是本地文件或网络URL
final String audioUrl = 'https://www.example.com/audiofile.mp3';
_audioPlayerController.setSource(AudioSource.uri(Uri.parse(audioUrl)));
}
@override
void dispose() {
_audioPlayerController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Audio Player Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
_isPlaying ? 'Playing...' : 'Paused',
style: TextStyle(fontSize: 24),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () async {
if (_isPlaying) {
await _audioPlayerController.pause();
setState(() => _isPlaying = false);
} else {
await _audioPlayerController.play();
setState(() => _isPlaying = true);
}
},
child: Text(_isPlaying ? 'Pause' : 'Play'),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () async {
await _audioPlayerController.stop();
setState(() => _isPlaying = false);
},
child: Text('Stop'),
),
],
),
),
);
}
}
在这个示例中,我们创建了一个简单的 Flutter 应用,包含一个音频播放界面。以下是主要步骤:
- 初始化 AudioPlayerController:在
initState
方法中初始化AudioPlayerController
并设置音频文件的来源。 - 播放控制:使用
play
、pause
和stop
方法来控制音频的播放状态。 - UI 更新:通过
setState
方法更新 UI,以反映当前的播放状态。
这个示例展示了如何使用 flutter_minimalist_audio_player
插件的基本功能。你可以根据需要进一步扩展功能,例如处理播放完成事件、显示播放进度等。