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

Flutter中await调用List.add()触发void类型错误的求助

解决Flutter中"This expression has a type of 'void' so its value can't be used"错误

错误原因

触发错误的核心原因是:List.add()方法返回值为void,但你在调用时错误地添加了await关键字。await仅适用于返回Future类型的异步操作,对void类型的同步方法使用await会直接导致类型不匹配错误。

从你的代码定义来看,widget.model.freeMarkerDist是一个List<double>,它的add()方法是同步执行的,完全不需要异步等待。

解决方案

直接移除await关键字即可修复错误,修改后的代码如下:

// 去掉await,直接调用List.add()
widget.model.freeMarkerDist.add(
  Conversion.coordinateDistance(widget.model.userCoords[0],
      widget.model.userCoords[1], destLat, destLng),
);

补充说明

你之前尝试将方法返回类型从void改为Future无法解决问题,因为问题根源不是方法的返回类型,而是对同步方法错误使用了await。只有当调用的方法返回Future(比如Conversion.getBytesFromAsset、网络请求这类异步操作)时,才需要使用await等待结果。

修正后的getFreeMarkers()方法关键片段:

if (widget.model.freeParkingPlaces[i].latitude != null) {
  destLat = double.parse(
      (widget.model.freeParkingPlaces[i].latitude).toString());
  destLng = double.parse(
      (widget.model.freeParkingPlaces[i].longitude).toString());
  // 修复:移除await
  widget.model.freeMarkerDist.add(
    Conversion.coordinateDistance(widget.model.userCoords[0],
        widget.model.userCoords[1], destLat, destLng),
  );
  // 这个是异步方法,保留await
  final Uint8List markerIcon = await Conversion.getBytesFromAsset(
      'assets/images/freeParking.png', 100);
  // 后续代码...
}

内容的提问来源于stack exchange,提问作者chetan jadhav

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 12:30:41