展开

关键词

Flutter数据传输

从上往下 数据从根往下传数据,常规做法是一层层往下,当深度变大,数据的传输变的困难,flutter提供InheritedWidget用于子节点向节点获取数据的机制,如下例子: class FrogColor context).color), ); } } context.inheritFromWidgetOfExactType(FrogColor)其实是通过context/element往上遍历树,查第一个 FrogColor的节点,取该节点的Widget对象。 子Widget使用了Widget的数据,那么在Widget的数据变化时,子Widget将会跟着变化。 系统中有少Widget就是这样的,比如MediaQuery,可以看下其定义,如下: class MediaQuery extends InheritedWidget{ final MediaQueryData

61641

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

里面的方法很多,稍微瞄一眼,可以看基本上都是在 东西。 ? 我们会经常使用 Navigator.of(context).push来用于路由的跳转。 data; } BuildContext 可以在所有父辈节点中获取特定的对象,在本文中讲这就差多了,后面会为 BuildContext 专门写一篇来详细讨论这些接口作用。 ,因为MediaQuery 是在 MaterialApp 内部包含的,这时 context 中是的,所以想要使用 MediaQuery,那就必需将 context 下移 MaterialApp 一直往下翻,你会看有一个持有 MediaQuery 的元素,这就说明当前的 ctx 可以上溯寻节点。 ,是的。

