Last active
March 2, 2022 17:44
-
-
Save ayoubzulfiqar/34a4e30ab1d3a436387b4bb72d1bb4fa to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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