Flutter Plugin used to query audios/songs infos [title, artist, album, etc..] from device storage.

Overview

on_audio_query

Pub.dev Platforms Languages

on_audio_query is a Flutter Plugin used to query audios/songs 🎶 infos [title, artist, album, etc..] from device storage.

Help:

Any problem? Issues
Any suggestion? Pull request

Extensions:

Translations:

NOTE: Feel free to help with readme translations

Topics:

Platforms:

Methods Android IOS Web
querySongs ✔️ ✔️ ✔️
queryAlbums ✔️ ✔️ ✔️
queryArtists ✔️ ✔️ ✔️
queryPlaylists ✔️ ✔️
queryGenres ✔️ ✔️ ✔️
queryAudiosFrom ✔️ ✔️ ✔️
queryWithFilters ✔️ ✔️ ✔️
queryArtwork ✔️ ✔️ ✔️
createPlaylist ✔️ ✔️
removePlaylist ✔️
addToPlaylist ✔️ ✔️
removeFromPlaylist ✔️
renamePlaylist ✔️
moveItemTo ✔️
permissionsRequest ✔️ ✔️
permissionsStatus ✔️ ✔️
queryDeviceInfo ✔️ ✔️ ✔️

✔️ -> Supported
-> Not Supported

See all platforms methods support

How to Install:

Add the following code to your pubspec.yaml:

dependencies:
  on_audio_query: ^2.5.3

Request Permission:

Android:

To use this plugin add the following code to your AndroidManifest.xml

<manifest> ...

  <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

</manifest>

IOS:

To use this plugin add the following code to your Info.plist

	<key>NSAppleMusicUsageDescription</key>
	<string>..Add a reason..</string>

Web:

Since Web Browsers don't offer direct access to their user's file system, this plugin will use the assets folder to "query" the audios files. So, will totally depend of the developer.

  # You don't need add every audio file path, just define the folder.
  assets:
    - assets/
    # If your files are in another folder inside the `assets`:
    - assets/audios/
    # - assets/audios/animals/
    # - assets/audios/animals/cat/
    # ...

Some Features:

  • Optional and Built-in storage READ and WRITE permission request
  • Get all audios/songs.
  • Get all albums and album-specific audios.
  • Get all artists and artist-specific audios.
  • Get all playlists and playlists-specific audios.
  • Get all genres and genres-specific audios.
  • Get all query methods with specific keys [Search].
  • Create/Delete/Rename playlists.
  • Add/Remove/Move specific audios to playlists.
  • Specific sort types for all query methods.

TODO:

  • Add better performance for all plugin.
  • Add support to Windows/MacOs/Linux.
  • Option to remove songs.
  • Fix bugs.

How to use:

OnAudioQuery() // The main method to start using the plugin.

All types of methods on this plugin:

Query methods

Methods Parameters Return
querySongs (SortType, OrderType, UriType, RequestPermission) List<SongModel>
queryAlbums (SortType, OrderType, UriType, RequestPermission) List<AlbumModel>
queryArtists (SortType, OrderType, UriType, RequestPermission) List<ArtistModel>
queryPlaylists (SortType, OrderType, UriType, RequestPermission) List<PlaylistModel>
queryGenres (SortType, OrderType, UriType, RequestPermission) List<GenreModel>
queryAudiosFrom (Type, Where, RequestPermission) List<SongModel>
queryWithFilters (ArgsVal, WithFiltersType, Args, RequestPermission) List<dynamic>
queryArtwork (Id, Type, Format, Size, RequestPermission) Uint8List?

Playlist methods

Methods Parameters Return
createPlaylist (PlaylistName, RequestPermission) bool
removePlaylist (PlaylistId, RequestPermission) bool
addToPlaylist [BG](PlaylistId, AudioId, RequestPermission) bool
removeFromPlaylist (PlaylistId, AudioId, RequestPermission) bool
renamePlaylist (PlaylistId, NewName, RequestPermission) bool
moveItemTo [NT](PlaylistId, From, To, RequestPermission) bool

Permissions/Device methods

Methods Parameters Return
permissionsRequest (retryRequest) bool
permissionsStatus bool
queryDeviceInfo DeviceModel

Artwork Widget

  Widget someOtherName() async {
    return QueryArtworkWidget(
      id: SongId, 
      type: ArtworkType.AUDIO,
    );
  }

See more: QueryArtworkWidget

Abbreviations

[NT] -> Need Tests
[BG] -> Bug on Android 10/Q

Examples:

OnAudioQuery

  final OnAudioQuery _audioQuery = OnAudioQuery();

querySongs

  someName() async {
    // DEFAULT: 
    // SongSortType.TITLE, 
    // OrderType.ASC_OR_SMALLER,
    // UriType.EXTERNAL, 
    List<SongModel> something = await _audioQuery.querySongs();
  }

queryAlbums

  someName() async {
    // DEFAULT: 
    // AlbumSortType.ALBUM, 
    // OrderType.ASC_OR_SMALLER 
    List<AlbumModel> something = await _audioQuery.queryAlbums();
  }

queryArtists

  someName() async {
    // DEFAULT: 
    // ArtistSortType.ARTIST, 
    // OrderType.ASC_OR_SMALLER 
    List<ArtistModel> something = await _audioQuery.queryArtists();
  }

