Flutter之MaterialApp使用详解

 

来自: https://cloud.tencent.com/developer/article/1337184

 

字段

类型

navigatorKey(导航键)

GlobalKey<NavigatorState>

home(主页)

Widget

routes(路由)

Map<String, WidgetBuilder>

initialRoute(初始路由)

String

onGenerateRoute(生成路由)

RouteFactory

onUnknownRoute(未知路由)

RouteFactory

navigatorObservers(导航观察器)

List<NavigatorObserver>

builder(建造者)

TransitionBuilder

title(标题)

String

onGenerateTitle(生成标题)

GenerateAppTitle

color(颜色)

Color

theme(主题)

ThemeData

locale(地点)

Locale

localizationsDelegates(本地化委托)

Iterable<LocalizationsDelegate<dynamic>>

localeResolutionCallback(区域分辨回调)

LocaleResolutionCallback

supportedLocales(支持区域)

Iterable<Locale>

debugShowMaterialGrid(调试显示材质网格)

bool

showPerformanceOverlay(显示性能叠加)

bool

checkerboardRasterCacheImages(棋盘格光栅缓存图像)

bool

checkerboardOffscreenLayers(棋盘格层)

bool

showSemanticsDebugger(显示语义调试器)

bool

debugShowCheckedModeBanner(调试显示检查模式横幅)

bool

1. navigatorKey

navigatorKey.currentState 相当于 Navigator.of(context)

使用

  GlobalKey<NavigatorState> _navigatorKey=new GlobalKey(); new MaterialApp( navigatorKey: _navigatorKey, );

2. home

进入程序后显示的第一个页面,传入的是一个Widget,但实际上这个Widget需要包裹一个Scaffold以显示该程序使用Material Design风格

使用

