flutter中MaterialApp类中的构建器属性的示例?

时间:2018-04-10 08:22:17

标签: flutter

在MaterialApp类中,有一个属性调用构建器。

是否有关于如何使用构建器属性的示例或教程?

2 个答案:

答案 0 :(得分:7)

builder属性用于覆盖MaterialApp隐式设置的属性,例如NavigatorMediaQuery或国际化。

例如,人们可能希望使用自定义路由转换覆盖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是什么。