一段时间以来,我一直在努力解决这个问题,但无法弄清楚出了什么问题。
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
}
Run Code Online (Sandbox Code Playgroud)
IDE (Visual Studio Code) 抱怨:
[dart] Default values of an optional parameter must be constant.
Run Code Online (Sandbox Code Playgroud)
我试图用 const、new 和将值传递给 ClassA 构造函数作为前缀,但没有任何效果。谁能看到我在这里做错了什么?
干杯
Jas*_*ngh 17
尝试
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
}
Run Code Online (Sandbox Code Playgroud)
不需要 '=' 运算符。当您将其传递给构造函数时,它将自动分配该值。
仅当您需要将默认值传递给变量时才使用 '=' 运算符,从而使它们成为可选参数。
编辑
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
}
Run Code Online (Sandbox Code Playgroud)
这是我能找到的唯一方法来实现你想要的,构造函数应该是默认的
这称为规范化构造函数。
Mar*_*nie 14
如果未指定订单日期,请使用 DateNow。如果指定了订单日期,请使用它。
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);
}
Run Code Online (Sandbox Code Playgroud)
为了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
}
Run Code Online (Sandbox Code Playgroud)
const即使只允许常量值作为默认值,您也需要为对象创建编写代码。该语言不会自动const在该位置插入,因为语言团队希望保留在某些时候允许非常量默认值的选项。
你有没有尝试过?
class ClassB {
final ClassA _classA;
ClassB({ClassA classA}): _classA = classA ?? ClassA();
}
Run Code Online (Sandbox Code Playgroud)
假设您想将空列表设置为列表成员的默认值,将“const”添加到该默认值将阻止任何类似 add() 等操作。在这种情况下,您可以使用
class A{
List<int> numbers;
// will raise : Uncaught Error: Unsupported operation: add
// when you call the addEle() method
// A({this.numbers= const []});
A({var passedNumbers}) : this.numbers = passedNumbers??[];
void addEle(int n){
numbers.add(n);
}
}
void main() {
var obj = A();
obj.addEle(5);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
27811 次 |
| 最近记录: |