queryPlaylists

  someName() async {
    // DEFAULT: 
    // PlaylistSortType.NAME, 
    // OrderType.ASC_OR_SMALLER 
    List<PlaylistModel> something = await _audioQuery.queryPlaylists();
  }

queryGenres

  someName() async {
    // DEFAULT: 
    // GenreSortType.NAME, 
    // OrderType.ASC_OR_SMALLER 
    List<GenreModel> something = await _audioQuery.queryGenres();
  }

queryArtwork

  someName() async {
    // DEFAULT: ArtworkFormat.JPEG, 200 and false
    Uint8List something = await _audioQuery.queryArtwork(
        SongId, 
        ArtworkType.AUDIO, 
        ...,
      );
  }

Or you can use a basic and custom Widget. See example QueryArtworkWidget

queryAudiosFrom

You can use this method to 'query' the songs from any section(Album, Artist, Playlist or Genre).

  someName() async {
    List<SongModel> something = await _audioQuery.queryAudiosFrom(
        AudiosFromType.ALBUM_ID, 
        albumId,
        // You can also define a sortType
        sortType: SongSortType.TITLE, // Default
        orderType: OrderType.ASC_OR_SMALLER, // Default
      );
  }

queryWithFilters

  someName() async {
    // Here we'll search for a [song](WithFiltersType.AUDIOS) using his 
    // [artist](AudiosArgs.ARTIST)
    List<dynamic> something = await _audioQuery.queryWithFilters(
        // The [text] to search
        "Sam Smith", 
        // The type of search you want.
        // All types:
        //   * WithFiltersType.AUDIOS
        //   * WithFiltersType.ALBUMS
        //   * WithFiltersType.PLAYLISTS
        //   * WithFiltersType.ARTISTS
        //   * WithFiltersType.GENRES
        WithFiltersType.AUDIOS,
        // This method has [args] as parameter. With this value you can create
        // a more 'advanced' search.
        args: AudiosArgs.ARTIST,
    );

    // Other example:

    // Here we'll search for a [song](WithFiltersType.AUDIOS) using his 
    // [album](AudiosArgs.ALBUM)
    List<dynamic> something = await _audioQuery.queryWithFilters(
        // The [text] to search
        "In the Lonely Hour", 
        // The type of search you want.
        // All types:
        //   * WithFiltersType.AUDIOS
        //   * WithFiltersType.ALBUMS
        //   * WithFiltersType.PLAYLISTS
        //   * WithFiltersType.ARTISTS
        //   * WithFiltersType.GENRES
        WithFiltersType.AUDIOS,
        // This method has [args] as parameter. With this value you can create
        // a more 'advanced' search.
        args: AudiosArgs.ALBUM,
    );

    // After getting the result from [queryWithFilters], convert this list using:
    List<TypeModel> convertedList = something.toTypeModel();

    // Example:
    List<SongModel> convertedSongs = something.toSongModel(); 
  }

ArgsTypes: AudiosArgs, AlbumsArgs, PlaylistsArgs, ArtistsArgs and GenresArgs

Gif Examples:

Songs Albums Playlists Artists

LICENSE:

