一个参数只能选择其中一种方式修饰,但可选参数可以是命名参数或者位置参数。
命名可选参数
用指定命名参数 paramName: value,可以调用函数。 例如:
enableFlags(bold: true, hidden: false);
使用 {param1, param2, …} 来指定命名参数,是定义函数:
/// Sets the [bold] and [hidden] flags ...
void enableFlags({bool bold, bool hidden}) {...}
窗口小部件构造函数仅使用命名参数是因为 Flutter 创建实例的表达式比较复杂。 这样创建实例的表达式更容易阅读。
在任何 Dart 代码中使用 @required 注释表示参数是 required 性质的命名参数(不仅仅是Flutter)。
const Scrollbar({Key key, @required Widget child})
当 child 参数缺少时,分析器会提示错误, 此时 Scrollbar 是一个构造函数。
Required 被定义在 meta package。 无论是直接引入(import) package:meta/meta.dart ,或者引入了其他 package,而这个 package 输出(export)了 meta,比如 Flutter 的 package:flutter/material.dart。