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

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

MediaQuery

通常情况下,不会直接将MediaQuery当作一个控件,而是使用MediaQuery.of获取当前设备的信息,用法如下:

var data = MediaQuery.of(context);

此方式必须放在MediaQuery作用域内,否则会抛出异常,MaterialApp和WidgetsApp都引入了MediaQuery,并且随着屏幕的变化而导致重建,比如旋转屏幕、弹出输入框等。

MediaQueryData

MediaQueryData是MediaQuery.of获取数据的类型。说明如下:

属性 说明 size 逻辑像素,并不是物理像素,类似于Android中的dp,逻辑像素会在不同大小的手机上显示的大小基本一样,物理像素 = size*devicePixelRatio。 devicePixelRatio 单位逻辑像素的物理像素数量,即设备像素比。 textScaleFactor 单位逻辑像素字体像素数,如果设置为1.5则比指定的字体大50%。 platformBrightness 当前设备的亮度模式,比如在Android Pie手机上进入省电模式,所有的App将会使用深色(dark)模式绘制。 viewInsets 被系统遮挡的部分,通常指键盘,弹出键盘,viewInsets.bottom表示键盘的高度。 padding 被系统遮挡的部分,通常指“刘海屏”或者系统状态栏。 viewPadding 被系统遮挡的部分,通常指“刘海屏”或者系统状态栏,此值独立于paddingviewInsets,它们的值从MediaQuery控件边界的边缘开始测量。在移动设备上,通常是全屏。 systemGestureInsets 显示屏边缘上系统“消耗”的区域输入事件,并阻止将这些事件传递给应用。比如在Android Q手势滑动用于页面导航(ios也一样),比如左滑退出当前页面。 physicalDepth 设备的最大深度,类似于三维空间的Z轴。 alwaysUse24HourFormat 是否是24小时制。 accessibleNavigation 用户是否使用诸如TalkBack或VoiceOver之类的辅助功能与应用程序进行交互,用于帮助视力有障碍的人进行使用。 invertColors 是否支持颜色反转。 highContrast 用户是否要求前景与背景之间的对比度高, iOS上,方法是通过“设置”->“辅助功能”->“增加对比度”。 此标志仅在运行iOS 13的iOS设备上更新或以上。 disableAnimations 平台是否要求尽可能禁用或减少动画。 boldText 平台是否要求使用粗体。 orientation 是横屏还是竖屏。

paddingviewPaddingviewInsets的区别如下:

使用场景

根据尺寸构建不同的布局

SafeArea控件就是通过MediaQuery.of来实现的,平板和手机的(或者横屏和竖屏)布局可能是不一样的,比如如下布局:

布局代码如下:

var screenSize = MediaQuery.of(context).size;
if(screenSize.width>oneColumnLayout){//平板布局
}else{//手机布局
}

oneColumnLayout表示一列布局的宽度。

系统字体变化

很多App都有一个功能就是调节字体大小,通过MediaQuery来实现,实现如下:

@overrideWidget build(BuildContext context) {var _data = MediaQuery.of(context).copyWith(textScaleFactor: 2.0);return Scaffold(appBar: AppBar(title: Text('老孟'),),body: MediaQuery(data: _data,child: Text('字体变大'),),);}

字体变大了一倍。

交流

如果你对Flutter还有疑问或者技术方面的疑惑,欢迎加入Flutter交流群(微信:laomengit)。

同时也欢迎关注我的Flutter公众号【老孟程序员】,公众号首发Flutter的相关内容。

推荐一个Flutter学习地址:http://laomengit.com 里面包含150多个组件的详细用法。

