一段时间以来,我一直在努力解决这个问题,但无法弄清楚出了什么问题。
enum MyEnum { a, b }
class ClassA {
final MyEnum myEnum;
ClassA({this.myEnum = MyEnum.a});
}
class ClassB {
final ClassA classA;
ClassB({this.classA = ClassA()}); // ClassA expression is underlined with red
}
IDE (Visual Studio代码)报错:
[dart] Default values of an optional parameter must be constant.
我尝试用const
、new
作为前缀,并将值传递给ClassA
构造函数,但没有任何效果。有人能看到我在这里做错了什么吗?
尝试
enum MyEnum { a, b }
class ClassA {
final MyEnum myEnum;
ClassA({this.myEnum});
}
class ClassB {
final ClassA classA;
ClassB({this.classA}); // ClassA expression is underlined with red
}
不需要“=”运算符。当您将值传递给构造函数时,它将自动分配该值。
只有在需要向变量传递默认值时,才使用' = '操作符,从而使它们成为可选参数。
编辑
enum MyEnum { a, b }
class ClassA {
final MyEnum myEnum;
const ClassA({this.myEnum = MyEnum.a});
}
class ClassB {
final ClassA classA;
ClassB({this.classA = const classA()}); // ClassA expression is underlined with red
}
这是我能找到的实现你想要的唯一方法,构造函数应该是默认的
这称为规范化构造函数。
为了让ClassA
能够创建常量值,构造函数必须标记为const。
enum MyEnum { a, b }
class ClassA {
final MyEnum myEnum;
const ClassA({this.myEnum = MyEnum.a}); // <- constructor is const.
}
class ClassB {
final ClassA classA;
ClassB({this.classA = const ClassA()}); // <- creation is const
}
即使只允许常量值作为默认值,您也需要编写const
来创建对象。该语言不会自动在该位置插入const
,因为语言团队希望保留在某些时候允许非常量默认值的选项。
如果未指定“订单日期”,请使用“日期现在”。如果指定了订单日期,请使用它。
class Order {
final String id;
final double amount;
final List cartItems;
final DateTime? dateTime;
Order(
{required this.id,
required this.amount,
required this.cartItems,
dateTime
})
:this.dateTime = ( dateTime != null ? dateTime : DateTime.now() );
}
void main() {
var order_use_default_date = Order(id:"1",amount:1000,cartItems:[1,2,3]);
var order_use_param_date = Order(id:"1",amount:1000,cartItems:[1,2,3],dateTime:DateTime.now().subtract(Duration(days: 2)) );
print(order_use_default_date.dateTime);
print(order_use_param_date.dateTime);
}