• Flutter组件-Material属性


    Material属性和说明

     MaterialApp封装了应用程序实现Material Design所需要的一些Widget,实际是一种设计风格,里面会有已有的一些组件(thmem).

    常用的属性:

    序列号字段属性描述
    1navigatorKeyGlobalKey导航键
    2scaffoldMessengerKeyGlobalKey脚手架键
    3homeWidget主页,应用打开时显示的页面.这是在应用程序正常启动时首先显示的Widget,除非制定了initialRoute.如果initialRoute显示失败,也该显示该Widget
    4routesMap应用程序顶级路由表.当使用Navigator.pushNamed进行命名路由的跳转时,会在此表中进行查找并跳转
    5initialRouteString如果构建了导航器,则会显示第一个路由的名称.初始化路由
    6onGenerateRouteRouteFactory路由管理拦截器/回调(Navigator.of(content).pushNamed跳转的时候,如果routes查找不到会调用这个方法)
    7onGenerateInitialRoutesInitialRouteListFactory生成初始化路由
    8onUnknownRouteRouteFactory当onGenerateRoute无法生成路由时调用
    9navigatorObserversList创建导航器的观察者列表
    10builderTransitionBuilder在导航器上面插入小部件
    11titleString程序切换时显示的标题.该属性会在安卓应用管理器APP上方显示,对于ios设备是没有效果的
    12onGenerateTitleGenerateAppTitle程序切换时生成标题字符串
    13colorColor程序切换时应用图标背景颜色(仅安卓有效)
    14themeThemeData定义应用所使用的主题颜色,可以指定一个主题中每个控件的颜色.
    15darkThemeThemeData暗黑模式主题颜色
    16highContrastThemeThemeData系统请求“高对比度”使用的主题
    17highContrastDarkThemeThemeData系统请求“高对比度”暗黑模式下使用的主题颜色
    18themeModeThemeMode使用哪种模式的主题(默认跟随系统)
    19localeLocale初始区域设置
    20localizationsDelegatesIterable本地化代理
    21localeListResolutionCallbackLocaleListResolutionCallback失败或未提供设备的语言环境
    22localeResolutionCallbackLocaleResolutionCallback负责计算语言环境
    23supportedLocalesIterable本地化地区列表
    24debugShowMaterialGridbool绘制基线网格叠加层(仅debug模式)
    25showPerformanceOverlaybool显示性能叠加
    26checkerboardRasterCacheImages(做性能测试的时候才会用到)bool打开栅格缓存图像的棋盘格。
    27checkerboardOffscreenLayers(做性能测试的时候才会用到)bool打开渲染到屏幕外位图的层的棋盘格。
    28showSemanticsDebugger(控件的占位面积,有助于页面布局)bool打开显示可访问性信息的叠加层
    29debugShowCheckedModeBannerbool调试显示检查模式横幅
    30shortcutsMap应用程序意图的键盘快捷键的默认映射。
    31actionsMap包含和定义用户操作的映射
    32restorationScopeIdString应用程序状态恢复的标识符
    33scrollBehaviorScrollBehavior可滚动小部件的行为方式

    属性详解

    1.navigatorKey

    navigatorKey 相当于 Navigator.of(context) ,如果应用程序想实现无 context 跳转,那么可以通过设置该key, 通过 navigatorKey.currentState.overlay.context 获取全局context。

    1. GlobalKey _navigatorKey = GlobalKey();
    2. MaterialApp(
    3. navigatorKey: _navigatorKey,
    4. );

    2.scaffoldMessengerKey

    scaffoldMessengerKey 主要是管理后代的 Scaffolds,可以实现无 context 调用 snack bars

    1. GlobalKey _scaffoldKey = GlobalKey();
    2. MaterialApp(
    3. scaffoldMessengerKey: _scaffoldKey,
    4. );
    5. _scaffoldKey.currentState.showSnackBar(SnackBar(content: Text("show SnackBar")));

    3.home

    程序进入后的第一个界面,传入一个 Widget

    1. ...
    2. MaterialApp(
    3. home: Scaffold(...),
    4. );
    5. ...

    4.routes

    生成路由表,以键值对形式传入 key 为路由名字, value 为对应的Widget

    1. MaterialApp(
    2. routes: {
    3. "/home": (_) => Home(),
    4. "/my": (_) => My()
    5. //....
    6. },
    7. );

    5.initialRoute

    初始路由,如果设置了该参数并且在 routes 找到了对应的key,将会展示对应的 Widget ,否则展示 home

    1. MaterialApp(
    2. routes: {
    3. "/home": (_) => Home(),
    4. "/my": (_) => My()
    5. },
    6. initialRoute: "/home",
    7. )

    6.onGenerateRoute

    当跳转路由时,如果在 routes 找不到对应的 key ,会执行该回调,会调用会返回一个 RouteSettings,该对象中有 name 路由名称、 arguments 路由参数。

    1. MaterialApp(
    2. routes: {
    3. "/home": (_) => Home(),
    4. "/my": (_) => My()
    5. },
    6. initialRoute: "/home",
    7. onGenerateRoute: (setting) {
    8. // 这里可以做进一步的逻辑处理
    9. return MaterialPageRoute(builder: (_) => Home());
    10. },
    11. )

    7.onGenerateInitialRoutes

    如果提供了 initialRoute ,则用于生成初始路由的路由生成器回调,如果未设置此属性,则底层 Navigator.onGenerateInitialRoutes 将默认为 Navigator.defaultGenerateInitialRoutes

    1. MaterialApp(
    2. initialRoute: "/home",
    3. onGenerateInitialRoutes: (initialRoute) {
    4. return [
    5. MaterialPageRoute(builder: (_) => Home()),
    6. MaterialPageRoute(builder: (_) => My()),
    7. ];
    8. }
    9. )

    8.onUnknownRoute

    效果和 onGenerateRoute 一样,只是先走 onGenerateRoute ,如果无法生成路由时则在调用 onUnknownRoute 。

    1. MaterialApp(
    2. routes: {
    3. "/home": (_) => Home(),
    4. "/my": (_) => My()
    5. },
    6. initialRoute: "/home",
    7. onGenerateRoute: (setting) {
    8. return null;
    9. },
    10. onUnknownRoute: (setting) {
    11. return MaterialPageRoute(builder: (_) => Home());
    12. },
    13. )

    9.navigatorObservers

    路由监听器,主要是就是监听页面路由堆栈的变化,当页面进行 push pop remove replace 等操作时会进行监听

    1. MaterialApp(
    2. navigatorObservers: [
    3. MyObserver()
    4. ],
    5. )
    6. class MyObserver extends NavigatorObserver {
    7. @override
    8. void didPush(Route route, Route previousRoute) {
    9. print(route);
    10. print(previousRoute);
    11. super.didPush(route, previousRoute);
    12. }
    13. }

     

    10.builder

    当构建 Widget 前调用,主要用于字体大小、主题颜色等配置

    1. MaterialApp(
    2. routes: {
    3. "/home": (_) => Home(),
    4. "/my": (_) => My()
    5. },
    6. initialRoute: "/home",
    7. onGenerateRoute: (setting) {
    8. return null;
    9. },
    10. onUnknownRoute: (setting) {
    11. return MaterialPageRoute(builder: (_) => Home());
    12. },
    13. builder: (_, child) {
    14. return Scaffold(appBar: AppBar(title: Text("build")), body: child,);
    15. },
    16. )

    11.title

    Android:任务管理器的程序快照之上 IOS: 程序切换管理器中

    1. MaterialApp(
    2. title: 'Flutter应用',
    3. );

    12.onGenerateTitle

    如果非空,则调用此回调函数以生成应用程序的标题字符串,否则会使用 title 。每次重建页面是该方法就会回调执行

    1. MaterialApp(
    2. title: 'Flutter应用',
    3. onGenerateTitle: (_) {
    4. return "我的天";
    5. },
    6. );

    13.color

    设置该值的在程序切换时应用图标的背景颜色,当应用图标为透明时

    1. MaterialApp(
    2. color: Colors.blue,
    3. )

    14.theme

    如果指定了 darkTheme ,那么用于提供用户界面的深色版本。如果提供了 darkTheme , themeMode 将控制将使用哪个主题。默认值是 ThemeData.light() 应用程序的主题颜色

    1. MaterialApp(
    2. theme: ThemeData(
    3. // 主要颜色
    4. primaryColor: Colors.red
    5. ),
    6. )

    15.darkTheme

    应用程序深色主题颜色

    1. MaterialApp(
    2. theme: ThemeData(
    3. // 主要颜色
    4. primaryColor: Colors.red
    5. ),
    6. )

    16.highContrastTheme

    当系统请求“高对比度”时使用的 ThemeData ,当该值为空时会用 theme 应用该主题

    1. MaterialApp(
    2. highContrastTheme: ThemeData(
    3. primaryColor: Colors.pink
    4. ),
    5. )

    17.highContrastDarkTheme

    当系统再暗黑模式下请求“高对比度”时使用的 ThemeData ,当该值为空时会用 darkTheme 应用该主题

    1. MaterialApp(
    2. highContrastDarkTheme: ThemeData(
    3. primaryColor: Colors.green
    4. ),
    5. )

    18.themeMode

    白天模式和暗黑模式模式切换,默认值为 ThemeMode.system

    1. MaterialApp(
    2. themeMode: ThemeMode.dark
    3. )

    19.locale

    主要用于语言切换时,如果为 null 时使用系统区域

    1. MaterialApp(
    2. locale: Locale('zh', 'CN') // 中文简体
    3. )

    20.localizationsDelegates

    本地化委托

    1. MaterialApp(
    2. locale: Locale('zh', 'CN') // 中文简体
    3. localizationsDelegates: [
    4. GlobalMaterialLocalizations.delegate,
    5. GlobalWidgetsLocalizations.delegate,
    6. ],
    7. )

    21.localeListResolutionCallback

    当前应用支持的 Locale 列表

    1. MaterialApp(
    2. locale: Locale('zh', 'CN'), // 中文简体
    3. supportedLocales: [
    4. Locale('en', 'US'), //美国英语
    5. Locale("zh", 'CN'), //中文简体
    6. ]
    7. )

    22.localeResolutionCallback

    监听系统语言切换事件,一些安卓系统特性,可设置多语言列表,默认以第一个列表为默认语言

    1. MaterialApp(
    2. locale: Locale('zh', 'CN'), // 中文简体
    3. supportedLocales: [
    4. Locale('en', 'US'), //美国英语
    5. Locale("zh", 'CN'), //中文简体
    6. ],
    7. localeListResolutionCallback: (List locales, Iterable supportedLocales) {
    8. // 系统切换语言时调用
    9. return Locale("zh", 'CN');
    10. },
    11. )

    23.supportedLocales

    监听系统语言切换事件

    1. MaterialApp(
    2. locale: Locale('zh', 'CN'), // 中文简体
    3. supportedLocales: [
    4. Locale('en', 'US'), //美国英语
    5. Locale("zh", 'CN'), //中文简体
    6. ],
    7. localeResolutionCallback: (Locale locale, Iterable supportedLocales) {
    8. return Locale("zh", 'CN');
    9. },
    10. )

    24.debugShowMaterialGrid

    在 debug 模式下展示基线网格

    1. MaterialApp(
    2. debugShowMaterialGrid: true
    3. )

    25.showPerformanceOverlay

    显示性能叠加,开启此模式主要用于性能测试

    1. MaterialApp(
    2. showPerformanceOverlay: true
    3. )

    26.checkerboardRasterCacheImages

    打开栅格缓存图像的棋盘格

    1. MaterialApp(
    2. checkerboardRasterCacheImages: true
    3. )

    27.checkerboardOffscreenLayers

    打开渲染到屏幕外位图的层的棋盘格

    1. MaterialApp(
    2. checkerboardOffscreenLayers: true
    3. )

    28.showSemanticsDebugger

    打开显示可访问性信息的叠加层,展示组件之间的关系、占位大小

    1. MaterialApp(
    2. showSemanticsDebugger: true
    3. )

    29.debugShowCheckedModeBanner

    调试显示检查模式横幅

    1. MaterialApp(
    2. debugShowCheckedModeBanner: false
    3. )

    30.shortcuts

    shortcuts 和 actions 是将物理键盘事件绑定到用户界面中的操作。 比如,要在您的应用程序中定义键盘快捷键

    31.actions

    shortcuts 和 actions 是将物理键盘事件绑定到用户界面中的操作。 比如,要在您的应用程序中定义键盘快捷键

    32.restorationScopeId

    定义一个应用程序状态恢复的标识符,提供标识符会将 RootRestorationScope 插入 widget 层次结构,从而为后代 widget 启用状态恢复。还可以通过标识符使 WidgetsApp 构建的导航器恢复其状态(即恢复活动路由的历史堆栈

    33.scrollBehavior

    统一滚动行为设置,设置后子组件将返回对应的滚动行为

    1. MaterialApp(
    2. scrollBehavior: ScrollBehaviorModified()
    3. )
    4. class ScrollBehaviorModified extends ScrollBehavior {
    5. const ScrollBehaviorModified();
    6. @override
    7. ScrollPhysics getScrollPhysics(BuildContext context) {
    8. switch (getPlatform(context)) {
    9. case TargetPlatform.iOS:
    10. case TargetPlatform.macOS:
    11. case TargetPlatform.android:
    12. return const BouncingScrollPhysics();
    13. case TargetPlatform.fuchsia:
    14. case TargetPlatform.linux:
    15. case TargetPlatform.windows:
    16. return const ClampingScrollPhysics();
    17. }
    18. return null;
    19. }
    20. }

     

  • 相关阅读:
    Elasticsearch 在地理信息空间索引的探索和演进
    如何创建一个SpringBoot项目
    PolarDB-X 全局 Binlog 解读之性能篇(上)
    深度神经网络的matlab实现,深度神经网络代码matlab
    2022年湖北工业大学招生简章之高起专、专升本非全日制学历提升
    1. Java并发编程-Java内存模型
    Spring Data Rest远程命令执行漏洞复现(CVE-2017-8046)
    Fiddler抓包系列教程-入门到精通(一)-HTTP和HTTPS基础知识
    C++异常处理和断言
    js实现红包雨功能(canvas,react,ts),包括图片不规则旋转、大小、转速、掉落速度控制、屏幕最大红包数量控制等功能
  • 原文地址:https://blog.csdn.net/eastWind1101/article/details/127934761