首页 > 解决方案 > 预期有 5 个位置参数,但找到了 0 个。尝试添加缺少的参数

问题描述

address_model.dart

class Address {
String placeFormattedAddress;
String placeName;
String placeId;
double latitude;
double longitude;

Address(this.latitude, this.longitude, 
this.placeFormattedAddress,
  this.placeId, this.placeName);
}

这里是 assistant_methods.dart

if (response != "failed") {
  placeAddress = response["results"][0]. 
["formatted_address"];
  Address userPickUpAdress = Address();
  userPickUpAdress.longitude = position.longitude;
  userPickUpAdress.latitude = position.latitude;
  userPickUpAdress.placeName = placeAddress;

  Provider.of<AppData>(context, listen: false)
      .updatePickUpAdress(userPickUpAdress);
}

错误行位于第 4 行的 assitant_methods.dart 上,这是我调用 Address() 时,在下面的代码中我已经初始化

标签: flutterdartprovider

解决方案


您声明地址如下:

Address(
  this.latitude, 
  this.longitude, 
  this.placeFormattedAddress,
  this.placeId, 
  this.placeName,
);

这意味着在初始化地址时,你必须传递五个参数,为了解决这个问题,你必须做两件事。首先,使参数成为可选的,这样您就不必将它们传递给构造函数。

Address({
  this.latitude, 
  this.longitude, 
  this.placeFormattedAddress,
  this.placeId, 
  this.placeName,
});

请注意{}所有可选参数。

这意味着您可以不向构造函数传递任何值。但也许更好的解决方案是首先简单地传递值。

您需要解决的第二个问题是未初始化变量的值。如果您阅读 placeId,您认为会发生什么?你永远不会分配它。它应该抛出一个错误(就像它一样)吗?它应该是一个空字符串吗?它应该为空吗?针对每一个变量问自己这个问题。

如果变量应该有一个默认值(比如一个空字符串),你可以把它放在构造函数中:

MyClass({this.myValue: 'default value'});

如果你不传递变量应该抛出错误,你可以像你拥有它一样保留变量,或者向构造函数添加一个必需的参数。

MyClass(this.myRequiredVariable, {required this.myOtherRequiredVariable});

最后,如果值应该为空。当你声明变量时。在它的值后面加一个问号表示它可以为空

class MyClass {
  String? myNullableString;
}

最后,值得注意的是,如果你想从构造函数初始化一个值,你必须传递它的名字:

MyClass({this.value});

// when initializing
// MyClass(10); // this won't work
MyClass(value: 10); // This will work

如果您不希望这样,请随意替换构造函数上的{}with [],这也将使required关键字无法使用。

希望这足以解决问题,但随时问我是否不清楚


推荐阅读