扑94:第一次见MediaQuery

当我们为手机和平板电脑同时适配编写一个app来为不同的屏幕尺寸做UI布局时,或者当用户更喜欢设置更大的字体大小或者想要最小化动画时等等。这时候我们就需要MediaQuery来帮助我们获取所用设备的信息以及用户设置的偏好信息。

MediaQuery一直存在于WidgetsApp和MaterialApp中。MediaQuery是继承自InheritedWidget的一个独立的小部件,但它通常通过MediaQuery.of(context)获取相关信息。

当相关信息发生变化时,比如屏幕旋转,屏幕中的Widget会重新构建,保持最新状态;我们可以通过MediaQuery构造函数和提供的静态方法手动设置相应的相关信息;

MediaQueryData包含媒体的相关信息;一般通过MediaQuery.of(context)获取;

Size是介质的大小,以逻辑像素为单位;

DevicePixelRatio是每英寸的像素;与设备的物理像素有关,与横竖屏无关;

方向是横屏和竖屏,方向.横向是横屏,方向.纵向是竖屏;

TextScaleFactor是

每个逻辑像素在字体中的像素数理解为字体的像素比;注意,将默认字体像素每英寸设置为标准的1.2倍后,设备系统的字体大小进行了调整,其1.2倍仍然是在标准字体大小的基础上扩大了1.2倍;

PlatformBrightness是当前设备的亮度模式;注意,调整屏幕亮度不会改变这种模式,这与目前系统支持的暗模式和亮模式有关;

AlwaysUse24HourFormat是当前设备是否为24小时制;

AccessibleNavigation是指是否使用TalkBack或VoiceOver等辅助功能与应用程序进行交互,以辅助视障人士;

InvertColors是是否使用颜色反转,主要用于iOS设备;

HighContrast是用户是否要求前景和背景的高对比度,主要用于iOS设备;

DisableAnimations是平台是否要求禁用或减少动画;

BoldText表示平台是否需要粗体;

填充是屏幕的内边距,一般是刘海儿屏或异形屏被系统遮挡的部分的边距;

Viewinserts是键盘弹出时的屏幕边距,其中viewInsets.bottom是键盘的高度;

SystemGestureInsets是手势边距,比如Android Q后向左滑动关闭页面;

ViewPadding理解为视图的内边距,是屏幕被刘海儿屏或异形屏遮挡的部分,从MediaQuery边界的边缘开始计算;该值保持不变;比如屏幕底部的软键盘,可能会覆盖和占用同样需要底部填充的区域,所以不会影响这个值;

PhysicalDepth是设备的物理层面,暂时没有想到对应的应用场景;

当试图获得其他子部件大小时,有两点需要注意。首先,应该设置一个GlobalKey来获取当前位置,并且该键应该是唯一的。其次,通过GlobalKey()获取BuildContext的上下文环境。currentContext,从而获得相应的大小;

MediaQuery案例尝试

对一些MediaQueryData的配菜应用和理解不够深入;如有错误,请多指教!