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

Flutter为什么setstate在弹出窗口上不起作用?

Flutter中的setState方法用于更新UI状态。当调用setState时,Flutter会重新构建相关的widget,并更新到屏幕上。

然而,当在弹出窗口上使用setState时,可能会出现不起作用的情况。这是因为弹出窗口(例如对话框、底部菜单等)通常是通过创建新的路由或页面来实现的,而不是直接在当前页面上进行操作。

在这种情况下,可以通过以下方法解决setState不起作用的问题:

  1. 使用回调函数:在弹出窗口关闭后,可以通过回调函数来执行setState,以更新UI状态。例如,可以在弹出窗口关闭时调用一个回调函数,然后在回调函数中执行setState
  2. 使用状态管理:使用状态管理库(如Provider、GetX、Bloc等)可以更好地管理应用程序的状态。通过将状态提升到共享的状态管理器中,可以在任何地方更新状态,并通知相关的widget进行重建。
  3. 使用FutureBuilder:如果弹出窗口是通过异步操作触发的,可以使用FutureBuilder来处理异步操作的结果,并在结果返回后执行setState

总之,setState在弹出窗口上不起作用的原因是因为弹出窗口通常是通过创建新的路由或页面来实现的。可以通过使用回调函数、状态管理或FutureBuilder来解决这个问题。

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

相关·内容

Flutter 第一个程序Hello World!

,那么为什么又要学习了呢?...,这时候开发者和开源项目如雨后春笋一般猛增,而现在已经到了3.0,很多公司会直接在招人要求上写Flutter技能,为什么想必就不用我多说了。...最后我们配置SDK的路径   选中用户变量的Path,点击编辑,会弹出一个窗口,先不管它。我们进入到刚才的Flutter目录下的bin文件中。   ...File → Settings → Plugins ,输入Flutter。   可以看到Flutter实际上作为插件进行安装,我们点击Install进行安装,会弹出一个弹窗。   ...四、运行hello_world项目   我们之前下载的Flutter SDK里面有一个examples文件夹,里面是一些flutter项目,这些项目有什么作用呢?

