我有一个类
Foo
,它有一个命名参数 bar
。我想确保 bar
始终具有价值。
我还有一个可选变量
_bar
,它可以为空或具有某个值。
我尝试在构建
String? _bar
时传递 Foo
,但它给了我一个错误。对我来说,如果 _bar
有价值,bar
应该使用 _bar
的值,否则 bar
将是 'Default'
。但好像没那么容易。
class Foo {
Foo({this.bar = 'Default'});
final String bar;
}
String? _bar;
void main() {
// The argument type 'String?' can't be assigned to the parameter type 'String'.
final value = Foo(bar: _bar);
}
我尝试过这个,但我必须在调用它时再次指定
'Default'
,这并不理想。
final value = Foo(bar: _bar ?? 'Default');
我是 Dart 新手,有更好的方法来处理这种情况吗?
你绝对可以做到!
class Foo {
const Foo({String? bar}) : bar = bar ?? 'Default';
final String bar;
}
同时拥有构造函数参数和名为
bar
的字段可能会有点混乱,因此我建议将其中一个命名为其他名称(就像构造函数参数的 barIn
一样。尽管它应该适用于我上面放置的代码
class Foo {
const Foo({String? barIn}) : bar = barIn ?? 'Default';
final String bar;
}
尝试下面的代码:
class Foo {
Foo({this.bar = 'Default'});
final String bar;
}
void main() {
final value = Foo(bar: Foo().bar);
final value1 = Foo(bar: Foo().bar ?? 'Default');
print(value.bar);
print(value1.bar);
}
如果你发现变量为空,那么尝试使用??操作员。 ??运算符的意思是:如果 a 不为 null,则解析为 a。如果 a 为 null,则解析为 b。