You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 22:25:18