预期有 5 个位置参数,但找到 0 个。尝试添加缺少的参数
5 positional argument(s) expected, but 0 found. Try adding the missing arguments
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()的时候,在下面的代码中我已经初始化了
嗨,Iamshabell,欢迎来到 SO!
您正在尝试在这一行中不带任何参数地使用构造函数:
Address userPickUpAdress = Address();
但是在你的 class 上,构造函数参数是强制性的:
Address(this.latitude, this.longitude, this.placeFormattedAddress, this.placeId, this.placeName);
所以你需要让它们成为可选的或者用所有的参数调用构造函数。
您声明的地址如下:
Address(
this.latitude,
this.longitude,
this.placeFormattedAddress,
this.placeId,
this.placeName,
);
这意味着在初始化地址时,你必须传递五个参数,为了解决这个问题,你必须做两件事。首先,将参数设为可选,这样您就不必 HAVE 将它们传递给构造函数。
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
如果您不希望那样,请随意在构造函数中将 {}
替换为 []
,这也会导致无法使用 required
关键字.
希望这足以解决问题,但请随时询问我是否不清楚某些事情
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()的时候,在下面的代码中我已经初始化了
嗨,Iamshabell,欢迎来到 SO!
您正在尝试在这一行中不带任何参数地使用构造函数:
Address userPickUpAdress = Address();
但是在你的 class 上,构造函数参数是强制性的:
Address(this.latitude, this.longitude, this.placeFormattedAddress, this.placeId, this.placeName);
所以你需要让它们成为可选的或者用所有的参数调用构造函数。
您声明的地址如下:
Address(
this.latitude,
this.longitude,
this.placeFormattedAddress,
this.placeId,
this.placeName,
);
这意味着在初始化地址时,你必须传递五个参数,为了解决这个问题,你必须做两件事。首先,将参数设为可选,这样您就不必 HAVE 将它们传递给构造函数。
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
如果您不希望那样,请随意在构造函数中将 {}
替换为 []
,这也会导致无法使用 required
关键字.
希望这足以解决问题,但请随时询问我是否不清楚某些事情