Flutter音频播放插件kdplayer的使用
Flutter音频播放插件kdplayer的使用
获取开始
这个项目是一个新的Flutter插件包的起点,包括Android和/或iOS平台的具体实现代码。
对于如何开始使用Flutter,你可以查看我们的在线文档,其中包含教程、示例、移动开发指南以及完整的API参考。
使用kdplayer插件
以下是使用kdplayer插件的完整示例代码:
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:kdplayer/kdplayer.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({Key? key}) : super(key: key);
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
final Kdplayer _kdplayer = Kdplayer();
bool isPlaying = false;
double durationPlayer = 0.1;
double currentPlayer = 0.0;
List<String>? metadata;
[@override](/user/override)
void initState() {
super.initState();
initPlayer();
}
void initPlayer() {
// 设置媒体项
_kdplayer.setMediaItem('Radio Player',
'https://www.bensound.com/bensound-music/bensound-ukulele.mp3');
// 监听播放状态变化
_kdplayer.stateStream.listen((value) {
if (kDebugMode) {
print(value);
}
setState(() {
isPlaying = value;
});
});
// 监听元数据变化
_kdplayer.metadataStream.listen((value) {
setState(() {
metadata = value;
});
});
// 监听当前播放位置
_kdplayer.currentStream.listen((value) {
if (kDebugMode) {
print("currentStream: $value");
}
if (value < 0) return;
setState(() {
currentPlayer = value;
});
});
// 监听总时长
_kdplayer.durationtStream.listen((value) {
if (kDebugMode) {
print("durationtStream: $value");
}
setState(() {
durationPlayer = value;
});
});
}
// 将毫秒数转换为时间格式
String intToTimeLeft(double? value) {
if (value == null || value == 0 || value.isNaN) {
return '00:00';
}
var aaa = value / 1000;
var h = (aaa ~/ 3600);
var m = ((aaa - h * 3600)) ~/ 60;
var s = (aaa - (h * 3600) - (m * 60)).toInt();
String hourLeft = h.toString().length < 2 ? "0" + h.toString() : h.toString();
String minuteLeft = m.toString().length < 2 ? "0" + m.toString() : m.toString();
String secondsLeft = s.toString().length < 2 ? "0" + s.toString() : s.toString();
String result = "$hourLeft:$minuteLeft:$secondsLeft";
if (h == 0) {
result = "$minuteLeft:$secondsLeft";
}
return result;
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('插件示例应用'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
IconButton(
onPressed: () {}, icon: const Icon(Icons.skip_previous)),
IconButton(
onPressed: () {
isPlaying ? _kdplayer.pause() : _kdplayer.play();
},
icon: isPlaying
? const Icon(Icons.pause)
: const Icon(Icons.play_arrow)),
IconButton(
onPressed: () {}, icon: const Icon(Icons.skip_next)),
],
),
Slider(
value: currentPlayer,
min: 0.0,
max: durationPlayer,
onChanged: (value) {
_kdplayer.setSeekTo(value);
},
),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 20.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(intToTimeLeft(currentPlayer)),
Text(intToTimeLeft(durationPlayer)),
],
),
)
],
),
),
),
);
}
}
代码解释
-
初始化播放器
void initPlayer() { // 设置媒体项 _kdplayer.setMediaItem('Radio Player', 'https://www.bensound.com/bensound-music/bensound-ukulele.mp3');
-
监听播放状态
_kdplayer.stateStream.listen((value) { if (kDebugMode) { print(value); } setState(() { isPlaying = value; }); });
-
监听元数据
_kdplayer.metadataStream.listen((value) { setState(() { metadata = value; }); });
-
监听当前播放位置
_kdplayer.currentStream.listen((value) { if (kDebugMode) { print("currentStream: $value"); } if (value < 0) return; setState(() { currentPlayer = value; }); });
-
监听总时长
_kdplayer.durationtStream.listen((value) { if (kDebugMode) { print("durationtStream: $value"); } setState(() { durationPlayer = value; }); });
-
将毫秒数转换为时间格式
String intToTimeLeft(double? value) { if (value == null || value == 0 || value.isNaN) { return '00:00'; } var aaa = value / 1000; var h = (aaa ~/ 3600); var m = ((aaa - h * 3600)) ~/ 60; var s = (aaa - (h * 3600) - (m * 60)).toInt(); String hourLeft = h.toString().length < 2 ? "0" + h.toString() : h.toString(); String minuteLeft = m.toString().length < 2 ? "0" + m.toString() : m.toString(); String secondsLeft = s.toString().length < 2 ? "0" + s.toString() : s.toString(); String result = "$hourLeft:$minuteLeft:$secondsLeft"; if (h == 0) { result = "$minuteLeft:$secondsLeft"; } return result; }
-
构建UI
[@override](/user/override) Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar( title: const Text('插件示例应用'), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceAround, children: [ IconButton( onPressed: () {}, icon: const Icon(Icons.skip_previous)), IconButton( onPressed: () { isPlaying ? _kdplayer.pause() : _kdplayer.play(); }, icon: isPlaying ? const Icon(Icons.pause) : const Icon(Icons.play_arrow)), IconButton( onPressed: () {}, icon: const Icon(Icons.skip_next)), ], ), Slider( value: currentPlayer, min: 0.0, max: durationPlayer, onChanged: (value) { _kdplayer.setSeekTo(value); }, ), Padding( padding: const EdgeInsets.symmetric(horizontal: 20.0), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text(intToTimeLeft(currentPlayer)), Text(intToTimeLeft(durationPlayer)), ], ), ) ], ), ), ), ); }
更多关于Flutter音频播放插件kdplayer的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter音频播放插件kdplayer的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter项目中使用kdplayer
插件进行音频播放的代码示例。kdplayer
是一个用于Flutter的音频播放插件,支持多种音频格式和播放控制功能。
首先,确保你已经在pubspec.yaml
文件中添加了kdplayer
依赖:
dependencies:
flutter:
sdk: flutter
kdplayer: ^最新版本号 # 请替换为实际可用的最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,是一个简单的Flutter应用示例,演示如何使用kdplayer
进行音频播放:
import 'package:flutter/material.dart';
import 'package:kdplayer/kdplayer.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'KdPlayer Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: AudioPlayerScreen(),
);
}
}
class AudioPlayerScreen extends StatefulWidget {
@override
_AudioPlayerScreenState createState() => _AudioPlayerScreenState();
}
class _AudioPlayerScreenState extends State<AudioPlayerScreen> {
KdPlayerController? _playerController;
@override
void initState() {
super.initState();
// 初始化KdPlayerController
_playerController = KdPlayerController(
audioUrl: 'https://www.example.com/audio/sample.mp3', // 替换为你的音频URL
autoPlay: false, // 是否自动播放
looping: false, // 是否循环播放
);
// 监听播放状态变化
_playerController?.addListener(() {
setState(() {});
});
}
@override
void dispose() {
// 释放资源
_playerController?.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('KdPlayer Demo'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'播放状态: ${_playerController?.isPlaying == true ? '播放中' : '已暂停'}',
style: TextStyle(fontSize: 18),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () {
if (_playerController?.isPlaying == true) {
_playerController?.pause();
} else {
_playerController?.play();
}
},
child: Text(_playerController?.isPlaying == true ? '暂停' : '播放'),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () {
_playerController?.stop();
},
child: Text('停止'),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () {
_playerController?.seek(Duration(seconds: 10)); // 跳转到10秒处
},
child: Text('跳转到10秒'),
),
],
),
),
);
}
}
在这个示例中,我们做了以下几件事情:
-
初始化
KdPlayerController
:在initState
方法中,我们创建了一个KdPlayerController
实例,并设置了音频URL、是否自动播放和是否循环播放。 -
监听播放状态:通过
addListener
方法监听播放状态的变化,以便在UI中更新播放状态。 -
播放控制:提供了播放、暂停、停止和跳转播放位置的功能按钮。
-
释放资源:在
dispose
方法中释放KdPlayerController
资源,以避免内存泄漏。
请确保将音频URL替换为你自己的音频文件URL,并根据需要调整其他参数。这个示例应该能够帮助你快速上手kdplayer
插件的使用。