on_audio_room
é um Flutter Package usado para criar um "quarto" para guardar informações dos audios [Favoritos, Playlist Interna, Mais Tocadas, etc...].
Esse Package funciona como uma "extenção" para on_audio_query e alguns métodos irão depender dele.
Algum problema? Issues
Alguma sugestão? Pull request
NOTE: Fique à vontade para ajudar nas traduções
Adicione o seguinte codigo para seu pubspec.yaml
:
dependencies:
on_audio_room: ^2.2.1+1
- Área para favoritos
- Área para últimas tocadas
- Área para mais tocadas
- Área para playlists internas
- Adicionar uma melhor performace para todo o plugin.
- Adicionar
[Qualidades]
. - Arrumar erros.
Antes de chamar algum método você precisa iniciar
o/os "quarto"/"quartos":
void main() async {
//Inicia apenas um "quarto".
await OnAudioRoom().initRoom(RoomType.FAVORITES); //Coloque qual "quarto".
runApp(MaterialApp(home: MyApp()));
}
//Or
void main() async {
//Inicia todos os "quartos".
await OnAudioRoom().initRoom(); //Não coloque o "quarto".
runApp(MaterialApp(home: MyApp()));
}
Importante:
- Esse método apenas FUNCIONARÁ 100% se você adicionar um "async/await", se não, a pagina vai carregar quase no mesmo tempo e vai causar um erro.
- LEMBRE-SE DE FECHAR OS "QUARTOS" NO "DISPOSE".
- Veja a documentação
OnAudioRoom() // O comando principal para usar o plugin.
Todos os tipos de métodos nesse plugin:
Methods | Parameters | Return |
---|---|---|
initRoom |
(RoomType, SubDir?) |
bool |
closeRoom |
bool |
|
deleteRoomFile |
bool |
|
getRoomInfo |
RoomEntity |
|
clearAll |
bool |
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 |
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> |
Methods | Parameters | Return |
---|---|---|
createPlaylist |
(PlaylistName) |
int? |
deletePlaylist |
(PlaylistKey) |
bool |
renamePlaylist |
(PlaylistKey, NewName) |
bool |
clearPlaylists |
bool |
|
queryPlaylist |
(PlaylistKey) |
PlaylistEntity |
queryPlaylists |
(Limit?, Reverse?) |
List<PlaylistEntity> |
Todos os exemplos irão usar [on_audio_query] plugin para adquirir informações sobre os audios/músicas
//Se você usa [on_audio_query] apenas precisa extender SongModel para criar qualquer entidade.
someName() async {
//O retorno irá sé o id da música dentro do banco de dados.
int? addToResult = await OnAudioRoom().addTo(
RoomType.FAVORITES,
entity[index].getMap.toFavoritesEntity(),
);
}
//Se não você usa [on_audio_query] apenas crie um map com todas as informações.
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,
};
//Agora, adicione para o banco de dados.
//O retorno irá sé o id da música dentro do banco de dados.
int? addToResult = await OnAudioRoom().addTo(
RoomType.FAVORITES,
favoritesEntity.toFavoritesEntity(),
);
}
//Se você usa [on_audio_query] apenas precisa extender SongModel para criar qualquer entidade.
someName() async {
//Crie uma lista com todos os SongModel.
List<SongModel> listOfSongs;
List<dynamic> listOfEntities;
//Adicione todas as músicas do model para a entidade.
listOfSongs.forEach(element) {
listOfEntities.add(element.getMap.toFavoritesEntity());
}
//Agora, adicione para o banco de dados.
//O retorno irá sé o id da música dentro do banco de dados.
List<int> addAllToResult = await OnAudioRoom().addAllTo(
RoomType.FAVORITES,
listOfEntities,
//playlistKey,
);
}
//Se não você usa [on_audio_query] apenas crie uma lista de map com todas as informações.
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());
}
//Agora, adicione para o banco de dados.
//O retorno irá sé o id da música dentro do banco de dados.
List<int> addAllToResult = await OnAudioRoom().addAllTo(
RoomType.FAVORITES,
favoritesEntity,
//playlistKey,
);
}
someName() async {
//O retorno será [true] se a música foi deletada ou [false] se não.
bool deleteFromResult = await OnAudioRoom().deleteFrom(
RoomType.FAVORITES,
EntityKey,
//playlistKey,
);
}
//Quando [Adicionando/Deletando/Checando] músicas da playlist, lembre-se de definir um
//[PlaylistId] ou retornará um erro.
someName() async {
//O retorno será [true] se a música foi deletada ou [false] se não.
bool deleteFromResult = await OnAudioRoom().deleteFrom(
RoomType.PLAYLIST,
EntityKey,
PlaylistKey: PlaylistKey,
);
}
someName() async {
List<int> listOfKeysToDelete = [...];
//O retorno será [true] se todas as músicas foram deletadas ou [false] se não.
bool deleteAllFromResult = await OnAudioRoom().deleteAllFrom(
RoomType.FAVORITES,
listOfKeysToDelete,
//playlistKey,
);
}
//Esse é bem simples.
someName() async {
//O retorno será [true] se todas as músicas foram deletadas ou [false] se não.
bool deleteAllFromResult = await OnAudioRoom().clearRoom(
RoomType.FAVORITES,
//playlistKey,
);
}
//Você vai usar esse para chegar se a música foi adicionada.
//Por quê? Se você tentar adicionar duas músicas iguais, irá funcionar, para evitar isso
//faça a checagem.
someName() async {
//O retorno será [true] se a música já foi adicionada ou [false] se não.
bool checkInResult = await OnAudioRoom().checkIn(
RoomType.FAVORITES,
EntityKey,
//playlistKey,
);
}
someName() async {
//Com esse método você irá definir um id e irá receber todas as informações sobre a música.
FavoritesEntity? queryFromResult = await OnAudioRoom().queryFromFavorites(
EntityKey,
);
}
someName() async {
//Com esse método você irá pegar todas as músicas e todas as informações baseado no Type[Entity].
//
//Você pode adicionar um valor como parametro para definir quantas músicas irão voltar.
//Você pode adicionar um [bool] como parametro para definir se a lista vai ser ao contrário ou não.
//Você pode adicionar um [RoomSortType] como parametro para definir a ordem da lista.
List<FavoritesEntity> queryResult = await OnAudioRoom().queryFavorites(
100, //Default: 50
true, //Default: false
RoomSortType.TITLE //Default: null
);
}