美文网首页
Flutter 之 MaterialApp 控件

Flutter 之 MaterialApp 控件

作者: Goach | 来源:发表于2019-09-25 11:14 被阅读0次

    属性

    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 标签

    相关文章

      网友评论

          本文标题:Flutter 之 MaterialApp 控件

          本文链接:https://www.haomeiwen.com/subject/zoghyctx.html