Dart/Flutter报错:Future<List>无法用于for循环,需实现Iterable
解决Dart中Future
- 无法在for循环中遍历的问题
报错原因很明确:getFilesList()返回的是Future<List<FileSystemEntity>>,这是一个异步任务对象,并非可迭代的列表,所以不能直接放到for循环里遍历。要解决这个问题,你需要在getFolderFiles()中通过await获取异步任务的实际结果,同时因为调用了异步操作,getFolderFiles()本身也需要改成异步函数。
修改后的代码如下:
List<String> myfiles = []; Future<List<FileSystemEntity>> getFilesList() async { Directory dir = Directory('C:/test'); final List<FileSystemEntity> entities = await dir.list().toList(); return entities; } // 修改为异步函数,返回Future<List<String>> Future<List<String>> getFolderFiles() async { // 先await获取实际的文件列表 final fileEntities = await getFilesList(); // 遍历真实的列表 for(var file in fileEntities) { myfiles.add(file.path.split('/').last); } return myfiles; }
关键说明:
- 只要函数内部使用了
await,该函数必须添加async关键字,并且返回类型要改为Future<原返回类型>,这里就是Future<List<String>> - 必须通过
await getFilesList()拿到List<FileSystemEntity>实例后,才能进行遍历操作 - 可选优化:如果
getFolderFiles()可能被多次调用,建议在遍历前清空myfiles,避免重复添加内容:Future<List<String>> getFolderFiles() async { myfiles.clear(); // 清空旧数据 final fileEntities = await getFilesList(); for(var file in fileEntities) { myfiles.add(file.path.split('/').last); } return myfiles; }
内容的提问来源于stack exchange,提问作者DktPhl2018
相关产品推荐
相关产品推荐