Comments
  • All album arts rebuild again after state changes in app when using QueryArtworkWidget()

    All album arts rebuild again after state changes in app when using QueryArtworkWidget()

    Hey first of all, this is by far the best and easy dependency I found. Thanks for your hard work :) As the title suggests I have a small bug with the album arts. I also came across other plugins having the same issue. Here is one. To make the listview faster I use cacheextent and that makes all the album arts blackout for a second or two . Can you please do something for this?

    T: Bug PRI: Low S: Fixed 
    opened by shaan-mephobic 14
  • searching songs with genreName gives less number of songs

    searching songs with genreName gives less number of songs

    I updated the plugin to ^2.4.1 . I noticed one thing that when we query songs with genre name in List genreSong = await audioQuery.queryAudiosFrom(AudiosFromType.GENRE, genreName); this gives less num of songs but it is very rare it does not happen with every genre .

    searching with genreId works fine that gives exact num of songs .

    at first i was thinking that it may be logical error with my code , but did not work with genreName , I got expected num of songs using genreId .

    T: Bug PRI: Low S: Fixed P: Android 
    opened by Su-desh 9
  • albumId may be null on Android 9 and below.

    albumId may be null on Android 9 and below.

    I've tried it on the real Android Device and Emulator, and I get the same problem.

    /flutter (20865): [ERROR:flutter/lib/ui/ui_dart_state.cc(209)] Unhandled Exception: type 'Null' is not a subtype of type 'int'
    E/flutter (20865): #0      AlbumModel.albumId
    package:on_audio_query_platform_interface/…/models/album_model.dart:17
    

    /.pub-cache/hosted/pub.dartlang.org/on_audio_query_platform_interface-1.2.1/lib/details/models/album_model.dart

      /// Return album [albumId]
      int? get albumId => _info["album_id"];
    

    Allowing Null solves this Exception for now, but it may cause problems in other places as well.

    T: Bug PRI: High S: Fixed P: Android 
    opened by hndrr 7
  • Error in OnArtworkQuery.swift again, Build does not pass on iOS

    Error in OnArtworkQuery.swift again, Build does not pass on iOS

    Thank you for the quick fix. https://github.com/LucasPJS/on_audio_query/issues/37

    I have changed the version to 2.4.0. However, another error is preventing Build from going through.

        ** BUILD FAILED **
    Xcode's output:
    ↳
        /Users/hndr/.pub-cache/hosted/pub.dartlang.org/on_audio_query-2.4.0/ios/Classes/query/OnArtworkQuery.swift:66:40: error: variable 'filter' used before being initialized
                    cursor?.addFilterPredicate(filter)
                                               ^
        /Users/hndr/.pub-cache/hosted/pub.dartlang.org/on_audio_query-2.4.0/ios/Classes/query/OnArtworkQuery.swift:39:13: note: variable defined here
                var filter: MPMediaPropertyPredicate
                    ^
    

    I'm testing it in the repository here. https://github.com/hndrr/audio_query_sample

    T: Bug PRI: High S: Fixed P: IOS 
    opened by hndrr 7
  • File name without extension

    File name without extension

    Hi. Thank you for making this plugin. Great work.

    I need to get just file name without extension part. Can you exclude it from displayName property or add a new property for that?

    file_name**.mp3** => file_name

    Extra: Feature T: Question S: Added 
    opened by ghost 5
  • numOfSongs is not working

    numOfSongs is not working

    using numOfSongs is giving error , type 'int' is not a subtype of type 'String' .

    this simple example given below also gives the error

    List allGenres = await OnAudioQuery().queryGenres();

    print('num of song for index 2 ${allGenres[2].numOfSongs}');

    T: Bug PRI: Medium S: Fixed P: Dart 
    opened by Su-desh 4
  • song name appears in all Songs List even after deleting it

    song name appears in all Songs List even after deleting it

    hi @LucJosin i am getting a very weird error with this plugin .

    I deleted a song with the following code

    
    onTap: () async {
                    File file = File(widget.singleTrack!.data);
                    try {
                      file.deleteSync();
                      if (await file.exists()) {
                        print('Song not deleted');
                      } else {
                        audioDataClass.getMp3Data();
                        audioDataClass.update();
                      }
                    } catch (e) {
                      print('$e');
                    }
    
                    Get.back();
                  }
    

    Song is deleted without any issue from the file system .

    But the problem is that this plugin still holds a reference to that song , because when we i use querySongs(); or queryAlbums(); it is showing the deleted song details in ListView, similar to other songs . this should not happen because that song is removed from storage .

    I thought this might be a issue because i did not update the song list View after deleting that song but I tried Restarting the app , Flutter clean . But same result is shown , song is there in the querySongs list .

    Android 11 (API 30) .

    T: Bug PRI: High S: Fixed P: Android 
    opened by Su-desh 3
  • Apple Music filePath reference becomes null

    Apple Music filePath reference becomes null

    If you have an Apple Music subscription on iOS, the Apple Music file will be detected, but you will not be able to play it because the file reference will be null.

    Is there any other way to determine if the file is an Apple Music file or not other than by checking if it is null?

    I wanted to hide artists and albums that I couldn't play, but I didn't know how to do that, so I checked if the filePath of the song was null and filtered Album and Artist.

    T: Bug PRI: Medium S: Fixed P: IOS 
    opened by hndrr 3
  • OnAudioQuery().queryAudiosFrom(AudiosFromType.GENRE_NAME,genre); is returning no songs in Android 11.

    OnAudioQuery().queryAudiosFrom(AudiosFromType.GENRE_NAME,genre); is returning no songs in Android 11.

    I've tried on_audio_query: 1.1.1 and on_audio_query: 1.1.0 and its returning all songs of the genres. But, on_audio_query: 1.1.2 isn't returning songs. I saw that you made changes in GENRES on that . I'm aware that the app crashes on lower android versions on older versions of the package. So I guess android version is upto it again. Will you please take a look into it ?

    T: Bug PRI: Medium S: Fixed 
    opened by shaan-mephobic 3
  • Not working in release mode...

    Not working in release mode...

    I think I have messed up with something. The app is working fine in debug mode, but not release mode. Storage request permission also not showing in release mode. I have tried with Android 10 & 11 both not working. Any help? Thank you..

    opened by Globinnjaliath 3
  • Getting error while request for songs from genres

    Getting error while request for songs from genres

    Am getting error when I tried to list songs from genre. I used List genreSongs = await OnAudioQuery().queryAudiosFrom(AudiosFromType.GENRE_NAME, genreName); and with GENRE_ID also, both returns error as something like I/Process (26960): Sending signal. PID: 26960 SIG: 9 Lost connection to device

    T: Bug PRI: Medium S: Fixed 
    opened by Globinnjaliath 3
  • Remove playlists not working

    Remove playlists not working

    When I create a playlist then restart the app and try to delete the playlist, it doesn't delete it. But when I create a playlist then try deleting it without restarting the app, it deletes it.

    opened by yeeet7 0
  • iOS audio file

    iOS audio file

    Hello, I am trying to create a chat app that user can list all musics and select one to upload in the chat, in android it give a path and i can use it to upload but in iOS what should i do to get the file for uploading. I am trying to find a library to do that for me and I wanna figure out this library can do that or not if yes, how.

    Thanks

    opened by mortezaom 0
  • assert Artwork quality check

    assert Artwork quality check

    changes on on_audio_query/lib/src/widget/query_artwork_widget.dart

    Replaced quality checking inside build function into assertion on constructor

    use assertion whenever possible instead of placing conditions inside the build function.

    opened by jasimameen 0
  • Unable to Play Songs from iOS

    Unable to Play Songs from iOS

    on able to play song for iOS, this is data returned from iOS ""ipod-library://item/item.mp4?id=4381080840431461490" I have tried different player

    opened by wanoghoco 0
  • queryAlbums return null id exception

    queryAlbums return null id exception

    allAlbumsList(PageManager pageManager) => FutureBuilder<List<AlbumModel>>(
            future: audioQuery.queryAlbums(),
            builder: (context, item) {
              if (item.data == null) {
                return const Center(child: CircularProgressIndicator());
              }
              if (item.data!.isEmpty) {
                return const Center(child: Text("Albums not found!"));
              }
              if (allAlbums.isEmpty) {
                allAlbums = item.data!;
              }
              return ListView.builder(
                itemCount: item.data!.length,
                itemBuilder: (context, index) {
                  return HListItem(
                    onTap: () async {},
                    leading: ImageWidget(
                      height: 52.r,
                      width: 52.r,
                      id: item.data![index].id,
                      artworkType: ArtworkType.ALBUM,
                    ),
                    title: item.data![index].album,
                    subTitle1: item.data![index].artist ?? "<unknown>",
                    subTitle2: "${item.data![index].numOfSongs} songs",
                    isSelected: false,
                  );
                },
              );
            },
          );
    

    E/flutter (19947): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: type 'Null' is not a subtype of type 'int' E/flutter (19947): #0 new AlbumModel (package:on_audio_query_platform_interface/src/models/medias/album_model.dart:5:39) E/flutter (19947): #1 MethodChannelOnAudioQuery.queryAlbums. (package:on_audio_query_platform_interface/method_channel_on_audio_query.dart:173:44) E/flutter (19947): #2 MappedListIterable.elementAt (dart:_internal/iterable.dart:414:31) E/flutter (19947): #3 ListIterator.moveNext (dart:_internal/iterable.dart:343:26) E/flutter (19947): #4 new _GrowableList._ofEfficientLengthIterable (dart:core-patch/growable_array.dart:189:27) E/flutter (19947): #5 new _GrowableList.of (dart:core-patch/growable_array.dart:150:28) E/flutter (19947): #6 new List.of (dart:core-patch/array_patch.dart:51:28) E/flutter (19947): #7 ListIterable.toList (dart:_internal/iterable.dart:214:7) E/flutter (19947): #8 MethodChannelOnAudioQuery.queryAlbums (package:on_audio_query_platform_interface/method_channel_on_audio_query.dart:173:67) E/flutter (19947):

    opened by HirdayaShrestha 0
  • add format time duration

    add format time duration

    Hi developer,

    Could you add 2 more method?

    1. return format size of song. for example: 100KB, 5.1MB, ... etc _audioQuery.formatSize();

    2. return format duration of song. Ex: 0:00:00, 00:00 _audioQuery.formatDuration();

    Thank you

    opened by socheth 0
