Skip to content

Instantly share code, notes, and snippets.

@ayoubzulfiqar
Last active March 2, 2022 17:44
Show Gist options
  • Save ayoubzulfiqar/34a4e30ab1d3a436387b4bb72d1bb4fa to your computer and use it in GitHub Desktop.
Save ayoubzulfiqar/34a4e30ab1d3a436387b4bb72d1bb4fa to your computer and use it in GitHub Desktop.
// Method
// Initialize it into the initState
var files = <FileSystemEntity>[];
Future<List<FileSystemEntity>> dirContents(Directory dir) async {
var completer = Completer<List<FileSystemEntity>>();
var lister = dir.list(recursive: false, followLinks: false);
lister.listen((file) async {
FileStat f = file.statSync();
// print(f.toString());
if (f.type == FileSystemEntityType.directory) {
await dirContents(Directory(file.uri.toFilePath()));
} else if (f.type == FileSystemEntityType.file &&
// change the extension type to list file according to desire (such as mp4 for video or pdf or mp3 or docx etc)
file.path.endsWith('.mp3')) {
files.add(file);
}
}, onDone: () {
completer.complete(files);
setState(() {
//
});
});
return completer.future;
}
// initiState
@override
void initState() {
requestingPermission();
// directly passing the direcotry location
dirContents(Directory('/storage/emulated/0'));
super.initState();
}
// this function is not much important
// getDirectory() {
// Directory dir = Directory('/storage/emulated/0');
// var files = dirContents(dir);
// // print(files);
// }
// requesting permissions initialized it in initState
void requestingPermission() async {
var status = await Permission.storage.status;
if (!status.isGranted) {
await Permission.storage.request();
}
}
// Permisions in AndroidMenifest.xml
// add under after the package line ---
<uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_MEDIA_LOCATION" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACTION_MANAGE_WRITE_SETTINGS" />
// Widget Example
ListView.builder(
itemCount: files.length,
itemBuilder: (context, index) {
return Card(
color: AppColors.littleBlack,
child: ListTile(
title: Text(files[index].path.split('/').last),
// leading: const Icon(Icons.audiotrack),
trailing: const Icon(
Icons.play_arrow,
color: Colors.redAccent,
),
));
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment