我有以下代码:
var _editedService = Service(
id: '',
name: '',
description: '',
aboutUs: '',
streetNumber: null,
streetName: '',
suburb: '',
city: '',
province: '',
zipCode: null,
contactNum: null,
email: '',
logoUrl: '',
imageUrl: '',
);
当我运行此程序时,我收到以下错误:
错误:参数类型为"String?"无法分配给参数类型"String",因为"String?"可为null,而"String"不可为null。
我已经完成了另一个Stack响应,但没有成功。
有什么建议吗?
这是服务类别:
class Service with ChangeNotifier {
final String id;
final String name;
final String description;
final String aboutUs;
final double? streetNumber;
final String streetName;
final String suburb;
final String city;
final String province;
final double? zipCode;
final double? contactNum;
final String email;
final String logoUrl;
final String imageUrl;
late final bool? isFavorite;
Service({
required this.id,
required this.name,
required this.description,
required this.aboutUs,
required this.streetNumber,
required this.streetName,
required this.suburb,
required this.city,
required this.province,
required this.zipCode,
required this.contactNum,
required this.email,
required this.logoUrl,
required this.imageUrl,
this.isFavorite = false,
});
void toggleFavoriteStatus() {
isFavorite = !isFavorite!;
notifyListeners();
}
}
使用"quot;在您返回的内容结束时
String? xya = "safdd";
String yz = xya!;
我在dartpad中测试了代码,它完全正常,没有任何问题。
所以代码的其他部分抛出了错误,用错误行号等详细的错误消息更新您的答案。该问题与飞镖零位安全性有关。
这里有一个例子:
main() {
print(add('hello', 'world'));
}
String add(String a, String? b) {
return a + b;
}
上述代码块将引发错误:The argument type 'String?' can't be assigned to the parameter type 'String' because 'String?' is nullable and 'String' isn't
为了解决这个问题,你必须使用空感知操作符:
main() {
print(add('hello', 'world'));
}
String add(String a, String? b) {
return a + b!;
}
注意:!return语句中b
后面的(exclemation标记(。它将解决问题。
这可能有助于
启用null安全时,如果变量末尾没有?
,则变量不能为null。例如:
String myString = "Hello World"; //This CANNOT be null
String? myString = null; //This CAN be null
解决方案可能是将空校验!
作为空,或者如果为空则替换为空字符串。
String myString = myOtherString!
String myString = myOtherString ?? "Something else";