Releases(3.0.0-beta.0)
  • 3.0.0-beta.0(Jun 20, 2022)

    Features

    Dart

    • [Updated] example.
    • [Added/Fixed] documentation.

    Android / iOS

    • [Added] clearCachedArtworks method to clear all cached images/artworks.
    • [Added] a filter to every 'query' method.
    • [Added] option to sort songs using track number.
    • [Added] method to get information from specifics audios.
    • [Added] ArtworkFormatType.
    • [Added] AudioType.
    • [Added] MediaDirType.
    • [Added] MediaFilter.
    • [Added] MediaColumns.
    • [Added] ArtworkModel.
    • [Added] ObserversModel.
    • [Added] observersStatus.
    • [Added] observers:
      • observeSongs.
      • observeAlbums.
      • observeArtists.
      • observePlaylists.
      • observeGenres.
    • [Reduced] the default artwork resolution.

    Android

    • [Updated] gradle.
    • [Removed] Ringtones, Notification, etc.. from default 'query'.
    • [Added] option to use multiple path when 'querying'.

    Fixes

    Android

    • Fix app crash after requestPermission.

    Documentation

    • Updated README documentation.
    • Updated DEPRECATED documentation.
    • Updated PLATFORMS documentation.

    Important Changes ⚠

    • Now all methods will use the filter for more advanced filtering.
    • Now the plugin will return a error, instead of empty list, if app doesn't have permission to read.
    • Now createPlaylist will return the playlistId instead if bool.
    • Now queryArtwork will return a ArtworkModel.

    @Deprecated

    • [queryAudiosFrom].
    • [queryWithFilters].
    • [queryFromFolder].
    • [queryAllPath].
    • [format] from [QueryArtworkWidget].
    • [AudiosFromType] and [AudiosFromType]
    • [format], [size] and [quality] from [queryArtwork].
    • [SongModel]
      • Use [AudioModel] instead.
    • [SongSortType]
      • Use [MediaColumns.Audio] instead.
    • [AlbumSortType]
      • Use [MediaColumns.Album] instead.
    • [ArtistSortType]
      • Use [MediaColumns.Artist] instead.
    • [PlaylistSortType]
      • Use [MediaColumns.Playlist] instead.
    • [GenreSortType]
      • Use [MediaColumns.Genre] instead.
    • [ArtworkFormat]
      • Use [ArtworkFormatType] instead.
    • [sortType], [orderType], [uriType] and [ignoreCase] from:
      • [querySongs];
      • [queryAlbums];
      • [queryArtists];
      • [queryPlaylists];
      • [queryGenres].
    Source code(tar.gz)
    Source code(zip)
  • 2.6.1(May 17, 2022)

  • 2.6.0(Feb 2, 2022)

    Features

    • [Added] [scanMedia] method that will scan the given path and update the [Android] MediaStore.

    Fixes

    • [Fixed] media showing when calling [querySongs] even after deleting with [dart:io]. - #67

    Changes

    • [Updated] some required packages.

    Documentation

    • Updated README documentation.
    • Updated DEPRECATED documentation.
    • Updated PLATFORMS documentation.
    • Updated some broken links.
    Source code(tar.gz)
    Source code(zip)
  • 2.5.3+1(Jan 21, 2022)

  • 2.5.3(Nov 10, 2021)

    Fixes

    IOS

    • [Fixed] song/artist/album from Apple Music returning when 'querying' - #61
    • [Fixed] wrong artistId returning from [AlbumModel] - #60

    Documentation

    • Updated README documentation.
    Source code(tar.gz)
    Source code(zip)
  • 2.5.2(Oct 25, 2021)

    Fixes

    Android

    • [Fixed] wrong value returning from: - #56
      • [is_music].
      • [is_alarm].
      • [is_notification].
      • [is_ringtone].
      • [is_podcast].
      • [is_audiobook].

    Documentation

    • Updated README documentation.
    Source code(tar.gz)
    Source code(zip)
  • 2.5.1(Oct 19, 2021)

    Fixes

    Dart

    • [Fixed] wrong value returning from [artistId] when using [AlbumModel]. - #54

    Android

    • [Fixed] missing songs from [queryAudiosFrom] when using GENRE. - #46

    Documentation

    • Updated README documentation.

    ⚠ Important Changes

    Dart

    • Now [artistId] from [AlbumModel] return a [int].
    Source code(tar.gz)
    Source code(zip)
  • 2.5.0(Oct 16, 2021)

    Release

    • [2.5.0] release.

    Features

    Dart

    • [Added] errorBuilder and frameBuilder to [QueryArtworkWidget].

    Fixes

    Web

    • [Fixed] empty result when using [querySongs].
    • [Fixed] error when decoding some images.

    See all development changes:

    Source code(tar.gz)
    Source code(zip)
  • 2.4.2(Oct 1, 2021)

  • 2.4.1(Sep 29, 2021)

    Fixes

    Dart

    • [Fixed] wrong type of numOfSongs from [SongModel]. - #39

    IOS

    • [Fixed] wrong filter configuration when using [queryWithFilters].
    • [Fixed] crash when using any 'query' method with a null sortType. - #43
    • [Fixed] error with wrong [MPMediaQuery] filter. - #38
    Source code(tar.gz)
    Source code(zip)
  • 2.4.0(Sep 28, 2021)

    Features

    Android

    • [Added] a better 'search' method to [queryWithFilters], now the query uses 'contains' when 'querying'. - #35

    Fixes

    IOS

    • [Fixed] error with wrong [MPMediaQuery] type and wrong value from [jpegData]. - #37

    Documentation

    • Updated broken README links. - #36

    Documentation

    • Updated README documentation.
    Source code(tar.gz)
    Source code(zip)
  • 2.3.1(Sep 27, 2021)

    Features

    Android/Web

    • [Added] [ignoreCase] to:
      • [querySongs].
      • [queryAlbums].
      • [queryArtists].
      • [queryPlaylists].
      • [queryGenres].

    Fixes

    Android

    • [Fixed] error when trying to build using Android. - #32 & #33
    • [Fixed] error related to android song projection. - #31
    • [Fixed] 'bug' when using SongSortType.TITLE. This is now a 'feature' and can be controlled using [ignoreCase]. - #29

    Documentation

    • Updated README documentation.

    Changes

    Android

    • Updated [Kotlin] and [Dependencies] versions.
    • Moved from [JCenter] to [MavenCentral].
    Source code(tar.gz)
    Source code(zip)
  • 2.3.0(Sep 25, 2021)

    Features

    Android/IOS/Web

    • [Added] [numOfSongs] to [PlaylistModel] and [GenreModel].
    • [Added] Playlist and Artist to ArtworkType.

    Android/IOS

    • [Added] quality to queryArtwork.

    Android

    • [Added] [isAudioBook], [Genre] and [GenreId] to [SongModel].
    • Re-[Added] to [SongModel]:
      • [isAlarm].
      • [isMusic].
      • [isNotification].
      • [isPodcast].
      • [isRingtone].

    Fixes

    Android

    • [Fixed] wrong value returning from [id] when using [ArtistModel].
    • [Fixed] wrong value returning from [id] when using [GenreModel].
    • [Fixed] no value returning from [queryAudiosFrom] when using ARTIST_ID.

    Documentation

    • Updated README documentation.
    • Updated OnAudioQuery and OnAudioQueryExample documentation to support new [Flutter 2.5].

    Changes

    • [Changed] wrong name DATA_ADDED to DATE_ADDED for both [SongSortType] and [PlaylistSortType]. - #27

    ⚠ Important Changes

    Dart

    • The parameter args from [queryWithFilters] is no longer required.

    @.Deprecated

    • [DEFAULT] from [SongSortType].
    • [DEFAULT] from [PlaylistSortType].
    • [DEFAULT] from [ArtistSortType].
    • [DEFAULT] from [AlbumSortType].
    • [DEFAULT] from [GenreSortType].
    • [ARTIST_KEY] from [ArtistSortType].
    • [ARTIST_NAME] from [ArtistSortType].
    • [ALBUM_NAME] from [AlbumSortType].
    • [GENRE_NAME] from [GenreSortType].
    • [DATA_ADDED] from [SongSortType].
    • [DATA_ADDED] from [PlaylistSortType].
    Source code(tar.gz)
    Source code(zip)
  • 2.2.0(Aug 25, 2021)

    Features

    IOS

    • Added a filter to avoid cloud audios/songs.

    Fixes

    IOS

    • [Fixed] wrong value returning from [permissionsStatus]. - #24

    Documentation

    • Updated README documentation.
    Source code(tar.gz)
    Source code(zip)
  • 2.1.2(Aug 24, 2021)

    Fixes

    Android

    • Fixed duplicate media from [queryWithFilters].
    • Fixed crash when calling [queryWithFilters]. - Fixed #23
    • Fixed null artwork returning from [queryArtwork] on Android 11/R. - Fixed #21

    Documentation

    • Updated README documentation.
    • Updated pubspec documentation.
    Source code(tar.gz)
    Source code(zip)
  • 2.1.1(Aug 24, 2021)

  • 2.1.0(Aug 23, 2021)

    Features

    on_audio_query

    • The plugin now supports [Web].
    • The plugin now utilize [Platform interface] package.

    Web

    • Added:
      • [querySongs].
      • [queryAlbums].
      • [queryArtists].
      • [queryGenres].
      • [queryAudiosFrom].
      • [queryWithFilters].
      • [queryArtwork].
      • [queryDeviceInfo].

    Documentation

    • Updated on_audio_query documentation.
    • Updated README documentation.
    • Updated PLATFORMS documentation.
    • Added documentation to Web platform.
    Source code(tar.gz)
    Source code(zip)
  • 2.0.0-beta.3(Aug 17, 2021)

    See all development changes: CHANGELOG

    Features

    Android

    • Now ALL methods will only "query" if has permission to READ.

    Fixes

    Android

    • Fixed no value returning when using [requestPermission].

    Documentation

    • Updated README documentation.
    • Added more documentation to Android platform.
    Source code(tar.gz)
    Source code(zip)
  • 2.0.0-beta.2(Aug 15, 2021)

    See all development changes: CHANGELOG

    Features

    IOS

    • Now ALL methods will only "query" if has permission to library.
    • Added [addToPlaylist].

    Dart

    • Added [author] and [desc] arguments to [createPlaylist]. (IOS only)

    Fixes

    IOS

    • Fixed crash when using [queryArtwork].
    • Fixed wrong [id] value returning from [PlaylistModel].

    Documentation

    • Updated README documentation.
    Source code(tar.gz)
    Source code(zip)
  • 2.0.0-beta.1(Aug 14, 2021)

    See all development changes: CHANGELOG

    Features

    IOS

    • Added [queryArtwork].

    Fixes

    Kotlin

    • Fixed error when building to [Android].

    IOS

    • Fixed wrong [duration], [dateAdded] and [bookmark] values returning from [SongModel].

    Documentation

    • Updated on_audio_query documentation.
    • Updated README documentation.
    • Updated DEPRECATED documentation.
    • Added documentation to IOS platform.

    ⚠ Important Changes

    @Deprecated

    • [artwork] from [QueryArtworkWidget].
    • [deviceSDK] from [QueryArtworkWidget].
    • [requestPermission] from [QueryArtworkWidget].
    Source code(tar.gz)
    Source code(zip)
  • 2.0.0-beta.0(Aug 13, 2021)

    See all development changes: CHANGELOG

    Features

    on_audio_query

    Documentation

    • Updated on_audio_query documentation.
    • Updated README documentation.
    • Updated DEPRECATED documentation.
    • Created PLATFORMS file.

    ⚠ Important Changes

    Dart

    • Now ALL methods has Named Optional arguments.
    • Changed [queryArtworks] to [queryArtwork].

    @Deprecated

    • [requestPermission] argument from ALL methods.
    • [queryAudios].
    • [artwork] from [SongModel].
    • [path] from [querySongs].
    Source code(tar.gz)
    Source code(zip)
  • 1.2.0(Jul 30, 2021)

    Features

    • Added [path] parameter to [querySongs] and [queryAudio].
    • Added [getMap] to:
      • [SongModel]
      • [AlbumModel]
      • [ArtistModel]
      • [GenreModel]
      • [PlaylistModel]
      • [DeviceModel]

    Documentation

    • Updated README documentation.
    Source code(tar.gz)
    Source code(zip)
  • 1.1.3+1(Jul 19, 2021)

    [1.1.3+1]

    Fixes

    Kotlin

    • Fixed [Kotlin] issue when installing the plugin.

    Documentation

    • Updated README documentation.

    Changes

    Kotlin

    • Downgraded some [Kotlin] dependencies.

    [1.1.3]

    Fixes

    Kotlin

    • Fixed [cursor] problem when using [AudiosFromType.GENRE_NAME] or [AudiosFromType.GENRE_ID] on [queryAudiosFrom]. - Fixed #16 and Fixed #12

    Documentation

    • Updated README documentation.

    Changes

    Kotlin

    • Updated some [Kotlin] dependencies.
    Source code(tar.gz)
    Source code(zip)
  • 1.1.2(Jul 7, 2021)

  • 1.1.1(Jun 24, 2021)

    Features

    Dart/Kotlin

    Fixes

    Kotlin

    • Fixed java.lang.Integer cannot be cast to java.lang.Long from [queryArtworks]. - Fixed #11

    Documentation

    • Updated README documentation.
    • Created DEPRECATED file/history.

    Changes

    Dart

    • Changed from [deviceInfo] to [deviceSDK] on [QueryArtworkWidget].

    ⚠ Important Changes

    Dart

    • Deprecated [deviceInfo] from [QueryArtworkWidget].
    Source code(tar.gz)
    Source code(zip)
  • 1.1.0(Jun 3, 2021)

    Features

    Dart/Kotlin

    • Added [queryDeviceInfo].
    • Added [dateModified] to [SongModel].
    • Added [querySongsBy] and [SongsByType].

    Fixes

    Kotlin

    Dart

    • Fixed wrong name. From [dataAdded] to [dateAdded].

    Documentation

    • Updated README documentation.
    • Updated [OnAudioQueryExample] to add new [queryDeviceInfo] and [QueryArtworkWidget] methods.

    Changes

    Kotlin

    • Updated some [Kotlin] dependencies.
    • Changed some [Kotlin] methods.

    ⚠ Important Changes

    Dart

    • Now [getDeviceSDK], [getDeviceRelease] and [getDeviceCode] are part of [queryDeviceInfo].
    • Now [QueryArtworkWidget] support Android above and below 29/Q/10.
    • Now [size], [albumId], [artistId], [dataAdded], [dataModified], [duration], [track] and [year] from [SongModel] will return [int].
    Source code(tar.gz)
    Source code(zip)
  • 1.0.8(May 19, 2021)

    Features

    Dart

    • Added [artworkClipBehavior], [keepOldArtwork], [repeat] and [scale] to [QueryArtworkWidget].
    • Added comments to [QueryArtworkWidget].

    Fixes

    Kotlin

    • Now [queryArtworks] will return null. - Fixed #6

    Documentation

    • Updated README documentation.

    ⚠ Important Changes

    Dart

    • Now [queryArtworks] return [Uint8List?].
    Source code(tar.gz)
    Source code(zip)
  • 1.0.7(May 18, 2021)

    Features

    Dart/Kotlin

    • Added [queryFromFolder].
    • Added [queryAllPath].
    • Added [_display_name_wo_ext] ([displayName] without extension) to [SongModel]. - Added #5
    • Added [file_extension] (Only file extension) to [SongModel].
    • Added [file_parent] (All the path before file) to [SongModel].
    • Added [Genre] to [queryAudiosFrom].
    • Added [ALBUM_ID], [ARTIST_ID] and [PLAYLIST_ID] to [AudiosFromType]. - Added #2

    Documentation

    • Updated README documentation.

    Changes

    Dart/Kotlin

    • Now [queryAudiosFrom] supports [name] and [id].
    • Now [albumId] from [AlbumModel] return a [int].

    Kotlin

    • Now all [Kotlin] checks will throw a [Exception] if value don't exist.
    • Updated some [Kotlin] dependencies.

    Important Changes

    Dart/Kotlin

    • Changed [ALBUM], [ARTIST] and [PLAYLIST] to [ALBUM_NAME], [ARTIST_NAME] and [PLAYLIST_NAME] in [AudiosFromType].
    Source code(tar.gz)
    Source code(zip)
  • 1.0.6(Apr 8, 2021)

    Fixes

    Kotlin

    • Fixed [queryArtwork] returning null album image in Android 11.

    Documentation

    • Updated README documentation.

    Changes

    Kotlin

    • Removed unnecessary code from [WithFiltersType].
    • Updated some [Kotlin] dependencies.
    Source code(tar.gz)
    Source code(zip)
