on_audio_query 2.5.3+1
on_audio_query: ^2.5.3+1 copied to clipboard
Flutter Plugin used to query audios/songs infos [title, artist, album, etc..] from device storage.
example/lib/main.dart
/*
=============
Author: Lucas Josino
Github: https://github.com/LucJosin
Website: https://lucasjosino.com/
=============
Plugin/Id: on_audio_query#0
Homepage: https://github.com/LucJosin/on_audio_query
Pub: https://pub.dev/packages/on_audio_query
License: https://github.com/LucJosin/on_audio_query/blob/main/LICENSE
Copyright: © 2021, Lucas Josino. All rights reserved.
=============
*/
import 'package:flutter/material.dart';
import 'package:on_audio_query/on_audio_query.dart';
import 'package:flutter/foundation.dart' show kIsWeb;
void main() {
runApp(
const MaterialApp(
home: Songs(),
),
);
}
class Songs extends StatefulWidget {
const Songs({Key? key}) : super(key: key);
@override
_SongsState createState() => _SongsState();
}
class _SongsState extends State<Songs> {
final OnAudioQuery _audioQuery = OnAudioQuery();
@override
void initState() {
super.initState();
requestPermission();
}
requestPermission() async {
// Web platform don't support permissions methods.
if (!kIsWeb) {
bool permissionStatus = await _audioQuery.permissionsStatus();
if (!permissionStatus) {
await _audioQuery.permissionsRequest();
}
setState(() {});
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text("OnAudioQueryExample"),
elevation: 2,
),
body: FutureBuilder<List<SongModel>>(
// Default values:
future: _audioQuery.querySongs(
sortType: null,
orderType: OrderType.ASC_OR_SMALLER,
uriType: UriType.EXTERNAL,
ignoreCase: true,
),
builder: (context, item) {
// Loading content
if (item.data == null) return const CircularProgressIndicator();
// When you try "query" without asking for [READ] or [Library] permission
// the plugin will return a [Empty] list.
if (item.data!.isEmpty) return const Text("Nothing found!");
// You can use [item.data!] direct or you can create a:
// List<SongModel> songs = item.data!;
return ListView.builder(
itemCount: item.data!.length,
itemBuilder: (context, index) {
return ListTile(
title: Text(item.data![index].title),
subtitle: Text(item.data![index].artist ?? "No Artist"),
trailing: const Icon(Icons.arrow_forward_rounded),
// This Widget will query/load image. Just add the id and type.
// You can use/create your own widget/method using [queryArtwork].
leading: QueryArtworkWidget(
id: item.data![index].id,
type: ArtworkType.AUDIO,
),
);
},
);
},
),
);
}
}