MediaQuery
MediaQuery
可以建立媒体查询解析给定的子树。
例如,要了解当前媒体的大小(例如,包含您的应用程序的窗口),您可以从MediaQuery.of
:MediaQuery.of(context).size
返回的ediaQueryData
中读取MediaQueryData.size
属性。
使用MediaQuery.of
查询当前媒体将导致您的窗口小部件在MediaQueryData
更改时自动重建(例如,如果用户旋转其设备)。
如果MediaQuery
没有在范围内,则MediaQuery.of
方法将抛出异常,除非将nullOk
参数设置为true
,在这种情况下它返回null
。
构造方法
const MediaQuery({Key key, @required MediaQueryData data, @required Widget child })
复制代码
常量构造函数:创建一个向其子Widget提供MediaQueryData
的窗口小部件。
factory MediaQuery.removePadding({Key key, @required BuildContext context, bool removeLeft: false, bool removeTop: false, bool removeRight: false, bool removeBottom: false, @required Widget child })
复制代码
工厂构造函数:创建一个新的MediaQuery
,它继承自给定上下文的环境MediaQuery
,但删除指定的填充。
factory MediaQuery.removeViewInsets({Key key, @required BuildContext context, bool removeLeft: false, bool removeTop: false, bool removeRight: false, bool removeBottom: false, @required Widget child })
复制代码
工厂构造函数:创建从给定上下文继承环境MediaQuery
的新MediaQuery
,但删除指定的视图insets
。
静态方法
static MediaQueryData of(BuildContext context, { bool nullOk = false })
复制代码
给定的上下文的最近实例的数据。 可以使用此功能查询屏幕方向的大小。当该信息发生变化时,小部件将被安排重建,使小部件保持最新状态。
MediaQueryData media = MediaQuery.of(context);
复制代码
MediaQueryData
关于一个媒体(例如,window)的信息。例如,MediaQueryData.size
属性包含当前窗口的宽度和高度。
要获取给定BuildContext
的当前MediaQueryData
,使用MediaQuery.of
函数。例如,要获取当前窗口的大小,请使用MediaQuery.of(context).size
。
MediaQueryData
包含两个EdgeInsets
值:padding
和viewInsets
。这些值反映了设备的配置,并被许多顶级小部件使用,如SafeArea
和Cupertino
和Material scaffold
小部件。填充值定义可能不完全可见的区域,例如iPhone X上的显示“凹口”。viewInsets
值定义根本不可见的区域,通常是因为它们被设备的键盘遮挡。
viewInsets
和padding
值是独立的,它们都是从MediaQuery
小部件的边界测量的。 WidgetsApp
创建的顶级MediaQuery
的边界与包含该应用程序的窗口相同。
构造方法
MediaQueryData.fromWindow(ui.Window window);
复制代码
基于给定窗口为媒体查询创建数据
属性
- Size size :逻辑像素中的媒体大小(例如,屏幕的大小)。
- double devicePixelRatio :每个逻辑像素的设备像素数。 这个数字可能不是两个人的权力。 实际上,它甚至可能不是整数。 例如,Nexus 6的设备像素比为3.5。
- double textScaleFactor:每个逻辑像素的字体像素数。
- EdgeInsets viewInsets:应用程序可以呈现的显示矩形每一侧的物理像素数,但操作系统可能会放置系统UI,例如键盘,完全遮盖任何内容。
- EdgeInsets padding:应用程序可以呈现的显示矩形每一侧的物理像素数,但可能被系统UI(例如系统通知区域)部分遮挡,或者显示器中的物理入侵(例如电视上的过扫描区域) 屏幕或手机传感器外壳)。如果你使用了这个填充(例如,通过构建一个小部件来封装或在其布局中考虑这个填充,以便子节点不再暴露给这个填充),你应该通过插入为小部件树中的后续后代删除这个填充 使用
MediaQuery.removePadding
工厂的新MediaQuery
小部件。 - bool alwaysUse24HourFormat:格式化时间时是否使用24小时格式。 此标志的行为在不同平台上有所不同: 在Android上,此标志直接从名为“使用24小时格式”的用户设置报告。 它适用于应用程序使用的任何语言环境,无论是系统范围的语言环境还是应用程序设置的自定义语言环境。 - 在iOS上,当设置了名为“24小时时间”的用户设置或系统范围的语言环境默认使用24小时时,此标志设置为true格式。
- bool accessibleNavigation:用户是否使用TalkBack或VoiceOver等辅助功能服务与应用程序进行交互。如果此设置为true,则应禁用超时等功能或增加最小持续时间。
- bool invertColors:设备是否反转平台的颜色。此标志目前仅在iOS设备上更新。
- bool disableAnimations:平台是否要求尽可能禁用或减少动画。