Owner
Lucas Josino
- Programmer - Mobile Developer - I'm always trying to learn new things
Lucas Josino
Flutter plugin to implement a Boom Menu, with icons, title, subtitle, animated FAB Icons and hide on scrolling.

Flutter Boom Menu Usage The BoomMenu widget is built to be placed in the Scaffold.floatingActionButton argument, replacing the FloatingActionButton wi

Mohanraj 88 Aug 1, 2022
Album Image is based in photo_manager package and has the same concept as image_picker but with a more attractive interface to choose an image or video from the device gallery, whether it is Android or iOS

Album Image is based in photo_manager package and has the same concept as image_picker but with a more attractive interface to choose an image or vide

Phuong Vu 2 Oct 13, 2022
An online query App for COVID-19 statistics developed by Flutter was used.

如果产生其他依赖无法编译的问题,可以尝试将pubspec.yaml中的dependencies中的所有依赖的"^"去掉,重新编译尝试。 nCoV_2019 获取新肺炎实时动态App,支持Android和IOS。 Log 2020.09.03 - 适配Flutter 1.20 2020.07.04 -

FlutterCandies 261 Dec 11, 2022
A music player app that allows you to search for music by artist made using Flutter

Music Player A music player app that allows you to search for music by artist. Music source from iTunes affiliate API. Made using Flutter with simple

