Types Dart参数语法-需要解释

Types Dart参数语法-需要解释,types,dart,syntax,arguments,Types,Dart,Syntax,Arguments,我不小心输入了一些奇怪的东西,它被编译了,但导致了一个类型运行时错误 class BoldText extends Text { BoldText( String data, { textAlign: TextAlign, }) : super( data, textAlign: textAlign, ); } 你可以猜到我来自哪种语言 但是这部分应该是什么意思呢 textAlign: TextAlign IDE

我不小心输入了一些奇怪的东西,它被编译了,但导致了一个类型运行时错误

class BoldText extends Text {
  BoldText(
    String data, {
    textAlign: TextAlign,
  }) : super(
          data,
          textAlign: textAlign,
        );
}
你可以猜到我来自哪种语言

但是这部分应该是什么意思呢

textAlign: TextAlign
IDE提示显示

{dynamic textAlign: TextAlign}

我同样无法破译。

参数
textAlign
是一个可选的命名参数。可以将命名参数的默认值指定为
=value
:value
。前者现在是首选语法,但后者仍然有效

如果省略方法或构造函数的任何(正常)参数的类型,则默认为
动态

因此,该参数的声明实际上是
{dynamic textAlign=textAlign}
,这是一个命名参数,名称为
textAlign
,类型为
dynamic
,默认值为
textAlign


(上面的“(正常)参数”用于排除初始化形式参数,如
MyConstructor(this.myField)
,它从初始化的字段中获取其类型,而不是默认为
dynamic
)。

哇,为什么我们需要:和=作为默认值?正如@RandalSchwartz所说,
语法是命名参数默认值的原始语法。它的目的是使命名参数看起来更像映射文字,而可选位置参数看起来更像列表文字。实际上,这种相似性只是肤浅的,并没有给用户买任何东西,所以我们也允许将
=
用于命名参数。我们现在建议您对位置参数和命名参数都使用
=
,但是没有任何删除旧语法的冲动。