首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么ChangeNotifierProvider.value不更新它的构建器?

ChangeNotifierProvider.value不更新它的构建器的原因是因为ChangeNotifierProvider.value是用来提供已有的ChangeNotifier对象的,它不会监听ChangeNotifier对象的变化并触发构建器的重建。

ChangeNotifierProvider是Flutter Provider库中的一个类,用于将一个ChangeNotifier对象提供给子树中的Widget使用。ChangeNotifier是Flutter中实现状态管理的一种机制,当ChangeNotifier对象的状态发生改变时,它会通知依赖它的Widget进行重建。

在使用ChangeNotifierProvider.value时,我们需要手动将ChangeNotifier对象传递给value参数,这表示我们已经有一个已经存在的ChangeNotifier对象,并且不希望在变化时创建新的对象。这种情况下,ChangeNotifierProvider.value会确保提供给子Widget的是同一个ChangeNotifier对象,而不会重新创建新的对象。

因为ChangeNotifierProvider.value不会重新创建ChangeNotifier对象,所以它也不会监听ChangeNotifier对象的变化。当ChangeNotifier对象的状态发生改变时,由于ChangeNotifierProvider.value没有重新构建,所以构建器也不会被触发重建。

需要注意的是,在使用ChangeNotifierProvider.value时,如果我们希望构建器能够在ChangeNotifier对象状态改变时被触发重建,我们可以使用ChangeNotifierProvider的构造函数而不是使用value参数,这样构建器将会被正确触发重建。

ChangeNotifierProvider的构造函数会根据Provider的实现自动创建ChangeNotifier对象,并且监听ChangeNotifier对象的变化。这样,当ChangeNotifier对象的状态改变时,构建器会被触发重建,从而更新UI。

总结起来,ChangeNotifierProvider.value不更新它的构建器是因为它是用来提供已有的ChangeNotifier对象的,并且不会监听ChangeNotifier对象的变化。如果希望构建器能够在ChangeNotifier对象状态改变时触发重建,可以使用ChangeNotifierProvider的构造函数来创建ChangeNotifier对象并监听它的变化。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

为什么WebAssembly不是JavaScript的终结者,而是它的“助推器”?

但WebAssembly绝不是JavaScript的终结者,反而是它的“助推器”!这是为什么呢?接下来我将带你揭晓答案,让你10分钟快速掌握WebAssembly!...(三)WebAssembly影响 大幅度提高Javascript的性能,同时也不损失安全性。Webapp和原生App的性能差距变得很小。...WebAssembly可以允许任何语言编译到它制定的AST tree,相当于使用其他高级语言写的代码可以直接在网页上运行。...(四)工作原理 WebAssembly的工作原理简要来说是将C,C++, Rust等静态语言通过编译器的程序编译成浏览器能够运行的wasm二进制文件,当浏览器加载wasm文件后编译为本地机器码后运行。...为什么能提升当前js的性能?

1.1K20

Flutter状态管理