muhibush 5 Feb 5, 2022
Become an artist, pixel by pixel.

place Introduction This project was written as a support for my Medium article and is currently running on this website. Getting Started In order to b

Julien Duribreux 11 Dec 16, 2022
Upload Files To Firebase Storage with Flutter. Pick images, videos, or other files from your device and upload them to Firebase.

Flutter Tutorial - Upload Files To Firebase Storage Upload Files To Firebase Storage with Flutter. Pick images, videos, or other files from your devic

Johannes Milke 30 Dec 28, 2022
A simple flutter app that downloads a file from the internet, shows a custom-made download progress dialog and saves the file to device's internal storage

http_downloader A simple flutter app that downloads a file from the internet using the http plugin. It has a custom-designed progress dialog which dis

Akora Ing. Debrah Kwesi Buabeng 4 Apr 6, 2021
ToDo App made with flutter which stores your todos based on their categories. The data is stored in external application storage in your device in JSON file.

⭐ My ToDo ⭐ Built with ❤︎ by Akash Debnath This is my second project on Flutter. This app hepls you to keep record of your ToDos. You can create your

Akash Debnath 38 Dec 25, 2022
Flutter photo - video from album by flutter

archived The package is archived. Please use flutter_wechat_assets_picker. photo image picker, multi picker support ios icloud support video use flutt

