# on_audio_query [![Pub.dev](https://img.shields.io/pub/v/on_audio_query?color=9cf&label=Pub.dev&style=flat-square)](https://pub.dev/packages/on_audio_query) [![Platforms](https://img.shields.io/badge/Platforms-Android%20%7C%20IOS%20%7C%20Web-9cf?&style=flat-square)]() [![Languages](https://img.shields.io/badge/Languages-Dart%20%7C%20Kotlin%20%7C%20Swift-9cf?&style=flat-square)]() [Flutter](https://flutter.dev/) Plugin used to query audios/songs 🎶 infos [title, artist, album, etc..] from device storage.
**Any problem? [Issues](https://github.com/LucJosin/on_audio_query/issues)**
**Any suggestion? [Pull request](https://github.com/LucJosin/on_audio_query/pulls)**
### Topics: * [Installation](#installation) * [Platforms](#platforms) * [Overview](#overview) * [Examples](#examples) * [Gif Examples](#gif-examples) * [License](#license) ## 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](https://github.com/LucJosin/on_audio_query/blob/main/on_audio_query/PLATFORMS.md)** ## Installation: Add the following code to your `pubspec.yaml`: ```yaml dependencies: on_audio_query: ^2.9.0 ``` ### Request Permission: #### Android: To use this plugin add the following code to your [AndroidManifest.xml](https://github.com/LucJosin/on_audio_query/blob/main/on_audio_query/example/android/app/src/main/AndroidManifest.xml) ```xml ``` #### IOS: To use this plugin add the following code to your [Info.plist](https://github.com/LucJosin/on_audio_query/blob/main/on_audio_query/example/ios/Runner/Info.plist) ``` NSAppleMusicUsageDescription $(PROJECT_NAME) requires access to media library ``` ## 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. ## Overview: All types of methods on this plugin: ### Artwork Widget ```dart Widget someOtherName() async { return QueryArtworkWidget( id: , type: ArtworkType.AUDIO, ); } ``` **See more: [QueryArtworkWidget](https://pub.dev/documentation/on_audio_query/latest/on_audio_query/QueryArtworkWidget-class.html)** ## Examples: #### OnAudioQuery ```dart final OnAudioQuery _audioQuery = OnAudioQuery(); ``` #### Query methods: - queryAudios(); - queryAlbums(); - queryArtists(); - queryPlaylists(); - queryGenres(). ```dart someName() async { // Query Audios List audios = await _audioQuery.queryAudios(); // Query Albums List 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'. ```dart 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 ```dart someName() async { // DEFAULT: ArtworkFormat.JPEG, 200 and false Uint8List something = await _audioQuery.queryArtwork( , ArtworkType.AUDIO, ..., ); } ``` Or you can use a basic and custom Widget. **See example [QueryArtworkWidget](#artwork-widget)** ## Gif Examples: | | | | | |:---:|:---:|:---:|:---:| | | | | | | Songs | Albums | Playlists | Artists | ## LICENSE: * [LICENSE](https://github.com/LucJosin/on_audio_query/blob/main/on_audio_query/LICENSE) > * [Back to top](#on_audio_query)