Flutter 之 MaterialApp 控件

属性

navigatorKey

GlobalKey<NavigatorState> ,navigator 键缓存的跳转页面管理,保存状态。同时也可以自己添加一个进行重写,

import 'package:flutter/widgets.dart';

class HomeNavigatorState extends NavigatorState {
  @override
  void initState() {
    super.initState();
  }
}
GlobalKey<HomeNavigatorState> globalKey = GlobalKey<HomeNavigatorState>();
    return MaterialApp(
      navigatorKey: globalKey,
    );

不过官方推荐尽量少用 GlobalKey 键

home

启动后展示的第一个页面。 根据具体布局展示,返回一个 Widget 就好。如

class HelloPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('首页'),
      ),
      body: Center(
        child: Text('Hello Flutter'),
      ),
    );
  }
}

routes

页面路径的映射,使用如下

routes:{
        Details.routeName: (context) => new Details(),
      }

lib 的 details 路径下

class Details extends StatefulWidget {
  static String routeName = "/details";

  @override
  _DetailsState createState() => new _DetailsState();
}

class _DetailsState extends State<Details> {
  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        title: new Text("详情"),
      ),
      body: Center(
        child: Container(
          color: Colors.blueAccent,
          child: Text(
            '第二页',
            style: TextStyle(fontSize: 32),
          ),
        ),
      ),
    );
  }
}

然后跳转就可以直接使用

Navigator.of(context).pushNamed(Details.routeName);

initialRoute

指定自动跳转的的第二个页面

initialRoute:Details.routeName,

onGenerateRoute

当跳转的页面在 routes 属性未配置或者找不到的时候,则会调用该方法创建页面,反之,则不调用。如

需要配置的方法为

typedef RouteFactory = Route<dynamic> Function(RouteSettings settings);

所以使用如下

 onGenerateRoute: (RouteSettings setting) {
        return new PageRouteBuilder(
          pageBuilder: (BuildContext context, Animation animation,
              Animation secondaryAnimation) {
            //生成的页面
            return new Details();
          },
        );
      },

onUnknownRoute

当跳转的页面在 routes 属性未配置或者找不到并且 onGenerateRoute 返回 null 的时候,则会调用该方法创建页面,反之,则不调用。使用方法和 onGenerateRoute 属性一样,通常这里用来做一些 404 页面。

onUnknownRoute: (RouteSettings setting) {
        //当 onGenerateRoute 返回 null 的时候调用,通常处理一些未找到的页面
        return new PageRouteBuilder(
          pageBuilder: (BuildContext context, Animation animation,
              Animation secondaryAnimation) {
            //这里为返回的Widget
            return Text('404');
          },
        );
      },

navigatorObservers

List<NavigatorObserver> , NavigatorObserver 类方法的监听回调。包括

 navigatorObservers:<NavigatorObserver>[
        new NavigatorObserver(),
      ],
class HomeNavObserver extends NavigatorObserver{
  @override
  void didPush(Route route, Route previousRoute) {
    // TODO: implement didPush
    super.didPush(route, previousRoute);
  }
  @override
  void didPop(Route route, Route previousRoute) {
    // TODO: implement didPop
    super.didPop(route, previousRoute);
  }
  @override
  void didRemove(Route route, Route previousRoute) {
    // TODO: implement didRemove
    super.didRemove(route, previousRoute);
  }
  @override
  void didReplace({Route newRoute, Route oldRoute}) {
    // TODO: implement didReplace
    super.didReplace(newRoute, oldRoute);
  }
  @override
  void didStartUserGesture(Route route, Route previousRoute) {
    // TODO: implement didStartUserGesture
    super.didStartUserGesture(route, previousRoute);
  }
  @override
  void didStopUserGesture() {
    // TODO: implement didStopUserGesture
    super.didStopUserGesture();
  }
}

builder

加载页面前做一些隐性设置,如加载处理,国际化语言设置,字体大小设置,横竖屏方向设置等等,对应的方法为

typedef TransitionBuilder = Widget Function(BuildContext context, Widget child);

如加载页面前做个加载框

 builder: (BuildContext context, Widget child) {
        return Stack(
          alignment: Alignment.center,
          children: <Widget>[
            child,
            const CircularProgressIndicator(
              valueColor: AlwaysStoppedAnimation(Colors.red),
            ),
          ],
        );
      },
image.png

title

任务管理器的标题。

title:"任务管理器的标题",
image.png

onGenerateTitle

任务管理器的标题 。 和 title 属性一样,不同的是可以通过 context 来获取本地资源。设置的优先级高于 title 。

onGenerateTitle:(BuildContext context){
          return  MaterialLocalizations.of(context)....;
      },