class MyApp extends StatelessWidget { // This widget is the root of your application. @override Widget build(BuildContext context) { return new MaterialApp( home: new MyHomePage(), ); } } //这是一个可改变的Widget class MyHomePage extends StatefulWidget { @override _MyHomePageState createState() => new _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { @override Widget build(BuildContext context) { return new Scaffold( appBar: new AppBar( title: Text('Title'), ), body: Center( child: Text('Home'), ), ); } }

3. routes

声明程序中有哪个通过Navigation.of(context).pushNamed跳转的路由 参数以键值对的形式传递 key:路由名字 value:对应的Widget

使用

new MaterialApp(
      routes: { '/home':(BuildContext context) => HomePage(), '/home/one':(BuildContext context) => OnePage(), //.... }, );

4 . initialRoute

初始路由,当用户进入程序时,自动打开对应的路由。 (home还是位于一级) 传入的是上面routes的key 跳转的是对应的Widget(如果该Widget有Scaffold.AppBar,并不做任何修改,左上角有返回键)

使用

new MaterialApp(
      routes: { '/home':(BuildContext context) => HomePage(), '/home/one':(BuildContext context) => OnePage(), //.... }, initialRoute: '/home/one', );

5 . onGenerateRoute

当通过Navigation.of(context).pushNamed跳转路由时, 在routes查找不到时,会调用该方法

使用

new MaterialApp(
      routes: { '/home':(BuildContext context) => HomePage(), '/home/one':(BuildContext context) => OnePage(), //.... }, onGenerateRoute: (setting){ //setting.isInitialRoute; bool类型 是否初始路由 //setting.name; 要跳转的路由名key return new PageRouteBuilder( pageBuilder: (BuildContext context, _, __) { //这里为返回的Widget return HomePage(); }, opaque: false, //跳转动画 transitionDuration: new Duration(milliseconds: 200), transitionsBuilder: (___, Animation<double> animation, ____, Widget child) { return new FadeTransition( opacity: animation, child: new ScaleTransition( scale: new Tween<double>(begin: 0.5, end: 1.0) .animate(animation), child: child, ), ); }); } );

6 . onUnknownRoute

效果跟onGenerateRoute一样 调用顺序为onGenerateRoute ==> onUnknownRoute

7 . navigatorObservers

路由观察器,当调用Navigator的相关方法时,会回调相关的操作

使用

new MaterialApp(
      navigatorObservers: [ MyObserver(), ], ); //继承NavigatorObserver class MyObserver extends NavigatorObserver{ @override void didPush(Route route, Route previousRoute) { // 当调用Navigator.push时回调 super.didPush(route, previousRoute); //可通过route.settings获取路由相关内容 //route.currentResult获取返回内容 //....等等 print(route.settings.name); } }

8 . builder

当构建一个Widget前调用 一般做字体大小,方向,主题颜色等配置

使用

new MaterialApp(
      builder: (BuildContext context, Widget child) { return MediaQuery( data: MediaQuery.of(context).copyWith( //字体大小 textScaleFactor: 1.4, ), child: child, ); }, );

9 . title

该标题出现在 Android:任务管理器的程序快照之上 IOS: 程序切换管理器中

使用

new MaterialApp(
      title: 'Flutter应用', );

10 . onGenerateTitle

跟上面的tiitle一样,但含有一个context参数 用于做本地化

new MaterialApp(
      onGenerateTitle: (context){ return 'Flutter应用'; }, );

11 . color

该颜色为Android中程序切换中应用图标背景的颜色,当应用图标背景为透明时

使用

new MaterialApp(
      color: Colors.blue, )

12 . theme

应用程序的主题,各种的定制颜色都可以设置,用于程序主题切换

使用

new MaterialApp(
      theme: new ThemeData( //主题色 primarySwatch: Colors.blue, ), );

13 . locale

当前区域,如果为null则使用系统区域 一般用于语言切换

使用

//传入两个参数,语言代码,国家代码
new MaterialApp(
      Locale('yy','zh'), ); //源码纠正,一些曾经用过的代码(注释后面的日期为不再使用的日期),源码会自动纠正 //来看一下源码 //languageCode 第一个参数 switch (languageCode) { case 'in': return 'id'; // Indonesian; deprecated 1989-01-01 case 'iw': return 'he'; // Hebrew; deprecated 1989-01-01 case 'ji': return 'yi'; // Yiddish; deprecated 1989-01-01 case 'jw': return 'jv'; // Javanese; deprecated 2001-08-13 case 'mo': return 'ro'; // Moldavian, Moldovan; deprecated 2008-11-22 case 'aam': return 'aas'; // Aramanik; deprecated 2015-02-12 case 'adp': return 'dz'; // Adap; deprecated 2015-02-12 case 'aue': return 'ktz'; // =/Kx'au//'ein; deprecated 2015-02-12 case 'ayx': return 'nun'; // Ayi (China); deprecated 2011-08-16 case 'bgm': return 'bcg'; // Baga Mboteni; deprecated 2016-05-30 case 'bjd': return 'drl'; // Bandjigali; deprecated 2012-08-12 case 'ccq': return 'rki'; // Chaungtha; deprecated 2012-08-12 case 'cjr': return 'mom'; // Chorotega; deprecated 2010-03-11 case 'cka': return 'cmr'; // Khumi Awa Chin; deprecated 2012-08-12 case 'cmk': return 'xch'; // Chimakum; deprecated 2010-03-11 case 'coy': return 'pij'; // Coyaima; deprecated 2016-05-30 case 'cqu': return 'quh'; // Chilean Quechua; deprecated 2016-05-30 case 'drh': return 'khk'; // Darkhat; deprecated 2010-03-11 case 'drw': return 'prs'; // Darwazi; deprecated 2010-03-11 case 'gav': return 'dev'; // Gabutamon; deprecated 2010-03-11 case 'gfx': return 'vaj'; // Mangetti Dune !Xung; deprecated 2015-02-12 case 'ggn': return 'gvr'; // Eastern Gurung; deprecated 2016-05-30 case 'gti': return 'nyc'; // Gbati-ri; deprecated 2015-02-12 case 'guv': return 'duz'; // Gey; deprecated 2016-05-30 case 'hrr': return 'jal'; // Horuru; deprecated 2012-08-12 case 'ibi': return 'opa'; // Ibilo; deprecated 2012-08-12 case 'ilw': return 'gal'; // Talur; deprecated 2013-09-10 case 'jeg': return 'oyb'; // Jeng; deprecated 2017-02-23 case 'kgc': return 'tdf'; // Kasseng; deprecated 2016-05-30 case 'kgh': return 'kml'; // Upper Tanudan Kalinga; deprecated 2012-08-12 case 'koj': return 'kwv'; // Sara Dunjo; deprecated 2015-02-12 case 'krm': return 'bmf'; // Krim; deprecated 2017-02-23 case 'ktr'

转载于:https://www.cnblogs.com/pythonClub/p/10612846.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值