Thanks, James, wrote a quick function for it, but did it in an alternative way. I'm not sure if this method will be more effective or not?
/** * Retrieve all files within a directory */ Future<List<File>> allDirectoryFiles(String directory) { List<File> frameworkFilePaths = []; // Grab all paths in directory return new Directory(directory).list(recursive: true, followLinks: false) .listen((FileSystemEntity entity) { // For each path, if the path leads to a file, then add to array list File file = new File(entity.path); file.exists().then((exists) { if (exists) { frameworkFilePaths.add(file); } }); }).asFuture().then((_) { return frameworkFilePaths; }); }
Edit: OR! An even better approach (in some situations) is to return the file stream to the directory:
/** * Directory file stream * * Retrieve all files within a directory as a file stream. */ Stream<File> _directoryFileStream(Directory directory) { StreamController<File> controller; StreamSubscription source; controller = new StreamController<File>( onListen: () { // Grab all paths in directory source = directory.list(recursive: true, followLinks: false).listen((FileSystemEntity entity) { // For each path, if the path leads to a file, then add the file to the stream File file = new File(entity.path); file.exists().then((bool exists) { if (exists) controller.add(file); }); }, onError: () => controller.addError, onDone: () => controller.close ); }, onPause: () { if (source != null) source.pause(); }, onResume: () { if (source != null) source.resume(); }, onCancel: () { if (source != null) source.cancel(); } ); return controller.stream; }
source share