color

用于旧的 Android 操作系统上的应用程序栏着色 。新系统上没看到什么效果,忽略。

theme

设置应用的主题

theme: ThemeData(
        //设置页面背景颜色白天黑夜模式
        brightness: Brightness.light,
        //MaterialColor 多种颜色混合的主题色
        primarySwatch: Colors.cyan,
        //Color,主题色
        primaryColor: Colors.cyan,
        //设置文字图标等白天黑夜模式
        primaryColorBrightness: Brightness.light,
        //白天模式颜色
        primaryColorLight: Colors.white,
        //黑夜模式颜色
        primaryColorDark: Colors.black,
        //如 FloatingActionButton 的背景颜色
        accentColor: Colors.green,
        //FloatingActionButton 白天黑夜模式
        accentColorBrightness: Brightness.dark,
        //canvas 绘制的地方的颜色
        //canvasColor: Colors.black,
        //scaffold 控件的默认背景颜色
        scaffoldBackgroundColor: Colors.white,
        //BottomAppBar 控件的默认背景颜色
        bottomAppBarColor: Colors.blue,
        //Card 控件的默认背景颜色
        cardColor: Colors.blue,
        // 分割线默认颜色,如 ListTiles 的分割线
        dividerColor: Colors.blue,
        //高亮默认颜色,如 FloatingActionButton 按下的颜色
        //highlightColor: Colors.black,
        //水波纹默认颜色,如 FloatingActionButton 控件点击的水波纹效果
        splashColor: Colors.red,
        //水波纹的自定义处理
        splashFactory: new HandlerFactory(),
        //如文本选中一行的默认颜色(暂不知道用在哪里)
        selectedRowColor: Colors.white,
        //未选中控件并且有点击事件(如 Checkbox 控件)的默认颜色
        unselectedWidgetColor: Colors.black,
        //禁用不可点击按钮或者复选框的默认颜色
        disabledColor:Colors.red,
        //button 并且 onPress 不为 null 的默认背景颜色
         buttonColor:Colors.grey,
        //button 并且 onPress 不为 null 的样式
         buttonTheme:new ButtonThemeData(

        ),
        //PaginatedDataTable 控件 在选项选中的时候 头部的默认背景颜色
         secondaryHeaderColor:Colors.grey,
        // TextField 文本被选中的颜色。
         textSelectionColor:Colors.grey,
        //TextField 光标的颜色
        cursorColor:Colors.grey,
        //选定文本句柄的默认颜色。
         textSelectionHandleColor:Colors.red,
        //如 进度条 ProgressIndicator 控件的默认背景颜色。
         backgroundColor:Colors.grey,
        //Dialog 控件的默认背景色
         dialogBackgroundColor:Colors.grey,
         //TabBar 控件指示器的默认颜色。
        indicatorColor:Colors.grey,
         //TextField 提示文本或占位符文本的默认文本颜色。
        hintColor:Colors.grey,
        //TextField 输入验证错误提示的默认文本颜色。
        errorColor:Colors.red,
        //Switch,Radio和Checkbox 等控件激活状态的默认颜色。
        toggleableActiveColor:Colors.grey,
        //字体路径
        fontFamily:"lib/fonts/...",
        //页面文本默认样式
        textTheme:TextTheme(),
        //状态栏或者标题栏的文本默认样式,对应 primaryColor。
        primaryTextTheme:TextTheme(),
        //如 FloatingActionButton 的样式,对应 primaryColor。
        accentTextTheme:TextTheme(),
        //对应 InputDecorator、TextField和TextFormField 属性InputDecoration。
        inputDecorationTheme:new InputDecorationTheme(),
        //图标的默认样式。
         iconTheme:new IconThemeData(),
        //标题栏或者状态栏的默认图标样式。
         primaryIconTheme:new IconThemeData(),
        //如 FloatingActionButton 的默认图标样式。
        accentIconTheme:new IconThemeData(),
        //Slider 系列控件的默认样式。
         sliderTheme:new SliderThemeData(),
         //tabBar 控件的默认样式。
         tabBarTheme:new TabBarTheme(),
         //card 控件的默认样式
         cardTheme:new CardTheme(),
         //Chip 控件的默认样式
         chipTheme:new ChipThemeData(),
         //widget 适配的平台。
        platform:TargetPlatform.android,
         //md 控件的点击范围。
         materialTapTargetSize:new MaterialTapTargetSize(),
         //对应平台的默认 MaterialPageRoute 转换。
         pageTransitionsTheme:new PageTransitionsTheme(),
         //AppBar 控件 默认样式
         appBarTheme:new AppBarTheme(),
         //BottomAppBarTheme 控件的默认样式
         bottomAppBarTheme:new BottomAppBarTheme(),
         //一组13种颜色,配置大多数组件的颜色属性。
         //colorScheme:,
         //弹窗默认样式
         dialogTheme:DialogTheme(),
         //floatingActionButton 的默认样式
         floatingActionButtonTheme:new FloatingActionButtonThemeData(),
        //TextTheme、primaryTextTheme和accentTextTheme的颜色文本主题值。
         typography:new Typography(),
         //Cupertino 控件默认样式
         //cupertinoOverrideTheme:,
      ),

