Dart实例化Address类报错:需要5个位置参数但未传入,该如何解决?
报错原因
你定义的Address类使用了必传位置参数的构造函数,要求实例化时必须按顺序传入latitude、longitude、placeFormattedAddress、placeId、placeName5个参数,你调用Address()时没有传入任何参数,即使后续给属性赋值也不符合Dart语法要求,因此触发报错。
方案1:直接在构造时传入所有参数(推荐)
你可以从接口返回的response中取出缺失的参数,实例化时直接传入,不需要后续单独赋值:
if (response != "failed") { var result = response["results"][0]; placeAddress = result["formatted_address"]; // 构造时直接传入所有参数 Address userPickUpAdress = Address( position.latitude, position.longitude, placeAddress, // placeFormattedAddress参数 result["place_id"], // placeId参数 placeAddress // placeName参数,可根据实际需求调整取值 ); Provider.of<AppData>(context, listen: false) .updatePickUpAdress(userPickUpAdress); }
方案2:修改Address类构造函数为可选参数,支持无参实例化
如果你需要先实例化再逐步赋值,就把构造函数改成带默认值的可选参数:
修改address_model.dart中的类定义:
class Address { String placeFormattedAddress; String placeName; String placeId; double latitude; double longitude; // 改为命名可选参数,给定默认值,支持无参构造 Address({ this.latitude = 0.0, this.longitude = 0.0, this.placeFormattedAddress = '', this.placeId = '', this.placeName = '', }); }
修改后你原来的Address userPickUpAdress = Address();代码就可以正常运行,后续给属性赋值的逻辑不需要改动。
内容的提问来源于stack exchange,提问作者Iamshabell
相关产品推荐
相关产品推荐

