繁体   English   中英

Dart:如何使用“可选链接”或默认值?

[英]Dart: How do I use "optional chaining" or a default value?

因为 Flutter,我从 TypeScript 转向了 Dart,我不能做最简单的事情真是不可思议。

我有style?.p? double? 我想读取它的值或使用0.0作为默认值。 像这样:

EdgeInsets.all(style?.p != null ? style.p : 0.0))

...但是 Dart 说的是double? 不能分配给double 好吧,我正在使用这个三元表达式来检查null ,但我认为 Dart 在类型推断方面不如 TypeScript 聪明。

在此处输入图像描述

任何想法?

试试这个,你可以给可选值,比如 (optionalVaribaleValue ?? DefaultValue) 所以如果 OptionalValue null 然后 DefaultValue 设置

EdgeInsets.all(style?.p ?? 0.0)

EdgeInsets.all(style?.p != null ? style.p : 0.0))不起作用的原因是只有局部变量可以进行类型提升,而style.p不是局部变量。 style.p因此仍然是double? ,导致条件三元表达式的评估类型也是double? .

style?.p分配给局部变量会起作用:

@override
void build(BuildContext context) {
  var p = style?.p;

  return ...
    padding: EdgeInsets.all(p != null ? p : 0));
}

但正如其他人所指出的(并且正如Dart linter 所建议的那样),您应该更喜欢使用专用的 null 运算符:

padding: EdgeInsets.all(style?.p ?? 0);

在哪里,因为style?.p不会被多次评估(避免返回不同值的可能性), ?? 可以评估为不可为空的类型。

您的 style 属性可以为空,并且 p 属性也可以为空,请尝试执行以下操作:

padding: style != null
            ? EdgeInsets.all(style!.p != null ? style!.p! : 0.0)
            : const EdgeInsets.all(0.0)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM