这三个构造函数都是通过传入一个指定的context和child来构造MediaQuery,但是他们都相应的移出了一些属性 。根据名字就可以看出来,这三个分别移出的是padding,viewInsets和viewPadding 。
我们以removePadding为例,看一下具体的实现流程:
factory MediaQuery.removePadding({Key? key,required BuildContext context,bool removeLeft = false,bool removeTop = false,bool removeRight = false,bool removeBottom = false,required Widget child,}) {return MediaQuery(key: key,data: MediaQuery.of(context).removePadding(removeLeft: removeLeft,removeTop: removeTop,removeRight: removeRight,removeBottom: removeBottom,),child: child,);}
removePadding方法需要传入四个额外的参数来表示是否需要移出padding的left,top,right或者bottom 。
我们可以看到返回了一个新的MediaQuery,其中data部分使用了MediaQuery.of(context)
来获取context最近的MediaQuery,然后调用它的removePadding方法将对应的padding属性删除 。
MediaQuery的使用讲完MediaQuery的构造函数 , 接下来我们看一下MediaQuery常用的使用场景 。
其实MediaQuery最常见的用处就是来判断设备的大小,从而根据不同设备的大小来进行页面的调整 。
比如下面的getSize方法:
enum ScreenSize { Small, Normal, Large, ExtraLarge }ScreenSize getSize(BuildContext context) {double deviceWidth = MediaQuery.of(context).size.shortestSide;if (deviceWidth > 900) return ScreenSize.ExtraLarge;if (deviceWidth > 600) return ScreenSize.Large;if (deviceWidth > 300) return ScreenSize.Normal;return ScreenSize.Small;}
我们通过MediaQuery.of(context)
拿到MediaQuery,然后通过size的shortestSide属性获得设备的宽度,然后根据设备的宽度跟特定的宽度进行对比,从而判断设备屏幕的大小 。
当然 , MediaQuery还可以用在其他需要检测Media属性的地方 , 大家可以仔细体会 。
总结MediaQuery是flutter中一个非常方便的工具,用来检测media的属性情况,根据MediaQuery , 我们可以做出更加富有交互性的APP 。
更多内容请参考 http://www.flydean.com/50-flutter-mediaquery/【flutter系列之:查询设备信息的利器:MediaQuery】
最通俗的解读 , 最深刻的干货 , 最简洁的教程,众多你不知道的小技巧等你来发现!
欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!
推荐阅读
- ERP 与 CRM 之间有什么联系?
- DophineSheduler上下游任务之间动态传参案例及易错点总结
- 小米10系列有几款_小米10系列哪个性价比高
- 跟我学Python图像处理丨傅里叶变换之高通滤波和低通滤波
- 【原创】推流录屏软件OBS使用教程--录屏
- 之三 2流高手速成记:SpringBoot整合mybatis/mybatis-plus实现数据持久化
- 怎样打麻将,才能立于不败之地(麻将三不打三必输)
- 第一次更新 《Go 精进之路》 读书笔记
- 研发效能之技术治理&技术治理架构师
- 密码学奇妙之旅、03 HMAC单向散列消息认证码、Golang代码