Flutter报错:Class 'Future<dynamic>'无map实例方法,求解决方案
问题原因
readJson()是异步函数,返回的是Future<dynamic>对象,而非直接的可迭代数据列表。你直接对Future调用map方法,自然会报错——因为Future类根本没有map这个实例方法。
解决方法
由于initState()不能直接标记为async,你需要通过以下两种方式处理异步数据:
方式一:使用then回调
List<LatLng> polylineCoordinates = []; @override void initState() { super.initState(); readJson().then((dataList) { setState(() { polylineCoordinates = dataList.map((e) => LatLng(e['lat'], e['long'])).toList(); }); }); }
方式二:封装异步加载方法(推荐)
把数据加载逻辑抽成单独的异步方法,在initState里调用:
List<LatLng> polylineCoordinates = []; @override void initState() { super.initState(); _loadPolylineData(); } Future<void> _loadPolylineData() async { final dataList = await readJson(); setState(() { polylineCoordinates = dataList.map((e) => LatLng(e['lat'], e['long'])).toList(); }); }
注意事项
- 务必先调用
super.initState(),这是Flutter初始化生命周期的强制要求,不能放在异步逻辑之后 - 异步加载期间,
polylineCoordinates是空列表,建议在UI层添加加载状态提示(比如CircularProgressIndicator),避免空数据导致的异常 - 确认
readJson()返回的是包含lat和long字段的数组,否则后续转换LatLng时可能会出现空指针错误
内容的提问来源于stack exchange,提问作者Renzo
相关产品推荐
相关产品推荐

