当前位置: 首页 > article >正文

Flutter 局部变量刷新问题

在Flutter中,当你调用setState时,它会触发Widget树的重新构建。这意味着任何依赖于状态的Widget都会重新构建,从而反映新的状态值。但是,具体的刷新行为取决于dd是如何定义和使用的。

让我们来看看两种情况下setState的行为:

情况一:定义为局部变量

var body = Column(
  children: [Text(dd)],
);

return Navigator(
  initialRoute: '/',
  key: _globalKey,
  onGenerateRoute: (RouteSettings settings) {
    WidgetBuilder builder;
    switch (settings.name) {
      case '/':
        builder = (context) => body;
    }
    return MaterialPageRoute(builder: builder, settings: settings);
  },
);

在这种情况下,body是在onGenerateRoute方法外部定义的一个局部变量。如果你在某个StatefulWidget中调用setState来改变dd的值,那么除非body本身也在build方法中重新定义,否则body不会重新构建。因此,Text(dd)中的文本不会更新。

情况二:直接在builder中定义

return Navigator(
  initialRoute: '/',
  key: _globalKey,
  onGenerateRoute: (RouteSettings settings) {
    WidgetBuilder builder;
    switch (settings.name) {
      case '/':
        builder = (context) => Column(
              children: [Text(dd)],
            );
    }
    return MaterialPageRoute(builder: builder, settings: settings);
  },
);

在这种情况下,Column和Text是在builder函数内部每次调用时重新创建的。因此,如果你在StatefulWidget中调用setState来改变dd的值,并且这个StatefulWidget是Navigator的一部分,那么当setState被调用时,整个Widget树会重新构建,从而更新Text(dd)中的文本。

总结
局部变量方式:如果body是一个局部变量,并且是在build方法之外定义的,那么调用setState来改变dd的值不会导致Text widget更新,除非整个Widget重新构建或body在build方法中重新定义。
直接定义方式:如果Column和Text是在builder函数内部定义的,那么调用setState来改变dd的值会导致Text widget更新,因为每次build方法被调用时都会重新创建这些Widgets。
为了确保dd的变化能够反映到UI上,你应该确保dd的改变会触发包含Text(dd)的Widget的重新构建。如果dd是在一个StatefulWidget的状态中管理的,那么在setState之后,build方法会被调用,从而更新UI。


http://www.kler.cn/a/292809.html

相关文章:

  • 【CVPR2024】2024年CVPR的3D 目标检测的综述(还在补充中)
  • redis7.x源码分析:(1) sds动态字符串
  • 编写红绿起爆线指标(附带源码下载)
  • Elasticsearch 实战应用:高效搜索与数据分析
  • uniapp使用scroll-view下拉刷新与上滑加载
  • DataWorks on EMR StarRocks,打造标准湖仓新范式
  • “全面解析审核运营:策略、流程、案例,一本通吃!
  • 牛牛替换(c语言)
  • 系规学习第21天
  • vue3定义响应式数据(ref,reactive)
  • C++ STL容器-Vector容器概念及应用方法详解
  • SSH免秘钥问题
  • 【netty系列-09】深入理解和解决tcp的粘包拆包
  • 一文讲清楚,AI、AGI、AIGC与AIGC、NLP、LLM,ChatGPT等概念
  • 【云计算】什么是云计算服务|为什么出现了云计算|云计算的服务模式
  • 动手学深度学习8.2. 文本预处理-笔记练习(PyTorch)
  • 计算机网络八股文之TCP协议
  • FPGA随记---inout端口的处理
  • 20240902软考架构-------软考101-105答案解析
  • TMC5271/TMC5272 支持使用编码器进行闭环位置控制
  • linux下NTP服务器实战(chrony软件)
  • 数学建模强化宝典(1)级比检验
  • VirtualBox Debian 自动安装脚本
  • Pytorch中不同的Norm归一化详细讲解
  • 后端开发刷题 | 最长公共子序列(非连续)
  • Qt放Element网页滑动菜单栏