75820
  • 广告
    关闭

    腾讯云+社区系列公开课上线啦!

    Vite学习指南,基于腾讯云Webify部署项目。

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

    常用组件--Drawer常用组件--Drawer

    看看如何使用,使用drawer也很简单. ( child: Container( child: Text('hello world'),),) 查看Scaffold的build方法中drawer的初始化方法,可以看系统是如何创建和使用 drawerCallback: _drawerOpenedCallback, dragStartBehavior: widget.drawerDragStartBehavior, ),);}} 话多说看源码 }, ) ), ListView(), ], ) ) 根据发现drawer顶部的白色阴影非常的丑,根据测试了是在 mediaQuery = MediaQuery.of(context, nullOk: true); if (mediaQuery !

    19460

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

    如下图所示,我们在 Scaffold 的源码里可以看,当resizeToAvoidBottomInset 为 true 时,会使用 mediaQuery.viewInsets.bottom 作为 image 关于 CustomMultiChildLayout 的详细使用介绍在之前的文章 《详解自定义布局实战》 里可以。 constraints 去判断得,最终 copyWith 得新的 MediaQuery 。 image 这里就涉及一个有意思的点,在 _BodyBuilder 里的通过 copyWith 得新的 MediaQuery 会影响什么呢?如下代码所示,这里用一个简单的例子来解释下。 MediaQuery,所以 CustomWidget 得的 MediaQueryData 其实在 Scaffold 内部已经被重置了,所以它的 top:0 ,获取状态栏高度。

    39520

    Flutter 上的一个 Bug 带你了解键盘与路由的另类知识点

    image 如上图所示,可以看在键盘 B 页面打开后,退回上一个页面 A 时键盘已经收起,但是原键盘所在的区域在 A 页面变成了空白,而 A 页面内容也被 resize 成了键盘弹出后的大小。 1、Scaffold 针对这个问题,首的 Scaffold 的 resizeToAvoidBottomInset 属性。 3、Window 那这里首我们要知道 MediaQuery 的 viewInsets 是怎么被设置的? 这时候我突然想起,之前为了锁定页面的字体大小跟随系统缩放,我在路由层使用了 MediaQueryData.fromWindow 复制一份 MediaQuery,问题很可能出在这里: Navigator.of :这个 bug 首是因为规范使用了 MediaQueryData.fromWindow(WidgetsBinding.instance.window) ,之后又恰好在有键盘的页面打开后触发了 MaterialApp

    62680

    【Flutter 专题】94 初识 MediaQuery

    当我们同时为手机和平板适配编写 app 针对同屏幕尺寸进行 UI 布局或当用户偏好设置较大字号或是想要最大限度等减少动画等;此时就需要 MediaQuery 来帮我们获取所用设备的信息以及用户设置的偏好信息 ; MediaQuery MediaQuery 一直存在于 WidgetsApp 和 MaterialApp 中,MediaQuery 继承自 InheritedWidget 是一个单独的 Widget 15. viewPadding viewPadding 和尚理解为视图内边距,为屏幕被刘海儿屏或异形屏中被系统遮挡部分,从 MediaQuery 边界的边缘计算;此值是保持变;例如,屏幕底部的软件键盘可能会覆盖并占用需要底部填充的相同区域 16. physicalDepth physicalDepth 为设备物理层级,和尚暂时还未想对应的应用场景; print('设备物理层级 -> ${MediaQuery.of(context).physicalDepth Tips 和尚在尝试获取其他子 Widget Size 时,有两点需要注意,首要设置一个全局的 GlobalKey 来获取当前位置,key 需要为唯一的;第二通过 GlobalKey().

    24331

    Flutter入门三部曲(3) - 数据传递状态管理

    \n' 'The context used was:\n' ' $context' ); } 首,可以看通过这个方法context.inheritFromWidgetOfExactType 来查MediaQueryMediaQuery是我们存在在BuildContext中的属性。 其次,可以看MediaQuery存储在的BuildContext中的位置是在WidgetsApp. 定义一个AppState 了解了MediaQuery的存放方式,我们可以实现自己的状态管理,这样在子组件中,就可以同步获取状态值。 0.定义一个AppState //0. [闲鱼flutter的界面框架设计.png] 从上往下: 通过自定义同Scope的InheritedWidget来hold住同Scope的数据,这样当前Scope下的子组件都能得对应的数据,和得对应的更新

    56200

    Flutter入门三部曲(3) - 数据传递状态管理

    \n' 'The context used was:\n' ' $context' ); } 首,可以看通过这个方法context.inheritFromWidgetOfExactType 来查MediaQueryMediaQuery是我们存在在BuildContext中的属性。 其次,可以看MediaQuery存储在的BuildContext中的位置是在WidgetsApp. 定义一个AppState 了解了MediaQuery的存放方式,我们可以实现自己的状态管理,这样在子组件中,就可以同步获取状态值。 0.定义一个AppState //0. 闲鱼flutter的界面框架设计.png 从上往下: 通过自定义同Scope的InheritedWidget来hold住同Scope的数据,这样当前Scope下的子组件都能得对应的数据,和得对应的更新

    3K51

    端开发技术——解密Flutter响应式布局

    1.4 Vector graphics Vector graphics使用XML创建图像来定义路径和颜色,而是使用像素位图。它可以缩放任何大小。 Flutter是如何自适应的 即使你是Android或iOS的开发者,目前为止,你应该已经了解了这些平台是如何处理响应式布局的。 请记住:MediaQuery和LayoutBuilder之间的主要区别在于,MediaQuery使用屏幕的完整上下文,而仅仅是特定小部件的大小。 记住:这与你使用MediaQuery检索的设备方向同。 首,它尝试布局约束允许的最大宽度,并通过将给定的高宽比应用于宽度来决定高度。

    16100

    如何在flutter中构建响应式布局(第五节)

    那么,让我们开始吧,但首,让我们知道 您在 Git 存储库中有多少移动应用程序项目? 安卓方法 为了处理同的屏幕尺寸和像素密度,Android 中使用了以下概念: 1. Fragment,您可以将 UI 逻辑提取单独的组件中,以便在为大屏幕尺寸设计多窗格布局时,您必单独定义逻辑。您可以重用您为每个片段定义的逻辑。 它们可以缩放任何大小而会缩放工件。在 Android 中,您可以将?VectorDrawable用于任何类型的插图,例如图标。 iOS方法 iOS 用于定义响应式布局的概念如下: 1. 记住:之间的主要区别MediaQuery和LayoutBuilder是MediaQuery使用屏幕的完整范围内,而是你的特定图标的只是大小,而LayoutBuilder能够确定特定部件的最大宽度和高度 **记住:**这与您可以使用 检索的设备方向MediaQuery

    9610

    Flutter中获取屏幕及Widget的宽高示例代码

    MediaQuery 一般情况下,我们会使用如下方式去获取 widget 的宽高: final size =MediaQuery.of(context).size; final width =size.width ; final height =size.height; 但是如果注意,这种写法很容易报错,例如下面的写法就会报错: import 'package:flutter/material.dart'; 2, height: height / 2, ), ), ); } } 在代码中,我们是想获取屏幕的宽和高,然后将屏幕宽高的一半分别赋值给 Container 的宽和高,但上述代码并能成功运行 从错误异常中我们可以大概了解有两种情况会导致上述异常: 当没有 WidgetsApp or MaterialApp 的时候,我们使用 MediaQuery.of(context) 来获取数据。 解决方法就是将 MediaQuery.of(context) 挪 MaterialApp 内,如下: import 'package:flutter/material.dart'; class GetWidgetWidthAndHeiget

    97520

    Flutter之drawer详细分析(你要的操作都有)

    image.png 可以看,根据我们对drawer的认识,并是想要的结果,所以这个drawer并完整,然后我们继续添加代码,修改drawer ///... 我们可以继续ListView的源码 ? 定制Drawer的滑出大小 我们来看看drawer的源码,其实看源码并是一件痛苦的事,我们一般直接跳build方法就好 ? image.png 该代码比较简单: 1.判断drawer是否为空,若为空添加drawer _addIfNonNull该方法从命名可以看出若为空添加children里面 这里被添加了一个DrawerController image.png 诶,可以看,每次的打开会触发initState,每次的关闭会触发dispose,这个就是我们一直想要的Drawer打开和关闭吗?

    1.5K20

    imagemagick convert pdf转图片时遇gswin64c.exe的问题(多装一个octave解决)

    常用的是它的经典convert命令(imagemagick.org->download 需选legacy才可用convert 然后拿一个pdf文件试试手 convert j-.pdf j+%03d.jpg 报错说 gswin64c.exe 报错指定文件 FailedToExecuteCommand "gswin64c.exe" 原来是gswin64c.exe(ghostscript)没有附带安装带来的问题 ,那去gs.exe(ghostscript)替代它也可以解决问题 然后去mirrors.tuna.tsinghua.edu.cn/gnu/octave/windows 下载octave 点最近的zip 文件下载,里面有附带的gs.exe,但是需要解压整个octave,octave-x.x.x-w64/mingw64/bin/gs.exe 它就是gswin64c.exe 解压之后原地复制gs.exe 把那个啥gs副本.exe重命名为gswin64c.exe 重命名 然后点开系统属性环境变量添加这个目录path里面 安装目录为例,需具体修改 好,继续转pdf为图片(记得加上参数-density

    23360

    Flutter路由管理和页面参数的传递(源码分析)

    = null) { //从当前的Element节点一直向上寻匹配的StatefulElement if (ancestor is StatefulElement && matcher.check state; } } 循环遍历向上寻 Navigator 的 state ,这里就是 NavigatorState 。 Navigator的生成 Navigator 的 Widget 是是什么时候添加视图树中的呢? 在_WidgetsAppState 的 Widget build(BuildContext context) 方法中我们了管理路由的 Navigator 的构造时机。 这个解释了在 Flutter路由管理和页面参数的传递(获取&返回) 这篇文章末尾说的 onGenerateRoute 方式进行的参数传递,必须能进行 routers 的注册。

    42110

    VisualStudioPython

    最近在使用C/C++开发Python的扩展模块,由于笔记本的性能较差,因此没有使用VS自带的conda环境,而是自己安装了一个Python核心解释器,但是使用VS2019创建项目的时候,代码大片飘红,提示 如果你遇这个问题,那么请在系统环境变量中配置一个PythonHome的变量并指向Python的安装路径: ? 然后重启VS即可。注意那个变量值的后边要加上斜杠,否则还会报错。

    63520

    @Log4jlog

    6720

    UE4——UnLuaInterface.h

    ReadOnlyTargetRules Target) : base(Target) { PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs; // 这里添加上插件名字,如果标题中的头文件

    18720

    Flutter完整开发实战详解(八、 实用技巧与填坑)

    WidgetsApp ,而 WidgetsApp 内有一个 MediaQuery,熟悉它的朋友知道我们可以通过 MediaQuery.of(context).size 去获取屏幕大小。 其实 MediaQuery 是一个 InheritedWidget ,它有一个叫 MediaQueryData 的参数,这个参数是通过如下图设置的,再通过源码我们知道,一般情况下 MediaQueryData 所以我们可以在需要的页面,通过最外层嵌套如下代码设置,将字体设置为默认允许缩放。 MediaQuery( data: MediaQueryData.fromWindow(WidgetsBinding.instance.window).copyWith(textScaleFactor 参数,其实在上一篇我们已经说过, Container 其实只是对各种布局的封装,内部的 margin 和 padding 其实是通过 Padding 实现的,而 Padding 支持负数,所以如果你需要用负数的情况下

    1.4K20

    Xamarin 使用 GTK 提示 libglib-2.0-0.dll

    在使用 Xamarin 开发 Linux 应用的时候,刚开始如果没有弄好 libglib-2.0-0.dll 的依赖库,那么将会在运行的时候,在 Gtk.Application.Init() 这句代码提示这个库 解决方法是官网 下载 GTK# 安装包或 mono x86 的应用 安装默认路径,也就是在 C:\Program Files (x86)\GtkSharp\2.12\bin 路径,默认安装的时候会加入环境变量 接下来 C:\Program Files (x86)\GtkSharp\2.12\bin 复制 libglib-2.0-0.dll 文件 xamarin 的输出文件夹,如 D:\lindexi\t \Xamarin\Cla\bin\x86\Debug\net47 文件夹里面,此时尝试运行,应该就会存在这个提示 注意现在 GTK# 仅支持 x86 应用 DllNotFoundException:

    48510

    相关产品

    • 云服务器

      云服务器

      云端获取和启用云服务器,并实时扩展或缩减云计算资源。云服务器 支持按实际使用的资源计费,可以为您节约计算成本。 腾讯云服务器(CVM)为您提供安全可靠的弹性云计算服务。只需几分钟,您就可以在云端获取和启用云服务器,并实时扩展或缩减云计算资源。云服务器 支持按实际使用的资源计费,可以为您节约计算成本。

    相关资讯

    热门标签

    扫码关注云+社区

    领取腾讯云代金券