on_audio_room

Pub.dev Platforms Flutter

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.0.0

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

MethodsParametersReturn
initRoom(RoomType, SubDir?)bool
closeRoombool
deleteRoomFilebool
getRoomInfoRoomEntity
clearAllbool

Global methods

MethodsParametersReturn
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

MethodsParametersReturn
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

MethodsParametersReturn
createPlaylist(PlaylistName)int?
deletePlaylist(PlaylistKey)bool
renamePlaylist(PlaylistKey, NewName)bool
clearPlaylistsbool
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

entity_checker_extension
favorites_entity
last_played_entity
most_played_entity
on_audio_room
playlist_entity
room_helper_extension
room_type_extension
song_entity
song_map_formatter_extension