MaterialApp

Flutter API学习

MaterialApp

简介

MaterialApp表示,一个APP使用纸墨设计语言(Material Design),里面包含了纸墨设计风格应用所需要的基本控件。

构造器

const MaterialApp({
	Key key,
	GlobalKey<NavigatorState> navigatorKey,
	Widget home,
	Map<String, WidgetBuilder> routes: const {},
	String initialRoute,
	RouteFactory onGenerateRoute,
	RouteFactory onUnknownRoute,
	List<NavigatorObserver> navigatorObservers: const [],
	TransitionBuilder builder,
	String title: '',
	GenerateAppTitle onGenerateTitle,
	Color color,
	ThemeData theme,
	Locale locale,
	Iterable<LocalizationsDelegate> localizationsDelegates,
	LocaleListResolutionCallback localeListResolutionCallback,
	LocaleResolutionCallback localeResolutionCallback,
	Iterable<Locale> supportedLocales: const [Locale('en', 'US')],
	bool debugShowMaterialGrid: false,
	bool showPerformanceOverlay: false,
	bool checkerboardRasterCacheImages: false,
	bool checkerboardOffscreenLayers: false,
	bool showSemanticsDebugger: false,
	bool debugShowCheckedModeBanner: true
})

构造器参数说明

TransitionBuilder builder

一个构造器,用于插入导航的部件,但是低于 WidgetsApp 所创建的部件。或者用于将导航更换。

例如,从BuildContext传递来的,如 Directionality,Localizations,DefaultTextStyle,MediaQuery等方法都是可行的。他们也可以以重写的方式来影响导航其中的所有路径。

这种方式很少使用,但是可以用于当你希望改变APP中的默认值。例如,在使用英语时,却用从右到左显示或者重载MediaQuery指标来为将来要显示的广告留下空白的OEM代码的插件。

如果想专门覆盖标题来实现本地个性化,请考虑onGenerateTitle。

builder的回调通过两个参数,一个是 BuildContext (as context) ,一个是 Navigator widget (as child)。

如果没有使用home, routes, onGenerateRoute, or onUnknownRoute来提供规则,则builder有义务来提供规则。

String title

这个和启动图标名字是不一样的,和当前 Activity 的名字也是不一样的。 这个 Title 是用来定义任务管理窗口界面所看到应用名字的。在原生 Android 系统中点击圆圈 Home 按钮右边的方块按钮就会打开多任务切换窗口。在任务管理窗口中所显示的应用名字,就是title

ThemeData theme

定义应用所使用的主题颜色,在纸墨设计中定义了 primaryColor、accentColor、hintColor 等颜色值。可以通过这个来指定一个 ThemeData 定义应用中每个控件的颜色。

Widget home

App默认路径的组件。

除非initialRoute属性被指定或无法正常显示,则home是在应用程序正常启动时首先显示的。

为了能够直接调用Theme.of, MediaQuery.of等,可以在构造时设定home参数,你能够使用一个Builder部件(Builder widget)来获得BuildContext

如果home属性被指定,则routes属性中不能包含 / 。因为home将它取代了。

如果routes被提供,不管是通过home, routes, onGenerateRoute, 或是onUnknownRoute,则Navigator是唯一被构建的。如果没有被提供,则builder属性不能为null。

在使用home属性和builder属性之间的不同是:home的子树在程序中被安插低于Navigator的(二者皆低于Overlay)。因此,对于home来说,对话框将自动工作,routes table将被使用,包括Navigator.push and Navigator.pop 等APIs也将如期工作。相反的是,从builder返回来的控件将被放置在Navigator上面(如果有的话)。

String initialRoute

如果构建了Navigator,则这是最先显示的线路的名字。

默认值为Window.defaultRouteName,但这个值可能被启动应用程序的代码重写。

如果路由包含斜杠,则将其视为“深层链接”,在推送此路径之前,也会推送通向此路径的路径。例如,如果路线是/a/b/c,那么应用程序将与三条路线开始/a,/a/b和/a/b/c加载的顺序。

如果此进程的任何部分无法生成线路,则忽略initialRoute并使用Navigator.defaultRouteName(/)。如果routes被提供,不管是通过home, routes, onGenerateRoute, 或是onUnknownRoute,则Navigator是唯一被构建的。如果没有被提供,则builder属性不能为null,且initialRoute也不能为null。

Color color

在操作系统界面中用于应用程序的主要颜色。

例如,在Android上,这是应用程序切换器中应用程序使用的颜色。

Map < String, WidgetBuilder > routes

应用的顶级导航表格,这个是多页面应用用来控制页面跳转的,类似于网页的网址,定义应用中页面跳转规则。 该对象是一个 Map<String, WidgetBuilder>。

当使用Navigator.pushNamed来路由的时候,会在routes查找路由名字,然后使用对应的WidgetBuilder来构造一个带有页面切换动画的MaterialPageRoute,该容器将跳转至新的路径。

如果应用只有一个界面,则不用设置这个属性,使用home设置这个界面即可。

如果home不为null,当routes中包含Navigator.defaultRouteName(’/’)的时候会出错,两个都是home冲突了。

如果所查找的路由在routes中不存在,则会通过onGenerateRoute来构建页面。

GlobalKey< NavigatorState > navigatorKey

构建导航器时所使用的密钥。

如果指定了navigatorKry,则可以直接操作导航器,而无需先通过Navigator.of从BuildContext获取导航器,即从nacigatorKey,使用GlobalKey.currentState gatter。

如果更改了此项,将创建一个新的Navigator,从而丢失该过程中的所有应用程序状态; 在这种情况下, 还必须更改navigatorObservers,因为之前的观察者将附加到上一个导航器。

如果onGenerateRoute不为null,则Navigator被创建。如果他为null,则navigatorKey必须为null。

List< NavigatorObserver > navigatorObservers

为此应用程序创建的Navigator的观察者列表。

如果更改了navigatorKey,则必须将此列表替换为新创建的观察者列表 。

如果routes被提供,不管是通过home, routes, onGenerateRoute, 或是onUnknownRoute,则Navigator是唯一被构建的。如果没有被提供,则navigatorObservers必须为一个空的list,且builder不能为null。

RouteFactory onGenerateRoute

当App被引导到一个被命了名的路径时,会使用这个回调函数。一般使用这个来生成界面。

当在创建路径来处理被指定的initialRoute时,onGenerateRoute返回 null。则所有的路径都会被舍弃掉并且使用 Navigator.defaultRouteName。

在正常的应用程序操作期间,onGenerateRoute回调将仅接着路径名被推送,并永远不应返回null。

如果routes不包含请求的线路,则使用此方法。

bool debugShowMaterialGrid

是否显示 纸墨设计 基础布局网格,用来调试 UI 的工具

bool showPerformanceOverlay

显示性能标签

bool checkerboardRasterCacheImages
bool showSemanticsDebugger
bool debugShowCheckedModeBanner

各种调试开关

备注

1)纸墨设计语言:即Material Design,是谷歌引导的一种设计风格。于2018 Google I/O 发布了 Material Design 2。

赞赏

如对您有帮助,支持我,不胜感激
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值