flutter系列之:查询设备信息的利器:MediaQuery( 二 )


这三个构造函数都是通过传入一个指定的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】

推荐阅读