构建器模式是在Flutter中创建可组合的UI的一个基本构建块。
因此,Flutter暴露了方便的构建器类型,这些类型在许多部件类中被用作参数。
下面是Flutter SDK中的几个例子。
/// Signature for a function that creates a widget, e.g. [StatelessWidget.build]
/// or [State.build].
typedef WidgetBuilder = Widget Function(BuildContext context);
/// Signature for a function that creates a widget for a given index, e.g., in a
/// list.
typedef IndexedWidgetBuilder = Widget Function(BuildContext context, int index);
构建器的一个非常常见的用例是在用Navigator 推送一个新的路由。
Navigator.of(context).push(MaterialPageRoute(
builder: (context) => DetailPage(),
));
然而,如果不使用构建器中的上下文参数,可以用`_` (这是Dart中有效的标识符名称)代替。
Navigator.of(context).push(MaterialPageRoute( builder: (_) => DetailPage(), ));
这也适用于需要一个以上参数的构建器。例如,这里有一个`ListView` ,上下文参数和索引参数都没有使用。
ListView.builder( itemBuilder: (_, __) => ListTile(title: Text('a list item')), );
请注意我们如何使用`__` (双下划线)来表示第二个参数,以区别于第一个参数。
> 启示:对未使用的构建器参数使用`_` ,具有意义,并使代码更加简洁。