listeners.remove(listener); } void notifyListeners() { //通知所有监听器,触发监听器回调 listeners.forEach((item...首先我们建立一个用户信息操作类UserInfoModel使它继承ChangeNotifier class UserInfoModel with ChangeNotifier { String _nickName...void updateNickName(String nickName) { _nickName=nickName; notifyListeners();// 通知听众刷新 } } 数据更新...因为Provider 是InheritedWidget实现的,所以数据也是有流向的,所以我们需要把ChangeNotifierProvider.value放在两个界面上面的位置,这样我们一旦更新一个页面的数据另外一个页面就也可以获取到...child: MaterialApp( home: FirstPage(), ) ); } } 第一个界面我们定义一个按钮和一个Text用来显示第二个界面更新的数据

1.6K10
  • 腾讯云IM Flutter-原生混合开发方案接入实践

    触发另一端的方法使用 invokeMethod,监听另一端发来的方法调用使用预挂载的Method Channel监听器。...此方式可为您的Android项目和Flutter项目实现一步构建。当您同时处理两个部分并快速迭代时,此选项很方便,但您的团队必须安装Flutter SDK才能构建应用程序。...iOS方式二:在Xcode中嵌入frameworks为Flutter引擎、已编译的DART代码和所有Flutter插件创建框架。手动嵌入框架,并在Xcode中更新现有应用程序的构建设置。...该方法作为 Flutter Module 的默认入口,在Flutter多引擎,使用FlutterEngineGroup管理的背景下,如果没有子Flutter Engine不设置任何entry point...而您的完整功能Chat模块,使用Flutter实现,仅是您APP中一个重要性较低的子模块,因此不希望一上来就启动一个完整的Flutter Module。

    7.2K50

    为什么不可变的基础设施「译」

    为什么不可变的基础设施 假设我们有一个应用程序。为了生成可交付成果,我们需要从源代码构建它。这包括编译源代码,处理和复制资源,以及可能的更多步骤。 最简单的形式是这个过程如下所示: ?...无论是在笔记本电脑上还是在服务器上,它都需要一堆软件来执行。 典型的服务器应用程序需要应用程序服务器(嵌入在应用程序中或不嵌入应用程序中)和语言运行时(如JVM)。.....)被占用 如果这些都是风险,那么我们为什么不 通过应用相同的原则来构建它们,而使我们的系统与我们的应用程序保持相同的标准?...当我们需要的是一群克隆人时,为什么我们仍然在建造艺术品和雪花服务器? 不可变基础设施 这是不可变基础设施进入的地方。 整个机器现在不是只装配应用程序,而是作为一个单一的不可变单元打包。...它包含整个软件堆栈,并在每次更改后由持续集成服务器重新生成: ? 无需担心在所有层上更新许多移动部件,整个机器图像现在都从环境升级到环境。

    57520

    小鲜肉 Vite 会取代 OG Vue CLI 吗?

    尚不清楚的 XDM 可能想问,这玩意儿到底是要干嘛呢? 一句话概括: Vite 是一款全新的前端构建工具,它的服务器速度比 Vue CLI 快十到一百倍。...包括: 项目结构 支持热更新的开发服务器 插件系统 接口支持 也可以这样理解:Vue CLI 服务器的构建功能和性能是 Webpack 的超集。...依赖项的数量和构建所花费的时间呈线性关系。 而 Vite 不再进行打包操作。它依赖浏览器对 JavaScript 模板的本机支持(又称 ES 模块,这是一个相对较新的功能)。...还是见仁见智的问题。本瓜认为,如果你受够了 Webpack 的构建速度,或者你是勇于尝新的人,那为什么不呢?...也许 Vite 会完全颠覆 Webpack(基于 http2 的普及)...... 为什么不呢? 撰文不易,点赞鼓励。讨论留言,携手向前。★,°:.☆( ̄▽ ̄)/$:.°★ 。

    36810

    为什么要用vue-cli3?

    CLI命令的做的事情比较少,所以更新不会太频繁(开发者也很少会去更新这些命令) Service层: 负责项目的实际构建,也就是webpack项目构建。...考虑这样一个场景,这也是答主之前遇到的一个痛点: vue-cli3之前不算是一个构建CLI, 它顶多就是一个模板拷贝器, 做的事情非常少, 所有webpack配置和构建命令都是耦合在具体的项目里面,package.json...另外不要排斥更新,更新可以获得更好的开发体验和构建速度、运行性能, 别人在这方面比你了解的更多。 分离了vue-cli-service之后,项目构建更新只是一个命令的事情,除非做了很多特殊化操作。...因为我们不推荐团队成员去搞特殊化定制,而且为了方便进行更新,所以干脆就不让扩展了,统一和规范对团队来说才是最重要的....当然你也可以造轮子 如果想学webpack的构建项目,也不推荐你使用vue-cli 最后给vue团队点个赞?

    1.1K20

    我们在未来会怎样构建Web应用程序?

    现在我们需要手动更新成功操作和失败操作才行。 这是为什么?在后端,数据库本来就能做乐观更新啊——为什么我们不能在浏览器中这样做?...乐观更新把形状改成蓝色,响应更新又会把它改成红色,但是一旦乐观更新成功,新的响应更新又会把它变回蓝色。 解决这样的问题涉及一致性的主题,于是你会去搜索关于……数据库的资料。 其实,用不着这么麻烦。...但是为什么我们需要这样做呢?不管怎样,它们通常是与客户端非常紧密地耦合的。为什么我们不能直接将数据库暴露给客户端呢?  F. 权限 好吧,我们不这样做的原因是我们需要确保权限正确设置。...今天 GraphQL 工具的一大问题是它们的原型制作速度。你往往需要多个不同的库和构建步骤。他们在数据写入方面做得也没那么好。乐观更新不会自动发生——你必须自己处理它。  ...Slava 的《为什么 RethinkDB 会失败》描绘了在开发工具市场中获胜的难度有多大。我不认为他是错的。这样做需要对如何构建护城河并扩展成下一个 AWS 给出令人信服的回答。

    10K30

    深入了解 React 中的虚拟 DOM

    概念回顾:什么是 DOM 为了理解虚拟 DOM 并了解 React 实现它的原因,让我们回顾一下实际浏览器 DOM 的知识。...DOM 操作之后浏览器中的重新渲染过程会导致性能不足。 3. React 中的重渲染:为什么使用虚拟 DOM 正如我们所知,React 是一个基于组件的库。...React 不允许浏览器在每次重新渲染或 DOM 更新后重新绘制所有页面元素,而是使用虚拟 DOM 的概念,在不涉及实际 DOM 的情况下找出究竟发生了什么变化,然后确保实际 DOM 只重新绘制必要的数据...如果根元素是不同类型的,这在大多数更新中是罕见的,React 将销毁旧的 DOM 节点并构建一个新的 DOM 树。...这里有一个简单的类比,可以进一步巩固我们对虚拟 DOM 的知识:将操纵虚拟 DOM 看作是编辑结构设计或蓝图,而不是重新构建实际的结构。与每次发生更新时重新构建结构相比,编辑蓝图以包含更新非常便宜。

    1.6K20

    物联网安全问题和障碍

    那么为什么物联网安全问题如此普遍呢?消费者,企业和政府如何解决这些问题? 物联网安全问题 物联网是强大的,因为它利用各种传感器网络来生成大量的数据,使用该数据执行操作并创建非常有用的见解。...由于IoT需要批量生产传感器和设备,所以一个问题是,其中一个传感器/设备中发现的漏洞意味着可能会受到影响的数千或数百万个传感器/设备。 所以你可能会想,为什么这些传感器/设备首先易受攻击?...如果您正在构建路由器,您可以从像Broadcom,Qualcomm或Marvel这样的芯片制造商开始。 该专用芯片由原始设备制造商(ODM)购买,然后在芯片周围构建路由器的其余部分。...由于发现新的错误,问题或漏洞,软件并不完美,因此需要进行更改,并通过无线网络进行更改(意味着通过互联网连接)软件更新。 那么为什么我们不会向易受攻击的设备发送软件更新?...即使有可能更新,可能还有其他原因不推动这些更新。将计算机关闭15分钟来安装更新是一回事,核反应堆的安全系统关闭15分钟是另一回事。

    1K40

    软件打包,有没有更好的方法?!

    它的意义在于证明各 build 版本间能够良好协同,之所以不指向接口版本,是为了避免搞乱 semver。 环境: 指当我们想要使用某个软件包时,所有能够对其产生影响的其他软件包的总合。...选项二也很蠢,代表我们虽然有了好用的包管理器,但还是得使用 CMakeLists.txt 和 shell 脚本对它做滚动更新。...全局环境不可避免存在“幽灵”,这些无形的依赖项会随时侵扰构建过程,因此隔离一切并驱散“幽灵”是实现可复现性的前提。 当然这里也要强调,“不共享”方法也有自己的缺点。...不设全局版本集:允许在系统上安装同一软件包的多个版本(包括主要版本、次要版本、不同补丁),而且均采用可稳定复现的构建基础。...社会挑战 所以最大的问题可能跟技术无关,而更多来自人们的漠不关心。开发者、发行版贡献者大都觉得“我为什么要改变自己构建软件的方式?目前的方案对我的用例来说已经足够了!”

    23350

    把 React 作为 UI 运行时来使用

    控制反转 你也许会好奇:为什么我们不直接调用组件?为什么要编写 而不是 Form()?...这样我们才能保证用户不会看见半更新状态的 UI ,浏览器也不会对用户不应看到的中间状态进行不必要的布局和样式的重新计算。 这也是为什么 React 将所有的工作分成了”渲染阶段“和”提交阶段“的原因。...例如,渲染一棵很深的树(在每次页面转换的时候发生)而不阻塞浏览器。改变跟踪并不会让它变得更快 — 这样只会让其变得更慢因为我们执行了额外的订阅工作。另一个问题是我们需要等待返回的数据在渲染视图之前。...这就是为什么 React 会在组件内所有事件触发完成后再进行批量更新的原因: ***进入React浏览器click事件处理过程*** Child(onClick) -setState Parent(onClick...为了解决这个问题,请保证你声明了特定的依赖数组,它包含所有可以改变的东西,即使是函数也不例外: ?

    2.5K40

    Fis3 构建迁移 Webpack 之路

    它的出现,颠覆了一大批主流构建如Ant、Grunt和Gulp等等。...为什么要迁移至webpack? 有两个层面的原因: 首先webpack的社区生态火爆,插件齐全并且维护更新的很频繁,遇到了问题,比较容易解决。...模板引擎语法解析实效,造成 ${} 和 等语法不生效 上面讲述了如何内联静态的资源文件,那么如何内联构建过程中动态生成的资源文件呢?...手淘的rem方案完美解决了这个问题,它的核心思想是页面加载时动态设置body的font-size值和rem和px转换的单位。...这样依赖的文件发生变化后,会自动增量构建并且刷新浏览器 支持HMR: webpack.config.js文件内容变化后,会触发热更新逻辑,此处通过nodemon来守护webpack的构建进程,eg:

    2K20

    InfoQ Java趋势报告2021及解读

    当然,考虑到风险,已经使用JDK 8的项目你可以不更新,但对于新的项目,你完全可以毫不犹豫的更新到JDK 11 就比如我的middd-java,最低支持版本就是JDK 11,这完全没有任何问题。...但我不确认趋势报告中的主流是否把Android开发给算上了,按我的估计,至少在国内,不算上Android开发,真正用Kotlin取代Java的,应该是极少数。 大多数相信仍然会选择Java。...比如Eclipse有自己的OpenJDK构建,官网是:https://adoptium.net/,2021微软也加入了JCP大家庭,也提供了自己的OpenJDK构建。...类似的OpenJDK构建版本挺多的,比如Amazon也有自己的OpenJDK。 另外Oracle本身也有自己的OpenJDK构建版本。 这是为什么?为什么会有这么多OpenJDK构建。...那自然就会有人想到,为什么不直接存储OO对象,基于OO对象来提供存储及查询的相关功能呢,为什么要把OO对象转为二维的关系去存储呢? 好问题。

    73110

    CMake vs Make对比

    很多人只是盲目地按照指示,不是真的关心为什么我们需要以某种方式做事情。这个整个构建过程是什么,为什么它这样构造?CMake和Make之间有什么区别?有关系吗?可以互换吗?...为什么我们需要“Make”? 我们需要“Make”的原因是因为它使最终用户能够构建和安装您的软件包,而无需了解其操作的详细信息。...它仅更新直接或间接依赖于您更改的源文件的那些非源文件。很整洁!“Make”不限于任何特定语言。对于程序中的每个非源文件,makefile指定了用于计算它的shell命令。...这些shell命令可以运行一个编译器来产生一个对象文件,链接器生成一个可执行文件,以便更新一个库,Makeinfo格式化文档等。“Make”不仅限于构建一个包。...处理包含头文件,库等的所有常见的编译器/链接器标记都被平台独立的和构建系统无关的命令所取代。

    4.1K31

    为什么 React 的 Diff 算法不采用 Vue 的双端对比算法?

    React 官方的解析其实为什么 React 不采用 Vue 的双端对比算法,React 官方已经在源码的注释里已经说明了,我们来看一下 React 官方是怎么说的。...Fiber 的结构在 React15 以前 React 的组件更新创建虚拟 DOM 和 Diff 的过程是不可中断,如果需要更新组件树层级非常深的话,在 Diff 的过程会非常占用浏览器的线程,而我们都知道浏览器执行...在组件状态数据发生变更的时候,会根据最新的状态数据先会生成新的虚拟DOM,再去构建一棵新的 workInProgress Fiber 树 ,而在重新协调构建新的 Fiber 树的过程也就是 React...React 的 Diff 算法深度优先,有子节点,就遍历子节点,没有子节点,就找兄弟节点,没有兄弟节点,就找叔叔节点,叔叔节点也没有的话,就继续往上找,它爷爷的兄弟,如果一直没找到,就代表所有的更新任务都更新完毕了...进入协调的时候它自己就是父 Fiber,它的子节点在协调之前,是刚刚通过更新的状态数据生成的最新的虚拟DOM数据,是个数组结构的元素数据。

    78920

    可解释性的重要性2.1

    2.1可解释性的重要性 可解释重要性 原文 如果一个机器学习的模型表现良好,我们为什么不能直接相信这个模型,并且忽略为什么它做了这样的决策?。...人类的好奇心和学习:人类有一个他们对环境的感知模型,当意外发生时会更新。通过会对意外的发生找到一个合理的解释来进行更新行为。例如,一个人意外生病,他会想:“为什么我生病了?”。...参与者会想描述一个人的行为一样,去描述这个形状的行为,为形状赋予意图甚至情感和个性特征。机器人就是一个很好的例子,就像我的吸尘器一样,我把它命名为“Doge”。...如果机器没有在某种程度上解释它的行为,我不会完全信任我的Doge。构建一个常识,例如,“意外”事件(如Doge又一次卡在浴室地毯上......)...但它只是解释了某些东西挡在路上,这足以让我相信它的行为,并获得该事故的常识。 ? Doge,我们的吸尘器,卡住了。 作为事故的解释,Doge告诉我们它需要在平坦的表面上。 ** ?

    1K40

    云原生公司在CVE管理上支出过高

    这就是为什么在现代软件团队中交付软件通常感觉像是在给一群疯狂的鲨鱼喂鱼。这也是为什么软件团队很容易接受所有类型的技术债务。为什么不今天就喂饱鲨鱼?他们今天就想要,并且愿意为此付出代价。...这意味着时间紧迫的软件工程师不情愿地接受云原生默认设置——带有 CVE 的容器。如果功能有效,那么扫描 CVE(更不用说修复它们)就是事后才想到的。...另一个关键因素是通常选择容器镜像(通常通过对 Dockerfile 进行一些编辑)的软件应用程序开发者通常不是承担漏洞管理下游成本的人。 最后,创建易于更新的软件很困难。...无论何时到期,偿还漏洞驱动的安全债务都是一场工程管理噩梦——工作量大且不可预测。 CVE Zero 旨在控制二进制文件,即容器映像本身。它旨在将软件构建块转变为零漏洞方法。...它旨在从基础映像中清除不必要的组件,以便安全扫描器的信号变得更加可靠。

    10010

    可以建立一个机器学习模型来监控另一个模型吗

    为什么机器学习模型会出错?撇开数据质量不谈,它通常是以下两种情况之一: 模型训练的数据中没有足够的信号。或者没有足够的数据。总的来说,或者是针对某个失败的特定部分。...但如果你能做到,为什么要训练“监督器”呢?为什么不更新第一个模型呢?当我们第一次使用它时,它可以从同样的现实世界反馈中学习。 ? 用一种模式来完成所有 有可能的是,我们最初的模型并不“糟糕”。...但这将是一个从自身错误中吸取教训的新的、更新的模式。 就是这样! 它旁边的“监督器”模式不会增加价值。 它只是没有其他数据可以学习。这两种型号使用相同的功能集,并有访问相同的信号。...如果第二个“监督器”模型预测的是绝对错误,它可能会从数据集中得到更多信息。 但有一件事:如果它成功了,这并不能说明这个模型是“错误的”,也不能说明如何纠正它。...还有其他方法可以确保您的模型的生产质量。 其中包括构建完整的监控流程、设计自定义模型应用程序场景、检测异常值等等。

    63820
    领券