on_audio_room
on_audio_room
is a Flutter Package used to create a "room" to storage audio sections Favorites, Internal Playlists, Most Played, etc...
.
This Package works as a "extension" to on_audio_query and some methods will require it.
Help:
Any problem? Issues
Any suggestion? Pull request
Translations:
NOTE: Feel free to help with readme translations
Topics:
How to Install:
Add the following code to your pubspec.yaml
:
dependencies:
on_audio_room: ^2.2.1+1
Some Features:
- Favorites section
- Last Played section
- Most Played section
- Internal playlists section
TODO:
- Add better performance for all plugin.
- Add
[Features]
. - Fix bugs.
How to use:
Before calling any method you need init
the room/room's:
void main() async {
//Init only one room.
await OnAudioRoom().initRoom(RoomType.FAVORITES); //Add the RoomType.
runApp(MaterialApp(home: MyApp()));
}
//Or
void main() async {
//Init all the room's.
await OnAudioRoom().initRoom(); //Don't add the RoomType.
runApp(MaterialApp(home: MyApp()));
}
Important:
- This method will ONLY work 100% if you add a async/await, if don't, the widget will load almost in the same time and will throw a error.
- REMEMBER TO CLOSE THE ROOM'S INSIDE THE DISPOSE.
- See the documentation
OnAudioRoom() // The main method to start using the plugin.
All types of methods on this plugin:
Room methods
Methods | Parameters | Return |
---|---|---|
initRoom |
(RoomType, SubDir?) |
bool |
closeRoom |
bool |
|
deleteRoomFile |
bool |
|
getRoomInfo |
RoomEntity |
|
clearAll |
bool |
Global methods
Methods | Parameters | Return |
---|---|---|
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 |
Query methods
Methods | Parameters | Return |
---|---|---|
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> |
Playlist methods
Methods | Parameters | Return |
---|---|---|
createPlaylist |
(PlaylistName) |
int? |
deletePlaylist |
(PlaylistKey) |
bool |
renamePlaylist |
(PlaylistKey, NewName) |
bool |
clearPlaylists |
bool |
|
queryPlaylist |
(PlaylistKey) |
PlaylistEntity |
queryPlaylists |
(Limit?, Reverse?) |
List<PlaylistEntity> |
Examples:
All examples will use on_audio_query
plugin to get songs/audios information
addTo
//If you use [on_audio_query] just extend SongModel to create any entity.
someName() async {
//The return will be the song id inside the room.
int? addToResult = await OnAudioRoom().addTo(
RoomType.FAVORITES,
entity[index].getMap.toFavoritesEntity(),
);
}
//If you don't use [on_audio_query] just create a map with all information.
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,
};
//Now, add to the room
//The return will be the song key inside the room.
int? addToResult = await OnAudioRoom().addTo(
RoomType.FAVORITES,
favoritesEntity.toFavoritesEntity(),
);
}
addAllTo
//If you use [on_audio_query] just extend SongModel to create any entity.
someName() async {
//Create a list with all SongModel.
List<SongModel> listOfSongs;
List<dynamic> listOfEntities;
//Add all songs from model to entity.
listOfSongs.forEach(element) {
listOfEntities.add(element.getMap.toFavoritesEntity());
}
//Now, add to the room.
//The return will be a list of song id inside the room.
List<int> addAllToResult = await OnAudioRoom().addAllTo(
RoomType.FAVORITES,
listOfEntities,
//playlistKey,
);
}
//If you don't use [on_audio_query] just create a list of map with all information.
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());
}
//Now, add to the room
//The return will be a list of song id inside the room.
List<int> addAllToResult = await OnAudioRoom().addAllTo(
RoomType.FAVORITES,
favoritesEntity,
//playlistKey,
);
}
deleteFrom
someName() async {
//The return will be [true] if song has been deleted or [false] if not.
bool deleteFromResult = await OnAudioRoom().deleteFrom(
RoomType.FAVORITES,
EntityKey,
//playlistKey,
);
}
//When [Adding/Deleting/Checking] songs from a playlist, remember to add the
//[PlaylistKey] or you'll get a exception.
someName() async {
//The return will be [true] if song has been deleted or [false] if not.
bool deleteFromResult = await OnAudioRoom().deleteFrom(
RoomType.PLAYLIST,
EntityKey,
PlaylistKey: PlaylistKey,
);
}
deleteAllFrom
someName() async {
List<int> listOfKeysToDelete = [...];
//The return will be [true] if all songs has been deleted or [false] if not.
bool deleteAllFromResult = await OnAudioRoom().deleteAllFrom(
RoomType.FAVORITES,
listOfKeysToDelete,
//playlistKey,
);
}
clearRoom
//This one it's pretty simple.
someName() async {
//The return will be [true] if all songs has been deleted or [false] if not.
bool deleteAllFromResult = await OnAudioRoom().clearRoom(
RoomType.FAVORITES,
//playlistKey,
);
}
checkIn
//You'll use this one to check if some song has already been added.
//Why? If you try to add the same song twice, will work. To avoid this, check if exist.
someName() async {
//The return will be [true] if song has already been added or [false] if not.
bool checkInResult = await OnAudioRoom().checkIn(
RoomType.FAVORITES,
EntityKey,
//playlistKey,
);
}
queryFromFavorites
someName() async {
//With this method you will define a key and will return all information
//about this favorite song.
FavoritesEntity? queryFromResult = await OnAudioRoom().queryFromFavorites(
EntityKey,
);
}
queryFavorites
someName() async {
//With this method you will get all songs with all information based on Type[Entity].
//
//You can add a [int] as parameter to define how much song will return from this query.
//You can add a [bool] as parameter to define if list will be reversed or no.
//You can add a [RoomSortType] as parameter to define the list sort type.
List<FavoritesEntity> queryResult = await OnAudioRoom().queryFavorites(
100, //Default: 50
true, //Default: false
RoomSortType.TITLE //Default: null
);
}
LICENSE:
Libraries
- details/extensions/entity_checker_extension
- details/extensions/room_helper_extension
- details/extensions/room_type_extension
- details/extensions/song_map_formatter_extension
- details/rooms/favorites/favorites_entity
- details/rooms/lastPlayed/last_played_entity
- details/rooms/mostPlayed/most_played_entity
- details/rooms/playlists/playlist_entity
- details/rooms/song_entity
- on_audio_room