on_audio_query 2.9.0
Flutter Plugin used to query audios/songs infos [title, artist, album, etc..] from device storage.
on_audio_query
Flutter Plugin used to query audios/songs 🎶 infos [title, artist, album, etc..] from device storage.
Any problem? Issues
Any suggestion? Pull request
Topics:
Platforms:
| Methods | Android | IOS | Web |
|---|---|---|---|
querySongs | ✔️ | ✔️ | ✔️ |
queryAlbums | ✔️ | ✔️ | ✔️ |
queryArtists | ✔️ | ✔️ | ✔️ |
queryPlaylists | ✔️ | ✔️ | ❌ |
queryGenres | ✔️ | ✔️ | ✔️ |
queryAudiosFrom | ✔️ | ✔️ | ✔️ |
queryWithFilters | ✔️ | ✔️ | ✔️ |
queryArtwork | ✔️ | ✔️ | ✔️ |
createPlaylist | ✔️ | ✔️ | ❌ |
removePlaylist | ✔️ | ❌ | ❌ |
addToPlaylist | ✔️ | ✔️ | ❌ |
removeFromPlaylist | ✔️ | ❌ | ❌ |
renamePlaylist | ✔️ | ❌ | ❌ |
moveItemTo | ✔️ | ❌ | ❌ |
checkAndRequest | ✔️ | ✔️ | ❌ |
permissionsRequest | ✔️ | ✔️ | ❌ |
permissionsStatus | ✔️ | ✔️ | ❌ |
queryDeviceInfo | ✔️ | ✔️ | ✔️ |
scanMedia | ✔️ | ❌ | ❌ |
✔️ -> Supported
❌ -> Not Supported
See all platforms methods support
Installation:
Add the following code to your pubspec.yaml:
dependencies:
on_audio_query: ^2.9.0
Request Permission:
Android:
To use this plugin add the following code to your AndroidManifest.xml
<manifest>
<!-- Android 12 or below -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<!-- Android 13 or greater -->
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO"/>
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO"/>
</manifest>
IOS:
To use this plugin add the following code to your Info.plist
<dict>
<key>NSAppleMusicUsageDescription</key>
<string>$(PROJECT_NAME) requires access to media library</string>
</dict>
Some Features:
- Optional and Built-in storage
READandWRITEpermission 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.
Overview:
All types of methods on this plugin:
Artwork Widget
Widget someOtherName() async {
return QueryArtworkWidget(
id: <audioId>,
type: ArtworkType.AUDIO,
);
}
See more: QueryArtworkWidget
Examples:
OnAudioQuery
final OnAudioQuery _audioQuery = OnAudioQuery();
Query methods:
- queryAudios();
- queryAlbums();
- queryArtists();
- queryPlaylists();
- queryGenres().
someName() async {
// Query Audios
List<AudioModel> audios = await _audioQuery.queryAudios();
// Query Albums
List<AlbumModel> albums = await _audioQuery.queryAlbums();
}
scanMedia
You'll use this method when updating a media from storage. This method will update the media 'state' and
Android MediaStore will be able to know this 'state'.
someName() async {
OnAudioQuery _audioQuery = OnAudioQuery();
File file = File('path');
try {
if (file.existsSync()) {
file.deleteSync();
_audioQuery.scanMedia(file.path); // Scan the media 'path'
}
} catch (e) {
debugPrint('$e');
}
}
queryArtwork
someName() async {
// DEFAULT: ArtworkFormat.JPEG, 200 and false
Uint8List something = await _audioQuery.queryArtwork(
<audioId>,
ArtworkType.AUDIO,
...,
);
}
Or you can use a basic and custom Widget. See example QueryArtworkWidget
Gif Examples:
![]() | ![]() | ![]() | ![]() |
|---|---|---|---|
![]() | ![]() | ![]() | ![]() |
| Songs | Albums | Playlists | Artists |