1.2K20
  • Flutter的生命周期

    Flutter的生命周期分为两个部分,一个是Flutter本身的组件的生命周期,一个是平台相关的生命周期。...❝注意:使用的 Flutter 版本 和 Dart 版本如下: Flutter 1.22.4 • channel stable • https://github.com/flutter/flutter.git...(mounted){ setState(() { ... }); } ❝强烈建议:在调用 「setState」 时加上 mounted 判断。...❞ 为什么要加上如此判断?因为如果当前组件未插入到树中或者已经从树中移除时,调用 「setState」 会抛出异常,加上 「mounted」 判断,则表示当前组件在树中。...在iOS上,打电话、响应TouchID请求、进入应用程序切换器或控制中心都处于此状态。在Android上,分屏应用,打电话,弹出系统对话框或其他窗口等。

    1.7K30

    Flutter入门三部曲(2) - 界面开发基础

    Icon - 用于显示Flutter的内置Material和Cupertino图标。 Container - 在Flutter中,相当于div。...因为State在每次重建时都没有抛弃,所以可以维护它并且不必每次重建某些东西时都要进行昂贵的计算以获得状态属性。 此外,这是允许Flutter动画存在的原因。...如果这个属性不是true的话,调用setState会报错。 注意:你可以在调用setState前,检查一下这个变量。...我们知道可以通过Scaffold的context来弹出一个SnackBar。这里想通过点击弹出这个。...[image.png] Flutter是受React启发的,所以Virtual Dom的diff算法也参考过来了(应该是略有修改),在diff的过程中如果节点有Key来比较的话,能够最大程度重用已有的节点

    2.6K00

    Flutter入门三部曲(2) - 界面开发基础

    Icon - 用于显示Flutter的内置Material和Cupertino图标。 Container - 在Flutter中,相当于div。...因为State在每次重建时都没有抛弃,所以可以维护它并且不必每次重建某些东西时都要进行昂贵的计算以获得状态属性。 此外,这是允许Flutter动画存在的原因。...如果这个属性不是true的话,调用setState会报错。 注意:你可以在调用setState前,检查一下这个变量。...我们知道可以通过Scaffold的context来弹出一个SnackBar。这里想通过点击弹出这个。...image.png Flutter是受React启发的,所以Virtual Dom的diff算法也参考过来了(应该是略有修改),在diff的过程中如果节点有Key来比较的话,能够最大程度重用已有的节点

    1.6K20

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

    事情是这样的,由于近期 Flutter 发布了 1.17 的稳定版,按照“惯例”开始着手把生产项目升级到 1.12.13+hotfix.9 版本,在升级适配完成之后,一个突如其来的 Bug 让我陷入了沉思...image 如上图所示,可以看到在键盘 B 页面打开后,退回上一个页面 A 时键盘已经收起,但是原先键盘所在的区域在 A 页面变成了空白,而 A 页面内容也被 resize 成了键盘弹出后的大小。...在 Flutter 中 Scaffold 默认情况下 resizeToAvoidBottomInset 为 true,当 resizeToAvoidBottomInset 为 true 时,Scaffold...其实 Window 的值来源于 Flutter Engine,在键盘弹出时 Flutter Engine 会通过 _updateWindowMetrics 方法更新 Window 数据,并执行 window.onMetricsChanged...但是在经过调试后震惊的发现,程序在进入 B 页面弹出键盘后,居然会触发了 A 页面 CupertinoPageRoute 的 builder 方法重新执行。

    1.4K80

    『Flutter』有无状态组件

    在Flutter中,组件(Widgets)是构建用户界面的基本元素。组件分为两种类型:有状态组件(Stateful Widgets)和无状态组件(Stateless Widgets)。...因为 Flutter 和 React 一样,都是通过数据驱动 UI 的,所以当我们的数据改变了,我们需要通过 setState 方法来通知 Flutter 重新构建 UI。...4.2.setState setState 方法是 State 类中的一个方法,它接收一个回调函数,这个回调函数会在 setState 方法调用之后立即执行,所以我们可以在这个回调函数中改变状态。...• 采用数据驱动 UI 的方式,当数据改变时,通过 setState 方法通知 Flutter 重新构建 UI。...在 State 对象中定义变量,然后通过 setState 方法改变变量的值,最后在 build 方法中使用变量。(State 就相当于我们普通的一个类了)

    7810

    Flutter--Flutter中Widget、App的生命周期

    所以,本文主要就是学习一下在flutter开发App的时候,如何去怼App以及各个页面的生命周期进行监听和回调。...一、页面的生命周期 在Flutter开发中,所有的组件和页面都继承自Widget,所以探索页面的生命周期其实就是Widget的生命周期。...){ setState(() { ... }); } 强烈建议:在调用 setState 时加上 mounted 判断。...为什么要加上如此判断?因为如果当前组件未插入到树中或者已经从树中移除时,调用 setState 会抛出异常,加上 mounted 判断,则表示当前组件在树中。...在iOS上,打电话、响应TouchID请求、进入应用程序切换器或控制中心都处于此状态。在Android上,分屏应用,打电话,弹出系统对话框或其他窗口等。

    3K31

    Flutter 构建完整应用手册-动画 顶

    但是,在屏幕上或屏幕外快速弹出元素会让最终用户感到不安。 相反,我们可以使用不透明动画淡入淡出元素,以创建流畅的体验。...在Flutter中,我们可以使用AnimatedOpacity部件来完成这项任务。...当我们更新数据时,我们也可以使用Flutter用这些更改重建我们的UI。 在我们的例子中,我们将有一块数据:一个布尔值,表示按钮是可见还是不可见。...我们需要使用setState进行更改,这是State类中的一个方法。 这将让Flutter知道它需要重建部件。 注意:有关处理用户输入的更多信息,请参阅食谱手册的处理手势部分。...duration: 动画完成需要多长时间 child: 动画作用的部件。 在我们的案例中,绿色框。

    1.4K20

    Flutter 快速解析 TextField 的内部原理

    在 Flutter 里 TextField 是一个比较复杂的控件,而在整个 TextField 里嵌套了许多不同实现的控件,它们组成了我们常用的输入框效果,如下图所示是关于 TextField 的主要构成部分...为什么呢?...之前在 《Flutter 画面渲染的全面解析》 详细介绍过这部分的知识,这简单不严谨地说就是: RepaintBoundary 主要是用于形成一个 Layer,得到一个独立的绘制区域。...image 如上图所示,常见内置的 Slider,在滑动的弹出部分实现,就是通过 CompositedTransformTarget 和 CompositedTransformFollower 的结合实现...所以本篇主要是通过介绍 TextField 的组成,以及解释内部各组成部分的作用,让开发者可以更清晰的了解 Flutter 里常用的文本输入框的实现,当遇上问题或者需求时,可以快速定位和解决问题,例如:

    2.4K30

    Flutter Widget框架之旅 顶

    这种模式在整个框架中重复出现,并且在设计自己的小部件时可能会考虑到这一点。 处理手势 主要文章:Flutter的手势 大多数应用程序包括某种形式的与系统的用户交互。...在Flutter中,这两种类型的对象具有不同的生命周期。 小部件是临时对象,用于构建当前状态下的应用程序演示文稿。 另一方面,State对象在调用build()之间是持久的,允许它们记住信息。...在极端情况下,传递给runApp的存储在窗口小部件上的状态会在应用程序的整个生命周期中持续存在。...如果您在修改窗口小部件的内部状态时忘记调用setState,则框架将不知道您的窗口小部件是脏的,并且可能不会调用窗口小部件的build函数,这意味着用户界面可能不会更新以反映已更改的状态。...全局键在整个窗口部件层次结构中必须是全局唯一的,这与局部键不同,后者只需要在同级中唯一。 由于它们是全局唯一的,因此可以使用全局键来检索与窗口部件关联的状态。

    6.7K20

    为Flutter应用程序添加交互性 顶

    在您的项目中创建一个图像目录,并添加lake.jpg。 一旦你有一个连接和启用的设备,或者你已经启动了iOS模拟器(Flutter安装的一部分),你很好!...小部件的状态存储在状态对象中,从而将小部件的状态与外观分开。 当小部件的状态改变时,状态对象调用setState(),告诉框架重绘小部件。 无状态小部件没有内部状态来管理。...当小部件的状态改变时,状态对象调用setState(),告诉框架重绘小部件。 在本节中,您将创建一个自定义有状态小部件。...在这个例子中,切换星号是一个独立的操作,不会影响父窗口小部件或其他用户界面,因此窗口小部件可以在内部处理它的状态。 在管理状态中了解更多关于窗口小部件和状态的分离以及如何管理状态的信息。...您可以在管理状态和Flutter图库中找到GestureDetector的示例。 注意:Flutter还提供了一组名为Cupertino的iOS风格的小部件。

    4.2K20

    【 Flutter 极限测试】连续 1000000 次 setState 会怎么样

    测试描述 可能很多人会认为,每次的 State#setState 都会触发当前状态类的 build 方法重新构建。但真的是这样吗,你真的了解 Flutter 界面的更新流程吗?...另外,本文有对应的视频版,可在 哔哩哔哩 进行观看: 【Flutter极限测试 - 连续 setState 1000000 次会怎么样?...】 1、测试代码说明 如下所示,在默认案例基础上添加了两个蓝色文字,点击时分别触发如下的 _increment1 和 _setState1000000 。...总的来说, State#setState 的核心作用就是把持有的元素标脏并申请新帧调度。而只有新帧到来,执行完构建之后,元素的 dirty 才会置为 false 。...也就是说,两帧之间,无论调用多少次 setState ,都只会触发一次, 元素标脏 和 申请新帧调度 。这就是为什么连续触发 1000000 次,并无大事发生的原因。

    69130

    【Flutter】Flutter 拍照示例 ( 浮动按钮及点击事件 | 底部显示按钮组件 | 手势检测器组件 | 拍照并获取当前拍摄照片 | 从相册中选择图片 )

    , 该组件由开发者定义 , 可以是任何组件 , 如 Column ; 这里在底部显示的是一个 Container 组件 , Container 组件内部包含了一个 Column 组件 ; /// 浮动按钮点击事件...image_picker.dart'; final pickedFile = await picker.getImage(source: ImageSource.camera); setState...image_picker.dart'; final pickedFile = await picker.getImage(source: ImageSource.gallery); setState...官网 : https://flutter.dev/ Flutter 插件下载地址 : https://pub.dev/packages Flutter 开发文档 : https://flutter.cn.../docs ( 强烈推荐 ) 官方 GitHub 地址 : https://github.com/flutter Flutter 中文社区 : https://flutter.cn/ Flutter 实用教程

    1.6K30

    Flutter系列(四)——HelloWorld

    文件,路径在 .....我们可以看到这里的MyApp()继承的是StatelessWidget而StatelessWidget继承的是Widget 可以说在flutter当中,一切皆为widget 这里的 runApp起到了一个全局更新的作用...State有两个作用 1.在修改状态就在这个类里编写,Weidget的时候可以同步的读取。 2.当状态有所改变的时候,调用State.setState()同时去刷新Weidget。...在Demo当中,可以看到_MyHomePageState就是继承自State并且通过State.setState()这个方法局部刷新UI。...最后 以上就是关于整个官方Demo的一个较为详细的介绍,也是我们接触的第一个Flutter项目,接下来我们就了解一下什么是Dart语言,看看Dart语言有哪些特点,为什么Flutter要使用Dart语言

    84010

    当永恒的软键盘问题遇到Flutter

    那么使用 Flutter 的时候,遇到软键盘出来的时候又会遇到什么问题呢?最近在练习使用 Flutter,顺便撸个自己的 APP,遇到了这个问题,把自己的实践顺便拿出来分享一下。...从场景开始说起 我的场景是一个从底部弹出的 Dialog,Dialog 里主要就是一个 TextField 输入框。...原来是布局溢出了,再仔细看看,会发现,当键盘弹出来的时候,正常布局就是在键盘的上面,留给dialog 可以用的就只有一点点高度了,自然就 over 了。...这时候就有问题了: 如何监听键盘弹出和收回 如何根据键盘弹出收回来调整对话框的高度 根据上文 resizeToAvoidBottomInset 的注释,我们可以找到一个有用的信息, 键盘高度是可以从 MediaQueryData.viewInsets...但是在以为已经大功告成的时候,遇到了一个新问题,输入框的高度是可以随着输入的时候按了回车键之后变化的。

    3.7K30
    领券