我正在尝试创建一个类构造函数,其中唯一的参数是 Map 类型。
class ProductManager extends StatefulWidget {
final Map initialProduct;
ProductManager(this.initialProduct = {'title': '', 'image': ''});
}
Run Code Online (Sandbox Code Playgroud)
我收到这两个错误:
命名参数必须用大括号括起来('{' 和 '}').dart(named_parameter_outside_group)
可选参数的默认值必须是constant.dart(non_constant_default_value)
通过以下方式更改我的代码,我解决了第二个错误:
ProductManager(this.initialProduct = const {'title': '', 'image': ''});
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?为什么Map变量与其他类型不同?
如果您为可选的命名参数提供默认值,如下所示,您将无法修改默认常量映射
class MyClass {
Map myMap;
MyClass({this.myMap = const {}});
}
main() {
MyClass a = MyClass();
a.myMap[0]=1; // Throw error
}
Run Code Online (Sandbox Code Playgroud)
该代码将抛出此错误,因为您无法修改常量:
未捕获错误:不支持的操作:无法修改不可修改的映射
要解决此问题,您可以在创建 的myMap实例时初始化该值。MyClass
class MyClass {
Map myMap;
MyClass({this.myMap = const {}});
}
main() {
MyClass a = MyClass({}); // Provide a non const map
a.myMap[0]=1; // Will work
}
Run Code Online (Sandbox Code Playgroud)
或者您也可以不在构造函数中填充默认值,而是通过直接调用属性或函数来更改映射的值
class MyClass {
Map myMap = {}; // Provide an empty map
MyClass(); // Don't provide a default constructor
}
main() {
MyClass a = MyClass();
a.myMap[0]=1; // Will work
}
Run Code Online (Sandbox Code Playgroud)
您只能为可选的命名参数提供默认值。命名参数包含在构造函数声明中的大括号中。尝试这个:
class ProductManager {
final Map initialProduct;
ProductManager({this.initialProduct = const {'title': '', 'image': ''}});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4464 次 |
| 最近记录: |