darkTheme

黑夜模式的主题样式,设置同 theme 属性

local

设置语言,null 为跟随系统

locale:Locale('zh','cn'),

_languageCode

static const Map<String, String> _deprecatedLanguageSubtagMap = const <String, String>{
    'in': 'id', // Indonesian; deprecated 1989-01-01
    'iw': 'he', // Hebrew; deprecated 1989-01-01
    'ji': 'yi', // Yiddish; deprecated 1989-01-01
    'jw': 'jv', // Javanese; deprecated 2001-08-13
    'mo': 'ro', // Moldavian, Moldovan; deprecated 2008-11-22
    'aam': 'aas', // Aramanik; deprecated 2015-02-12
    'adp': 'dz', // Adap; deprecated 2015-02-12
    'aue': 'ktz', // ǂKxʼauǁʼein; deprecated 2015-02-12
    'ayx': 'nun', // Ayi (China); deprecated 2011-08-16
    'bgm': 'bcg', // Baga Mboteni; deprecated 2016-05-30
    'bjd': 'drl', // Bandjigali; deprecated 2012-08-12
    'ccq': 'rki', // Chaungtha; deprecated 2012-08-12
    'cjr': 'mom', // Chorotega; deprecated 2010-03-11
    'cka': 'cmr', // Khumi Awa Chin; deprecated 2012-08-12
    'cmk': 'xch', // Chimakum; deprecated 2010-03-11
    'coy': 'pij', // Coyaima; deprecated 2016-05-30
    'cqu': 'quh', // Chilean Quechua; deprecated 2016-05-30
    'drh': 'khk', // Darkhat; deprecated 2010-03-11
    'drw': 'prs', // Darwazi; deprecated 2010-03-11
    'gav': 'dev', // Gabutamon; deprecated 2010-03-11
    'gfx': 'vaj', // Mangetti Dune ǃXung; deprecated 2015-02-12
    'ggn': 'gvr', // Eastern Gurung; deprecated 2016-05-30
    'gti': 'nyc', // Gbati-ri; deprecated 2015-02-12
    'guv': 'duz', // Gey; deprecated 2016-05-30
    'hrr': 'jal', // Horuru; deprecated 2012-08-12
    'ibi': 'opa', // Ibilo; deprecated 2012-08-12
    'ilw': 'gal', // Talur; deprecated 2013-09-10
    'jeg': 'oyb', // Jeng; deprecated 2017-02-23
    'kgc': 'tdf', // Kasseng; deprecated 2016-05-30
    'kgh': 'kml', // Upper Tanudan Kalinga; deprecated 2012-08-12
    'koj': 'kwv', // Sara Dunjo; deprecated 2015-02-12
    'krm': 'bmf', // Krim; deprecated 2017-02-23
    'ktr': 'dtp', // Kota Marudu Tinagas; deprecated 2016-05-30
    'kvs': 'gdj', // Kunggara; deprecated 2016-05-30
    'kwq': 'yam', // Kwak; deprecated 2015-02-12
    'kxe': 'tvd', // Kakihum; deprecated 2015-02-12
    'kzj': 'dtp', // Coastal Kadazan; deprecated 2016-05-30
    'kzt': 'dtp', // Tambunan Dusun; deprecated 2016-05-30
    'lii': 'raq', // Lingkhim; deprecated 2015-02-12
    'lmm': 'rmx', // Lamam; deprecated 2014-02-28
    'meg': 'cir', // Mea; deprecated 2013-09-10
    'mst': 'mry', // Cataelano Mandaya; deprecated 2010-03-11
    'mwj': 'vaj', // Maligo; deprecated 2015-02-12
    'myt': 'mry', // Sangab Mandaya; deprecated 2010-03-11
    'nad': 'xny', // Nijadali; deprecated 2016-05-30
    'ncp': 'kdz', // Ndaktup; deprecated 2018-03-08
    'nnx': 'ngv', // Ngong; deprecated 2015-02-12
    'nts': 'pij', // Natagaimas; deprecated 2016-05-30
    'oun': 'vaj', // ǃOǃung; deprecated 2015-02-12
    'pcr': 'adx', // Panang; deprecated 2013-09-10
    'pmc': 'huw', // Palumata; deprecated 2016-05-30
    'pmu': 'phr', // Mirpur Panjabi; deprecated 2015-02-12
    'ppa': 'bfy', // Pao; deprecated 2016-05-30
    'ppr': 'lcq', // Piru; deprecated 2013-09-10
    'pry': 'prt', // Pray 3; deprecated 2016-05-30
    'puz': 'pub', // Purum Naga; deprecated 2014-02-28
    'sca': 'hle', // Sansu; deprecated 2012-08-12
    'skk': 'oyb', // Sok; deprecated 2017-02-23
    'tdu': 'dtp', // Tempasuk Dusun; deprecated 2016-05-30
    'thc': 'tpo', // Tai Hang Tong; deprecated 2016-05-30
    'thx': 'oyb', // The; deprecated 2015-02-12
    'tie': 'ras', // Tingal; deprecated 2011-08-16
    'tkk': 'twm', // Takpa; deprecated 2011-08-16
    'tlw': 'weo', // South Wemale; deprecated 2012-08-12
    'tmp': 'tyj', // Tai Mène; deprecated 2016-05-30
    'tne': 'kak', // Tinoc Kallahan; deprecated 2016-05-30
    'tnf': 'prs', // Tangshewi; deprecated 2010-03-11
    'tsf': 'taj', // Southwestern Tamang; deprecated 2015-02-12
    'uok': 'ema', // Uokha; deprecated 2015-02-12
    'xba': 'cax', // Kamba (Brazil); deprecated 2016-05-30
    'xia': 'acn', // Xiandao; deprecated 2013-09-10
    'xkh': 'waw', // Karahawyana; deprecated 2016-05-30
    'xsj': 'suj', // Subi; deprecated 2015-02-12
    'ybd': 'rki', // Yangbye; deprecated 2012-08-12
    'yma': 'lrr', // Yamphe; deprecated 2012-08-12
    'ymt': 'mtm', // Mator-Taygi-Karagas; deprecated 2015-02-12
    'yos': 'zom', // Yos; deprecated 2013-09-10
    'yuu': 'yug', // Yugh; deprecated 2014-02-28
  };

