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
相关产品推荐
相关产品推荐

