如何在类构造函数中为 Map 类型变量分配默认值?

Lea*_*dro 5 dart flutter

我正在尝试创建一个类构造函数,其中唯一的参数是 Map 类型。

class ProductManager extends StatefulWidget {
  final Map initialProduct;

  ProductManager(this.initialProduct =  {'title': '', 'image': ''});

}
Run Code Online (Sandbox Code Playgroud)

我收到这两个错误:

命名参数必须用大括号括起来('{' 和 '}').dart(named_pa​​rameter_outside_group)


可选参数的默认值必须是constant.dart(non_constant_default_value)

通过以下方式更改我的代码,我解决了第二个错误:

ProductManager(this.initialProduct =  const {'title': '', 'image': ''});
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?为什么Map变量与其他类型不同?

Adr*_*uri 5

如果您为可选的命名参数提供默认值,如下所示,您将无法修改默认常量映射

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)


Ric*_*eap 2

您只能为可选的命名参数提供默认值。命名参数包含在构造函数声明中的大括号中。尝试这个:

class ProductManager {
  final Map initialProduct;

  ProductManager({this.initialProduct = const {'title': '', 'image': ''}});
}
Run Code Online (Sandbox Code Playgroud)