我的编程空间,编程开发者的网络收藏夹
学习永远不晚

还记得第一个看到的Flutter组件吗?

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

还记得第一个看到的Flutter组件吗?

还记得第一个看到的Flutter组件吗?

注意:无特殊说明,Flutter版本及Dart版本如下:

  • Flutter版本: 1.12.13+hotfix.5
  • Dart版本: 2.7.0

MaterialApp

在学习Flutter的过程中我们第一个看见的控件应该就是MaterialApp,毕竟创建一个新的Flutter项目的时候,项目第一个组件就是MaterialApp,这是一个Material风格的根控件,基本用法如下:

MaterialApp(  home: Scaffold(    appBar: AppBar(      title: Text('老孟'),    ),  ),)

home参数是App默认显示的页面,效果如下:

还记得第一个看到的Flutter组件吗?

title参数是应用程序的描述,在Android上,在任务管理器的应用程序快照上面显示,在IOS上忽略此属性,IOS上任务管理器应用程序快照上面显示的是Info.plist文件中的CFBundleDisplayName。如果想根据区域显示不同的描述使用onGenerateTitle,用法如下:

MaterialApp(  title: '老孟',  onGenerateTitle: (context) {    var local = Localizations.localeOf(context);    if (local.languageCode == 'zh') {      return '老孟';    }    return 'laomeng';  },  ...)

routesinitialRouteonGenerateRouteonUnknownRoute是和路由相关的4个属性,路由简单的理解就是页面,路由的管理通常是指页面的管理,比如跳转、返回等。

MaterialApp按照如下的规则匹配路由:

  1. 路由为/home不为null则使用home
  2. 使用routes指定的路由。
  3. 使用onGenerateRoute生成的路由,处理除homeroutes以外的路由。
  4. 如果上面都不匹配则调用onUnknownRoute

是不是还是比较迷糊,不要紧,看下面的例子就明白了:

MaterialApp(  routes: {    'container': (context) => ContainerDemo(),    'fitted': (context) => FittedBoxDemo(),    'icon': (context) => IconDemo(),  },  initialRoute: '/',  home: Scaffold(    appBar: AppBar(      title: Text('老孟'),    ),  ),  onGenerateRoute: (RouteSettings routeSettings){        print('onGenerateRoute:$routeSettings');        if(routeSettings.name == 'icon'){          return MaterialPageRoute(builder: (context){            return IconDemo();          });        }      },      onUnknownRoute: (RouteSettings routeSettings){        print('onUnknownRoute:$routeSettings');        return MaterialPageRoute(builder: (context){          return IconDemo();        });      },  ...)

initialRoute设置为/,那么加载home页面。

如果initialRoute设置为icon,在routes中存在,所以加载routes中指定的路由,即IconDemo页面。

如果initialRoute设置为icons1,此时routes中并不存在名称为icons1的路由,调用onGenerateRoute,如果onGenerateRoute返回路由页面,则加载此页面,如果返回的是null,且home不为null,则加载home参数指定的页面,如果home为null,则回调onUnknownRoute

themedarkThemethemeMode是关于主题的参数,设置整个App的主题,包括颜色、字体、形状等,修改主题颜色为红色用法如下:

MaterialApp(  theme: ThemeData(    primaryColor: Colors.red  ),  darkTheme: ThemeData(      primaryColor: Colors.red  ),  themeMode: ThemeMode.dark,

效果如下:

还记得第一个看到的Flutter组件吗?

localelocalizationsDelegateslocaleListResolutionCallbacklocaleResolutionCallbacksupportedLocales是区域设置和国际化相关的参数,如果App支持多国语言,那么就需要设置这些参数,默认情况下,Flutter仅支持美国英语,如果想要添加其他语言支持则需要指定其他MaterialApp属性,并引入flutter_localizations 包,到2019年4月,flutter_localizations包已经支持52种语言,如果你想让你的应用在iOS上顺利运行,那么你还必须添加“flutter_cupertino_localizations”包。

pubspec.yaml文件中添加包依赖:

dependencies:  flutter:    sdk: flutter  flutter_localizations:    sdk: flutter  flutter_cupertino_localizations: ^1.0.1

设置如下:

MaterialApp(  localizationsDelegates: [    GlobalMaterialLocalizations.delegate,    GlobalWidgetsLocalizations.delegate,    GlobalCupertinoLocalizations.delegate  ],  supportedLocales: [    const Locale('zh', 'CH'),    const Locale('en', 'US'),  ],  ...)
  • GlobalMaterialLocalizations.delegate :为Material Components库提供了本地化的字符串和其他值。
  • GlobalWidgetsLocalizations.delegate:定义widget默认的文本方向,从左到右或从右到左。
  • GlobalCupertinoLocalizations.delegate:为Cupertino(ios风格)库提供了本地化的字符串和其他值。

supportedLocales参数指定了当前App支持的语言。

localeResolutionCallbacklocaleListResolutionCallback都是对语言变化的监听,比如切换系统语言等,localeResolutionCallbacklocaleListResolutionCallback的区别是localeResolutionCallback返回的第一个参数是当前语言的Locale,而localeListResolutionCallback返回当前手机支持的语言集合,在早期的版本手机没有支持语言的集合,只显示当前语言,在设置->语言和地区的设置选项效果如下:

还记得第一个看到的Flutter组件吗?

在早期是没有红色区域的。

因此我们只需使用localeListResolutionCallback即可,通过用户手机支持的语言和当前App支持的语言返回一个语言选项。

通常情况下,如果用户的语言正好是App支持的语言,那么直接返回此语言,如果不支持,则返回一个默认的语言,用法如下:

MaterialApp(  localeListResolutionCallback:      (List<Locale> locales, Iterable<Locale> supportedLocales) {    if (locales.contains('zh')) {      return Locale('zh');    }    return Locale('en');  },  ...)

在App中也可以通过如下方法获取区域设置:

Locale myLocale = Localizations.localeOf(context);

还有几个方便调试的选项,debugShowMaterialGrid:打开网格调试

MaterialApp(  debugShowMaterialGrid: true,

效果如下:

还记得第一个看到的Flutter组件吗?

showPerformanceOverlay:打开性能检测

MaterialApp(  showPerformanceOverlay: true,

效果如下:

还记得第一个看到的Flutter组件吗?

右上角有一个DEBUG的标识,这是系统在debug模式下默认显示的,不显示的设置如下:

MaterialApp(  debugShowCheckedModeBanner: true,  ...)

CupertinoApp

我想你一定能想到既然有Material风格的MaterialApp,那么也应该有Cupertino(ios)风格与之相对应,是的Cupertino风格的是CupertinoApp,CupertinoApp的属性及用法和MaterialApp一模一样,就不在具体介绍了。

欢迎加入Flutter的微信交流群(laomengit),一起学习,一起进步,生活不止眼前的苟且,还有诗和《远方》。

当然我也非常希望您关注我个人的公众号,里面有各种福利等着大家哦。

还记得第一个看到的Flutter组件吗?

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

还记得第一个看到的Flutter组件吗?

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

还记得第一个看到的Flutter组件吗?

注意:无特殊说明,Flutter版本及Dart版本如下:Flutter版本: 1.12.13+hotfix.5 Dart版本: 2.7.0MaterialApp在学习Flutter的过程中我们第一个看见的控件应该就是MaterialApp,
2023-06-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录