_countryCode

 static const Map<String, String> _deprecatedRegionSubtagMap = const <String, String>{
    'BU': 'MM', // Burma; deprecated 1989-12-05
    'DD': 'DE', // German Democratic Republic; deprecated 1990-10-30
    'FX': 'FR', // Metropolitan France; deprecated 1997-07-14
    'TP': 'TL', // East Timor; deprecated 2002-05-20
    'YD': 'YE', // Democratic Yemen; deprecated 1990-08-14
    'ZR': 'CD', // Zaire; deprecated 1997-07-14
  };

localizationsDelegates

国际化语言相关

localeListResolutionCallback

国际化语言相关回调

supportedLocales

支持的语言

supportedLocales: [
        const Locale('en'), // English
        const Locale('he'), // Hebrew
        const Locale('zh'), // Chinese
        // ... other locales the app supports
      ],

debugShowMaterialGrid

是否显示调试的网格

showPerformanceOverlay

是否显示 GPU 和 UI 曲线图

checkerboardRasterCacheImages

是否显示光栅缓存图像的棋盘格

checkerboardOffscreenLayers

是否显示层级图

showSemanticsDebugger

是否显示布局边界

debugShowCheckedModeBanner

是否显示右上角的 debug 标签

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,546评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,224评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,911评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,737评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,753评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,598评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,338评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,249评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,696评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,888评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,013评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,731评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,348评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,929评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,048评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,203评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,960评论 2 355

推荐阅读更多精彩内容

  • 当班主任时,开班第一天,我总会问:“同学们,从小到大,你有几个好习惯?这个习惯的标准是:一是天天做;二是...
    张芳_3ac1阅读 320评论 0 0
  • 星儿最近很阴郁,自从那个叔叔来过家里后,爸爸就变得烦躁不安,要么就为一点小事冲她发火,要么就一个人看电视打游戏,一...
    一只狗的故事观阅读 212评论 2 4
  • 代碼量真的很少~還是挺有意思的。
    匡风含情阅读 611评论 0 1
  • 夕阳西下,一钩新月挂在天际,四边万籁俱寂,灯下唯已一人,正是独自一人的小天地,一部手机,一杯香茶,外加一支香烟...
    乔延宾阅读 1,632评论 1 6
  • 这些年陆陆续续,添置了三把伞。虽然不是常常用到,但它们在我心中不容小觑,每每出行都会记得带上一把,每每用到...
    枝头一点绿阅读 421评论 1 2