aliplayer 手机全屏控件不显示_Flutter 强大的MediaQuery控件相关推荐

  1. php让手机全屏,手机网站按比例显示铺满手机全屏/网站两边不留白

    如何phpweb手机网站按比例显示铺满手机全屏/网站两边不留白? PHPWEB手机网站,一般手机网站框架宽度为320.640,大多数是这两个宽度,然而在大屏幕手机比如安卓手机上,720分辨率的情况下, ...

  2. Teamviewer连接服务器显示不能够全屏 或 向日葵连接服务器不能够全屏 或 Teamviewer只显示一个640x480的分辨率选项

    欢迎大家关注笔者,你的关注是我持续更博的最大动力 原创文章,转载告知,盗版必究 Teamviewer连接服务器显示不能够全屏 或 向日葵连接服务器不能够全屏 或 Teamviewer只显示一个640x ...

  3. 发现qq的mac输入法2.8,在终端全屏下输入不显示待选文字或单词

    为什么80%的码农都做不了架构师?>>>    发现qq的mac输入法2.8的版本,在终端全屏下输入不显示待选文字或单词,不知道终端非全屏下是否显示待选单词,忘了测试,谁知道呢, 已 ...

  4. windows默认的图片查看器打开JPG图片显示为空白,但全屏又能正常显示。

    windows默认的图片查看器打开JPG图片显示为空白,但全屏又能正常显示. 打开注册表 进入目录 hkey_classes_root\.jpg 修改默认值为jpegfile即可 当遇到这类故障,我们 ...

  5. android华为手机全屏显示

    解决android华为提示全屏显示 最近发现很多应用在第一次安装之后,都会提示一个 [ 全屏显示] .一看,好像也没啥,但是对开发应用的开发者来说.感觉被打了一巴掌一样.自己好好编码完成的应用.出来个 ...

  6. 网红汉字手机全屏时钟APP下载

    [应用名称]:冷高轮时间 [应用大小]:6.83 [支持平台]:安卓(Android),苹果(iOS) [时钟样式]男神数字,女神数字,梵高数字,王思聪吃热狗数字,手势数字,大写数字,中文汉字,麻将数 ...

  7. Laya打包的app实现手机全屏 强制关闭虚拟按键

    1 先在laya引擎里设置scaleMode: Laya.stage.scaleMode = Stage.SCALE_EXACTFIT; Laya.stage.screenMode = Stage.S ...

  8. 全屏加载loading显示的解决方法

    step1:可以在网页里加一个div用来现实loading. 1 <div id="loading"> 2 <!--这里放你的loading时显示的动画或者文字- ...

  9. css禁止背景图拉伸_html-css控制背景图全屏拉伸不重复显示

    在HTML中,当我们设置背景图,只能采用是否重叠.居中.重叠方向这几个选项 CSS3中设置 body { background:#3d71b8 url(../back_main.png); backg ...

最新文章

  1. 图论 ---- 启发式合并 + 并查集模拟 + 证明 F. Phoenix and Earthquake
  2. Appium之创建、连接夜神模拟器
  3. Raft只读操作实现要点
  4. 发现问题,是解决问题的第一步
  5. ba+ii+plus模拟+android,财务计算器(BAII PLUS)
  6. 标准库time,datetime,calendar,random的使用
  7. Spring MVC集成测试:断言给定的模型属性有全局错误
  8. ES6/06/ES6简介,ES6新增语法,let声明变量,const声明常量,var,let和const总结,数组解构,对象解构,箭头函数,剩余参数
  9. python setup_简述python setup.py install的过程
  10. 多表查询过滤重复数据_数据分析工具SQL—多表查询
  11. 速读-对抗攻击的弹性异构DNN加速器体系结构
  12. fiddler打开之后google浏览器无法上网的解决办法
  13. 简单写一下未来10年的职业规划
  14. 咸蛋超人的CxImage学习之路(一)
  15. 银行 结算 清分清算 对账
  16. 离散实验sdut3805双射
  17. unity 下载图片使用并保存在本地
  18. 支持向量机——SVM算法及例子(代码)
  19. 转: 网页设计中的一些色彩搭配技巧
  20. 解决Linux下RTL8723be无线网卡搜索不到wifi的问题——华硕笔记本安装deepin15.11无wifi信号

热门文章

  1. js验证开始日期不能大于结束日期_js前台判断开始时间是否小于结束时间
  2. 实例源码_SpringBoot数据库源码解析Template实例化操作
  3. Django入门(二) 理解Django生命流程周期
  4. Linux 系统的日志管理
  5. 北京协和医学院823计算机原理,2017年北京协和医学院放射医学研究所(天津)823计算机原理考研题库...
  6. linux nginx 安装stream,Centos7下Nginx简单搭建与stream模块简单配置
  7. linux 7.0修改网卡ip,CentOS7修改网卡为静态IP
  8. Jdbc访问mysql查询聚合函数_JDBC连接参数设置对Oracle数据库的影响分析
  9. AIoT原生技术带来更好的应用开发
  10. @成都的Coder ,一起探讨终端架构持续演进