在MaterialApp类中,有一个属性调用构建器。
是否有关于如何使用构建器属性的示例或教程?
答案 0 :(得分:7)
builder
属性用于覆盖MaterialApp
隐式设置的属性,例如Navigator
,MediaQuery
或国际化。
例如,人们可能希望使用自定义路由转换覆盖Navigator
:
MaterialApp(
builder: (_, __) {
return Navigator(
// TODO: add custom transition
);
}
);
答案 1 :(得分:2)
builder
可用于使用父窗口小部件包装路由小部件。例如,如果您有一个LoadingSpinner
小部件,则不要在其中包装每个路由小部件。您可以简单地做到:
builder: (context, widget) => LoadingSpinner(child: widget)
widget
就是您在该特定路径中拥有的任何小部件。
另一个有用的用例是,如果您拥有需要一种语言的顶级BLoC(例如登录BLoC):
MaterialApp(
... // All the config properties
builder: (context, widget) => Provider<LoginBloc>(
// This line has access to the Locales
builder: (_) => LoginBloc(languageCode: Localizations.localeOf(context).languageCode),
dispose: (_, bloc) => bloc.dispose(),
child: widget, // `widget` is either ProfilePage or LoginPage`
),
supportedLocales: [
const Locale('en', ''), // English
const Locale('da', ''), // Danish
// ... other locales the app supports
],
routes: <String, WidgetBuilder>{
'/profile': (context) => ProfilePage(),
'/login': (context) => LoginPage(),
},
),
);
如果将Provider
作为MaterialApp
的父对象,Localizations.localeOf(context)
将会崩溃。因此,构建器在这里显示出它的价值。
以上假设您知道BLoC模式是什么,Provider
是什么。