Caijinglong 300 Dec 8, 2022
Flutter frontend for downloading free album and playlists (based on a YouTube URL) and uploading them to a Plex server.

Flutter frontend for downloading free album and playlists (based on a YouTube URL) and uploading them to a Plex server. (The project is currently in progress. There are some additional features and ideas I want to implement.)

null 1 Jan 9, 2022
Fifa world cup album manager - 8ª edition of Dart Week from Academia do Flutter

DartWeek 8ª edição - FIFA WORLD CUP album manager App para você gerir suas figurinhas da copa! Com o padrão de projeto MVP, usando SetState, Integraçã

Erilândio Santos Medeiros 4 Oct 17, 2022
Save image to album or sandbox

image_save Save image to album, support Android and iOS. Permission Android Add the following statement in AndroidManifest.xml: <uses-permission andro

Samoy 20 Nov 1, 2022
SSH no ports provides ssh to a remote Linux device with out that device having any ports open

Ssh! No ports ssh no ports provides a way to ssh to a remote linux host/device without that device having any open ports (not even 22) on external int

The Atsign Foundation 224 Dec 21, 2022
Music-App-Flutter - This is a flutter app which has some songs displayed in the form of a list and user can play any of them by clicking on the name of the song.

music_player_app A music player app made by me in flutter About the App This is a music player which i made to play audio files which we have passed i

