Dart中使用map函数时出现Expected to find )错误,请求排查
Dart中map函数作为可迭代对象时的语法错误修复
在Dart中使用map函数时出现报错:Expected to find ) for map function as iterable,错误提示明确指出.toList()前缺少)。
报错代码
Future _addPostMedia() { debugLog('Adding post media'); return Future.wait(_data.remainingCompressedMediaToUpload .map(_uploadPostMediaItem as Function(File e)) as Iterable<Future> .toList());}
可正常运行的参考代码
Future _compressPostMedia() { debugLog('Compressing post media'); return Future.wait( _data.remainingMediaToCompress.map(_compressPostMediaItem) .toList());}
错误原因
报错的核心是类型转换的括号位置错误。你将as Iterable<Future>直接附加在map(...)之后,导致Dart语法解析时误判:它会认为map方法的调用尚未结束,后续的.toList()被错误归属到类型转换表达式的范围内,因此抛出缺少)的语法错误。
修复方案
方案一:修正括号范围
给map(...) as Iterable<Future>整体添加括号,让Dart明确这是一个完整的表达式,之后再调用.toList():
Future _addPostMedia() { debugLog('Adding post media'); return Future.wait( (_data.remainingCompressedMediaToUpload .map(_uploadPostMediaItem as Function(File e)) as Iterable<Future>) .toList());}
方案二:利用泛型替代显式类型转换
如果_uploadPostMediaItem的返回值本身就是Future,可以直接给map指定泛型<Future>,借助Dart的类型推断省去显式类型转换,代码更简洁:
Future _addPostMedia() { debugLog('Adding post media'); return Future.wait( _data.remainingCompressedMediaToUpload .map<Future>(_uploadPostMediaItem) .toList());}
内容的提问来源于stack exchange,提问作者Ananth
相关产品推荐
相关产品推荐

