Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart Boolean作为copyWith的可选参数_Dart_Flutter - Fatal编程技术网

Dart Boolean作为copyWith的可选参数

Dart Boolean作为copyWith的可选参数,dart,flutter,Dart,Flutter,我试图实现一个复制构造函数/方法,但其中一个参数是布尔值。我环顾四周,有人提到使用?value来确定是否提供了该值,但它没有编译: class Model { final String id; final bool isEnabled; Model.copyFrom(Model data, {String id, bool isEnabled}) : id = id ?? data.id, isEnabled = ?isEnabled ??

我试图实现一个复制构造函数/方法,但其中一个参数是
布尔值。我环顾四周,有人提到使用?value来确定是否提供了该值,但它没有编译:

class Model {
  final String id;
  final bool isEnabled;

  Model.copyFrom(Model data,
      {String id,
      bool isEnabled})
   : id = id ?? data.id,
     isEnabled = ?isEnabled ?? data.isEnabled);

}
如果
isEnabled
未随
copyFrom
提供,我如何告诉它使用
数据中的
中的一个。如果未提供该值,则需要保留该值,无论该值为true还是false

?isEnabled
引发语法错误:意外的文本“?”。

isEnabled = ?isEnabled ?? data.isEnabled
已经检查了
null
,不需要
前缀

这应该是你想要的

isEnabled = isEnabled ?? data.isEnabled
没有必要对布尔值进行不同的处理

例如,
或更好的
?。

foo?.isEnabled

foo
null
时,它不会尝试计算
isEnabled
,而是返回
null
,因为
null
没有
isEnabled
获取程序,这将导致异常

为什么不直接使用
??=
运算符?“前缀是什么?”它会产生编译错误;-)
为什么不直接使用???=运算符?
因为在初始值设定项列表中,第一个
isEnabled
引用字段(
this.isEnabled
),第二个引用参数。哦,我明白了。没有注意到这一差异。这可能看起来有点奇怪,但初始化列表中的写访问权限只允许用于字段,而读取访问权限仅允许用于参数值,因此没有歧义。来自C#背景的我认为这是我的问题。再仔细研究一下,正确的值就设定好了。