Harsh Kumar Khatri 3 Apr 1, 2021
Spartial - A flutter app that automatically skips the lesser parts of Spotify songs

Spartial (Spartial.app) Mobile app that lets you automatically skip parts of Spo

Ruud Brouwers 3 Mar 16, 2022
Simple app for both Android and Windows to sync Audio Trip songs from the Audio Trip Choreography Discord

ATCD Choreography Sync Simple app for both Android (Oculus Quest native) and Windows (PCVR) to sync Audio Trip songs from the Audio Trip Choreography

atcd 2 Nov 15, 2022
Flutter Package used to 'edit' basics aspects [Brightness, Contrast, Saturation, etc...] from a widget or image.

on_image_matrix on_image_matrix is a Flutter Package used to 'edit' basics aspects [Brightness, Contrast, Saturation, etc...] from a widget or image.

Lucas Josino 6 Oct 23, 2022
This repo contains a collection of permission related Flutter plugins which can be used to request permissions to access device resources in a cross-platform way.

Flutter Permission Plugins Deprecation Notice This repository has been replaced by the Flutter permission_handler plugin and will not longer be mainta

Baseflow 51 Dec 13, 2021
Flutter plugin that leverages Storage Access Framework (SAF) API to get access and perform the operations on files and folders.

Flutter plugin that leverages Storage Access Framework (SAF) API to get access and perform the operations on files and folders.

Vehement 8 Nov 26, 2022