首页
学习
活动
专区
圈层
工具
发布

【Flutter 专题】94 初识 MediaQuery

; MediaQuery MediaQuery 一直存在于 WidgetsApp 和 MaterialApp 中,MediaQuery 继承自 InheritedWidget 是一个单独的 Widget...false, bool removeBottom = false, @required Widget child, }) MediaQueryData MediaQueryData 包含关于媒介的相关信息...9. highContrast highContrast 为用户是否要求前景与背景之间的对比度高,主要用于 iOS 设备; print('前后背景高对比度 -> ${MediaQuery.of(context...15. viewPadding viewPadding 和尚理解为视图内边距,为屏幕被刘海儿屏或异形屏中被系统遮挡部分,从 MediaQuery 边界的边缘计算;此值是保持不变;例如,屏幕底部的软件键盘可能会覆盖并占用需要底部填充的相同区域...currentContext 获取 BuildContext 上下文环境,从而获取对应尺寸; var _itemExpandedKey = GlobalKey(); var _itemTextKey =

1.2K31
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Flutter 小技巧之 MediaQuery 和 build 优化你不知道的秘密

    从 34 变成了 0viewPadding 在键盘弹出前后数据没有发生变化可以看到 MediaQueryData 里的数据是会根据键盘状态发生变化,又因为 MediaQuery 是一个...那到这里有人可能就要说了:我们通过 MediaQuery.of(context) 获取到的 MediaQueryData ,不就是对应在 MaterialApp 里的 MediaQuery...如下图所示,因为嵌套结构的原因,事实上弹出键盘确实会导致 MaterialApp 下的 child 都触发 rebuild ,因为设计上 MediaQuery 就是在 Navigator 上面,所以弹出键盘自然也就触发...到这里可以看到 MediaQuery.of 里的 context 对象很重要:如果页面 MediaQuery.of 用的是 Scaffold 外的 context ,获取到的是顶层的 MediaQueryData...使用不同 context 对性能的影响通过 Scaffold 内的 context 获取到的 MediaQueryData 受到 Scaffold 的影响那么,如果看完本篇你还有什么疑惑

    1.5K20

    Flutter 中键盘弹起时,Scaffold 发生了什么变化

    padding: ${MediaQuery.of(context).padding} viewInsets.bottom: ${MediaQuery.of(context).viewInsets.bottom...padding: ${MediaQuery.of(context).padding} viewInsets.bottom: ${MediaQuery.of(context).viewInsets.bottom...方法里打印出对应的 MediaQuery.of(context).padding 和 MediaQuery.of(context).viewInsets.bottom 的值; 如下图所示,在键盘弹起和不弹起时可以看到...MainWidget 使用的 MediaQuery.of(context) 得到的 MediaQueryData 是上级往下传递的,里面包含了 top:47 的状态栏高度和 bottom:34 的底部安全区域高度...事实上这得从 MaterialApp 说起,在 MaterialApp 内部的深处嵌套着一个叫 _MediaQueryFromWindow 的 Widget ,它在内部通过 WidgetsBinding.instance.addObserver

    2.6K20

    Flutter 系列之GetX的学习(3) --> 其他实用功能

    我们首先需要在main.dart文件里面将MaterialApp 修改为 GetMaterialApp 其次添加属性defaultTransition 表示默认的路由过渡动画 效果: 2. app国际化配置...读取数据:box.read(String key) —— 从存储中读取数据。 删除数据:box.remove(String key) —— 删除指定的键值对。..., // 但不可变 Get.height Get.width // 获取当前导航器的上下文 Get.context // 获取前景中 snackbar/对话框/底部表单的上下文,可以在代码中的任何地方使用...因为你在 UI 的任何地方都有上下文的访问权限,所以可以在 UI 代码的任何地方使用它 // 如果你需要可变的高度/宽度(如桌面或可以缩放的浏览器窗口),你需要使用上下文 context.width...() /// 类似于 MediaQuery.of(context).viewPadding context.mediaQueryViewPadding() /// 类似于 MediaQuery.of

    72510

    Flutter 组件 | Builder 构造器与 BuildContext 认知

    比如下面通过 MediaQuery.of(context) 可以获取 MediaQueryData 数据,从而拿到 屏幕尺寸、设备分辨率等数据信息,这里核心方法 BuildContext 的 dependOnInheritedWidgetOfExactType...,因为MediaQuery 是在 MaterialApp 内部包含的,这时 context 中是找不到的,所以想要使用 MediaQuery,那就必需将 context 下移到 MaterialApp...一直往下翻,你会看到有一个持有 MediaQuery 的元素,这就说明当前的 ctx 可以上溯寻到该祖先节点。...也就说明使用 Builder 回调的上下文,是可以使用 MediaQuery.of(ctx) 获取到媒体信息的。 ? ? 到这里,你应该对上下文的层级有了一定的认识。...---- 在 IconTheme 中的 merge 方法里也使用了 Builder 组件,这是为了在没有上下文的时候拿到上下文,这样就不需要在 merge 方法中传入上下文了,这也是上下文无中生有的使用方式

    2.7K21

    Flutter 强大的MediaQuery控件

    通常情况下,不会直接将MediaQuery当作一个控件,而是使用MediaQuery.of获取当前设备的信息,用法如下: var data = MediaQuery.of(context); 此方式必须放在...MediaQuery作用域内,否则会抛出异常,MaterialApp和WidgetsApp都引入了MediaQuery,并且随着屏幕的变化而导致重建,比如旋转屏幕、弹出输入框等。...MediaQueryData MediaQueryData是MediaQuery.of获取数据的类型。...viewPadding 被系统遮挡的部分,通常指“刘海屏”或者系统状态栏,此值独立于padding和viewInsets,它们的值从MediaQuery控件边界的边缘开始测量。..._2" style="zoom:50%;" /> 使用场景 根据尺寸构建不同的布局 SafeArea控件就是通过MediaQuery.of来实现的,平板和手机的(或者横屏和竖屏)布局可能是不一样的,比如如下布局

    1.1K00

    Flutter 强大的MediaQuery控件

    通常情况下,不会直接将MediaQuery当作一个控件,而是使用MediaQuery.of获取当前设备的信息,用法如下: var data = MediaQuery.of(context); 此方式必须放在...MediaQuery作用域内,否则会抛出异常,MaterialApp和WidgetsApp都引入了MediaQuery,并且随着屏幕的变化而导致重建,比如旋转屏幕、弹出输入框等。...MediaQueryData MediaQueryData是MediaQuery.of获取数据的类型。...viewPadding 被系统遮挡的部分,通常指“刘海屏”或者系统状态栏,此值独立于padding和viewInsets,它们的值从MediaQuery控件边界的边缘开始测量。..._2" style="zoom:50%;" /> 使用场景 根据尺寸构建不同的布局 SafeArea控件就是通过MediaQuery.of来实现的,平板和手机的(或者横屏和竖屏)布局可能是不一样的,比如如下布局

    1.2K00
    领券