简单来说,viewPadding是固定的,它的大小不会随键盘的显示而发生变化,Padding是可变化的,当键盘弹起,系统状态栏被遮罩的时候,它的bottom值就是0 。
systemGestureInsets是一个特殊的手势区域,在这个区域里面只能识别部分的手势指令,而不能识别所有的手势指令,所以需要这样的一个属性 。
alwaysUse24HourFormat表示是否使用24小时的时间格式 。
accessibleNavigation表示用户是否使用了一些accessibility服务来和应用进行交互 。
还有其他的一些属性比如highContrast,disableAnimations,boldText,navigationMode和orientation等基础的属性可以使用 。
MediaQuery的另外一个属性就是child了 。
MediaQuery的构造函数MediaQuery除了最常规的构造函数之外,还有三个构造函数,分别是MediaQuery.removePadding,MediaQuery.removeViewInsets和MediaQuery.removeViewPadding 。
这三个构造函数都是通过传入一个指定的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/
最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!
欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!
经验总结扩展阅读
- 皇帝系统之类的小说
- 竹木者何树之不花者也翻译
- 合欢花花语
- 四大美女之首为什么是西施
- ERP 与 CRM 之间有什么联系?
- DophineSheduler上下游任务之间动态传参案例及易错点总结
- 鬼吹灯之黄皮子坟结局
- 王力防盗门怎么样?
- 小米10系列有几款_小米10系列哪个性价比高
- 2023武汉立秋之后还热吗 武汉立秋后天气还热多久