Flutter音频房间管理插件on_audio_room的使用
Flutter音频房间管理插件on_audio_room的使用
on_audio_room
是一个用于创建存储音频部分(如收藏夹、内部播放列表、最常播放等)的“房间”的 Flutter 包。
该包作为 on_audio_query
的扩展工作,某些方法需要它。
帮助
如有任何问题,请在 GitHub issues 提交。 如有任何建议,请在 GitHub pull requests 提交。
翻译
请注意,您可以自由帮助进行 readme 翻译。
主题
如何安装
在您的 pubspec.yaml
文件中添加以下代码:
dependencies:
on_audio_room: ^2.2.1+1
一些功能
- 收藏夹部分
- 最近播放部分
- 最常播放部分
- 内部播放列表部分
待办事项
- 提高所有插件的性能。
- 添加功能。
- 修复错误。
如何使用
在调用任何方法之前,您需要初始化房间/房间:
void main() async {
// 初始化一个房间
await OnAudioRoom().initRoom(RoomType.FAVORITES); // 添加 RoomType
runApp(MaterialApp(home: MyApp()));
}
// 或者
void main() async {
// 初始化所有房间
await OnAudioRoom().initRoom(); // 不要添加 RoomType
runApp(MaterialApp(home: MyApp()));
}
重要提示:
- 此方法只有在使用 async/await 时才能 100% 工作,否则小部件将在几乎相同的时间加载并抛出错误。
- 记得在 dispose 中关闭房间。
- 查看 文档
OnAudioRoom() // 启动插件的主要方法
房间方法
方法名 | 参数 | 返回值 |
---|---|---|
initRoom | RoomType, SubDir? | bool |
closeRoom | bool | |
deleteRoomFile | bool | |
getRoomInfo | RoomEntity | |
clearAll | bool |
全局方法
方法名 | 参数 | 返回值 |
---|---|---|
addTo | RoomType, Entity, PlaylistKey? | int? |
addAllTo | RoomType, Entity, PlaylistKey? | List<int> |
updateRoom | RoomType, Entity | bool |
deleteFrom | RoomType, EntityKey, PlaylistKey? | bool |
deleteAllFrom | RoomType, EntityKeys, PlaylistKey? | bool |
clearRoom | RoomType | bool |
checkIn | RoomType, EntityKey, PlaylistKey? | bool |
查询方法
方法名 | 参数 | 返回值 |
---|---|---|
queryFromFavorites | EntityKey | FavoritesEntity |
queryFavorites | Limit?, Reverse?, RoomSortType? | List<FavoritesEntity> |
queryFromLastPlayed | EntityKey | LastPlayedEntity |
queryLastPlayed | Limit?, Reverse?, RoomSortType? | List<LastPlayedEntity> |
queryFromMostPlayed | EntityKey | MostPlayedEntity |
queryMostPlayed | Limit?, Reverse?, RoomSortType? | List<MostPlayedEntity> |
queryFromPlaylist | PlaylistKey, EntityKey | SongEntity |
queryAllFromPlaylist | PlaylistKey, Limit?, Reverse?, RoomSortType? | List<SongEntity> |
播放列表方法
方法名 | 参数 | 返回值 |
---|---|---|
createPlaylist | PlaylistName | int? |
deletePlaylist | PlaylistKey | bool |
renamePlaylist | PlaylistKey, NewName | bool |
clearPlaylists | bool | |
queryPlaylist | PlaylistKey | PlaylistEntity |
queryPlaylists | Limit?, Reverse? | List<PlaylistEntity> |
示例
所有示例将使用 [on_audio_query]
插件来获取歌曲/音频信息
addTo
// 如果你使用 `[on_audio_query]`,只需扩展 SongModel 来创建任何实体。
someName() async {
// 返回将是歌曲在房间中的 ID。
int? addToResult = await OnAudioRoom().addTo(
RoomType.FAVORITES,
entity[index].getMap.toFavoritesEntity(),
);
}
// 如果你不使用 `[on_audio_query]`,只需创建一个包含所有信息的 Map。
someOtherName() async {
Map<dynamic, dynamic> favoritesEntity = {
"_data": song.data,
"_display_name": song.displayName,
"_id": song.id,
"album": song.album,
"album_id": song.albumId,
"artist": song.artist,
"artist_id": song.artistId,
"date_added": song.dateAdded,
"duration": song.duration,
"title": song.title,
"artwork": song.artwork,
};
// 现在,将其添加到房间中。
// 返回将是歌曲在房间中的键。
int? addToResult = await OnAudioRoom().addTo(
RoomType.FAVORITES,
favoritesEntity.toFavoritesEntity(),
);
}
addAllTo
// 如果你使用 `[on_audio_query]`,只需扩展 SongModel 来创建任何实体。
someName() async {
// 创建一个包含所有 SongModel 的列表。
List<SongModel> listOfSongs;
List<dynamic> listOfEntities;
// 将所有歌曲从模型添加到实体。
listOfSongs.forEach((element) {
listOfEntities.add(element.getMap.toFavoritesEntity());
});
// 现在,将其添加到房间中。
// 返回将是一个包含歌曲在房间中的 ID 的列表。
List<int> addAllToResult = await OnAudioRoom().addAllTo(
RoomType.FAVORITES,
listOfEntities,
// playlistKey,
);
}
// 如果你不使用 `[on_audio_query]`,只需创建一个包含所有信息的 Map 列表。
someOtherName() async {
List<dynamic> listOfEntities;
listOfSongs.forEach((element) {
Map<dynamic, dynamic> favoritesEntity = {
"last_data": song.data,
"display_name": song.displayName,
"id": song.id,
"album": song.album,
"album_id": song.albumId,
"artist": song.artist,
"artist_id": song.artistId,
"date_added": song.dateAdded,
"duration": song.duration,
"title": song.title,
"artwork": song.artwork,
};
listOfEntities.add(favoritesEntity.toFavoritesEntity());
});
// 现在,将其添加到房间中。
// 返回将是一个包含歌曲在房间中的 ID 的列表。
List<int> addAllToResult = await OnAudioRoom().addAllTo(
RoomType.FAVORITES,
favoritesEntity,
// playlistKey,
);
}
deleteFrom
someName() async {
// 如果歌曲已删除,返回为 [true],否则为 [false]。
bool deleteFromResult = await OnAudioRoom().deleteFrom(
RoomType.FAVORITES,
EntityKey,
// playlistKey,
);
}
// 当向播放列表添加/删除/检查歌曲时,记得添加 [PlaylistKey],否则会抛出异常。
someName() async {
// 如果歌曲已删除,返回为 [true],否则为 [false]。
bool deleteFromResult = await OnAudioRoom().deleteFrom(
RoomType.PLAYLIST,
EntityKey,
PlaylistKey: PlaylistKey,
);
}
deleteAllFrom
someName() async {
List<int> listOfKeysToDelete = [...];
// 如果所有歌曲已删除,返回为 [true],否则为 [false]。
bool deleteAllFromResult = await OnAudioRoom().deleteAllFrom(
RoomType.FAVORITES,
listOfKeysToDelete,
// playlistKey,
);
}
clearRoom
// 这个方法非常简单。
someName() async {
// 如果所有歌曲已删除,返回为 [true],否则为 [false]。
bool deleteAllFromResult = await OnAudioRoom().clearRoom(
RoomType.FAVORITES,
// playlistKey,
);
}
checkIn
// 使用此方法来检查某个歌曲是否已添加。
// 为什么?如果你尝试两次添加同一首歌,它仍然可以工作。为了避免这种情况,检查是否存在。
someName() async {
// 如果歌曲已添加,返回为 [true],否则为 [false]。
bool checkInResult = await OnAudioRoom().checkIn(
RoomType.FAVORITES,
EntityKey,
// playlistKey,
);
}
queryFromFavorites
someName() async {
// 使用此方法定义一个键,并将返回关于此收藏歌曲的所有信息。
FavoritesEntity? queryFromResult = await OnAudioRoom().queryFromFavorites(
EntityKey,
);
}
queryFavorites
someName() async {
// 使用此方法根据类型 [Entity] 获取所有歌曲及其所有信息。
//
// 可以添加一个 [int] 参数来定义此查询将返回多少首歌曲。
// 可以添加一个 [bool] 参数来定义列表是否反转。
// 可以添加一个 [RoomSortType] 参数来定义列表的排序类型。
List<FavoritesEntity> queryResult = await OnAudioRoom().queryFavorites(
100, // 默认:50
true, // 默认:false
RoomSortType.TITLE // 默认:null
);
}
更多关于Flutter音频房间管理插件on_audio_room的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter音频房间管理插件on_audio_room的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,我可以为你提供一个关于如何使用Flutter中的on_audio_room
插件进行音频房间管理的代码示例。on_audio_room
插件通常用于在Flutter应用中实现音频聊天室的功能。请注意,实际使用时你需要确保已经将该插件添加到你的pubspec.yaml
文件中。
以下是一个简单的代码示例,展示如何使用on_audio_room
插件进行音频房间的管理:
1. 添加依赖
首先,在你的pubspec.yaml
文件中添加on_audio_room
插件的依赖:
dependencies:
flutter:
sdk: flutter
on_audio_room: ^最新版本号 # 请替换为实际可用的最新版本号
2. 导入插件并初始化
在你的Flutter项目的Dart文件中导入on_audio_room
插件,并进行初始化:
import 'package:flutter/material.dart';
import 'package:on_audio_room/on_audio_room.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Audio Room Management',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: AudioRoomPage(),
);
}
}
class AudioRoomPage extends StatefulWidget {
@override
_AudioRoomPageState createState() => _AudioRoomPageState();
}
class _AudioRoomPageState extends State<AudioRoomPage> {
final OnAudioRoom _onAudioRoom = OnAudioRoom();
@override
void initState() {
super.initState();
// 初始化插件,例如设置房间ID和监听事件
_onAudioRoom.init({
'roomId': 'your_room_id', // 替换为你的房间ID
'userId': 'your_user_id', // 替换为你的用户ID
});
// 监听房间状态变化
_onAudioRoom.onRoomStateChanged.listen((event) {
print('Room state changed: ${event.state}');
if (event.state == RoomState.CONNECTED) {
// 房间连接成功后的操作
} else if (event.state == RoomState.DISCONNECTED) {
// 房间断开连接后的操作
}
});
// 监听用户列表变化
_onAudioRoom.onUserListChanged.listen((event) {
print('User list changed: ${event.users}');
});
// 监听音频流变化
_onAudioRoom.onAudioStreamChanged.listen((event) {
print('Audio stream changed: ${event.userId} - ${event.isSpeaking}');
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Audio Room Management'),
),
body: Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
children: [
ElevatedButton(
onPressed: () {
// 加入房间
_onAudioRoom.joinRoom();
},
child: Text('Join Room'),
),
ElevatedButton(
onPressed: () {
// 离开房间
_onAudioRoom.leaveRoom();
},
child: Text('Leave Room'),
),
ElevatedButton(
onPressed: () {
// 开始说话
_onAudioRoom.startSpeaking();
},
child: Text('Start Speaking'),
),
ElevatedButton(
onPressed: () {
// 停止说话
_onAudioRoom.stopSpeaking();
},
child: Text('Stop Speaking'),
),
],
),
),
);
}
}
enum RoomState {
CONNECTING,
CONNECTED,
DISCONNECTING,
DISCONNECTED,
}
注意事项
- 权限管理:确保在
AndroidManifest.xml
和Info.plist
中添加了必要的音频和网络权限。 - 错误处理:实际应用中应添加错误处理逻辑,以处理可能出现的异常情况。
- UI优化:根据需求调整UI布局和样式,以适应不同的设备和屏幕尺寸。
上述代码展示了如何使用on_audio_room
插件进行基本的音频房间管理操作,包括加入房间、离开房间、开始说话和停止说话等。根据具体需求,你可以进一步扩展和优化该代码。