在 Dart 中将可选值作为带有默认值的构造函数参数传递?

问题描述 投票:0回答:2

我有一个类

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 新手,有更好的方法来处理这种情况吗?

flutter dart
2个回答
1
投票

你绝对可以做到!

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;
}

0
投票

尝试下面的代码:

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。

© www.soinside.com 2019 - 2024. All rights reserved.