flutter 嵌套 StatefulWidget 不刷新

2024-05-12 01:36

本文主要是介绍flutter 嵌套 StatefulWidget 不刷新,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

widget1 中有一个按钮和 widget2 ,

点击一次按钮 数字i+1,调用 widget2(i); widget1 widget2 都是 StatefulWidget 

import 'package:flutter/material.dart';
import 'package:stack_trace/stack_trace.dart';
import 'dart:developer' as dev;void main() {runApp(MaterialApp(title: 'Dict', home: Scaffold(body: widget1())));
}class widget1 extends StatefulWidget {@overrideState<widget1> createState() => widget1_();
}class widget1_ extends State<widget1> {int i=1;@overrideWidget build(BuildContext context) {return Row(children: [ElevatedButton(child: Text("normal"),onPressed: () {setState(() {i=i+1;});},),widget2(i)],);}
}class widget2 extends StatefulWidget {int i;widget2(this.i) {//这一行能够收到变化debug(i.toString());}@overrideState<widget2> createState() => widget2_(i);
}class widget2_ extends State<widget2> {int i;widget2_(this.i) {//这里不会变化 甚至变化的时候都不会重新执行这里的代码debug(i.toString());}@overrideWidget build(BuildContext context) {return Text(i.toString());}
}
debug(Object? object,[int i=1]) {if(i>0){//获取 调用当前程序 所在 的文件 以及具体的行//将 StackTrace 对象转换成 Chain 对象//toTrace().frames // 拿出其中一条信息//[1] 上一层var frame = Chain.current().toTrace().frames[i];print("file :${frame.uri} line ${frame.line}");}var str = object.toString();if(str.length>450){dev.log(str);}print(object);
}

1.传递一个UniqueKey()可以解决 让它强制刷新,

2.或者使用 ValueKey(),

3.GlobalKey bKey = GlobalKey();textKey.currentState.onPressed(_count); 这个方案测试无效

import 'package:flutter/material.dart';
import 'package:stack_trace/stack_trace.dart';
import 'dart:developer' as dev;void main() {runApp(MaterialApp(title: 'Dict', home: Scaffold(body: widget1())));
}class widget1 extends StatefulWidget {@overrideState<widget1> createState() => widget1_();
}class widget1_ extends State<widget1> {int i=1;@overrideWidget build(BuildContext context) {return Row(children: [ElevatedButton(child: Text("normal"),onPressed: () {setState(() {i=i+1;});},),widget2(i,ValueKey(i))],);}
}class widget2 extends StatefulWidget {int i;Key key;widget2(this.i,this.key) {//这一行能够收到变化debug(i.toString());}@overrideState<widget2> createState() => widget2_(i);
}class widget2_ extends State<widget2> {int i;widget2_(this.i) {//这里不会变化 甚至变化的时候都不会重新执行这里的代码debug(i.toString());}@overrideWidget build(BuildContext context) {return Text(i.toString());}
}
debug(Object? object,[int i=1]) {if(i>0){//获取 调用当前程序 所在 的文件 以及具体的行//将 StackTrace 对象转换成 Chain 对象//toTrace().frames // 拿出其中一条信息//[1] 上一层var frame = Chain.current().toTrace().frames[i];print("file :${frame.uri} line ${frame.line}");}var str = object.toString();if(str.length>450){dev.log(str);}print(object);
}

这篇关于flutter 嵌套 StatefulWidget 不刷新的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/981239

相关文章

RabbitMQ消息总线方式刷新配置服务全过程

《RabbitMQ消息总线方式刷新配置服务全过程》SpringCloudBus通过消息总线与MQ实现微服务配置统一刷新,结合GitWebhooks自动触发更新,避免手动重启,提升效率与可靠性,适用于配... 目录前言介绍环境准备代码示例测试验证总结前言介绍在微服务架构中,为了更方便的向微服务实例广播消息,

Python中将嵌套列表扁平化的多种实现方法

《Python中将嵌套列表扁平化的多种实现方法》在Python编程中,我们常常会遇到需要将嵌套列表(即列表中包含列表)转换为一个一维的扁平列表的需求,本文将给大家介绍了多种实现这一目标的方法,需要的朋... 目录python中将嵌套列表扁平化的方法技术背景实现步骤1. 使用嵌套列表推导式2. 使用itert

MyBatis编写嵌套子查询的动态SQL实践详解

《MyBatis编写嵌套子查询的动态SQL实践详解》在Java生态中,MyBatis作为一款优秀的ORM框架,广泛应用于数据库操作,本文将深入探讨如何在MyBatis中编写嵌套子查询的动态SQL,并结... 目录一、Myhttp://www.chinasem.cnBATis动态SQL的核心优势1. 灵活性与可

Mybatis嵌套子查询动态SQL编写实践

《Mybatis嵌套子查询动态SQL编写实践》:本文主要介绍Mybatis嵌套子查询动态SQL编写方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、实体类1、主类2、子类二、Mapper三、XML四、详解总结前言MyBATis的xml文件编写动态SQL

SpringCloud使用Nacos 配置中心实现配置自动刷新功能使用

《SpringCloud使用Nacos配置中心实现配置自动刷新功能使用》SpringCloud项目中使用Nacos作为配置中心可以方便开发及运维人员随时查看配置信息,及配置共享,并且Nacos支持配... 目录前言一、Nacos中集中配置方式?二、使用步骤1.使用$Value 注解2.使用@Configur

Flutter实现文字镂空效果的详细步骤

《Flutter实现文字镂空效果的详细步骤》:本文主要介绍如何使用Flutter实现文字镂空效果,包括创建基础应用结构、实现自定义绘制器、构建UI界面以及实现颜色选择按钮等步骤,并详细解析了混合模... 目录引言实现原理开始实现步骤1:创建基础应用结构步骤2:创建主屏幕步骤3:实现自定义绘制器步骤4:构建U

基于Python实现读取嵌套压缩包下文件的方法

《基于Python实现读取嵌套压缩包下文件的方法》工作中遇到的问题,需要用Python实现嵌套压缩包下文件读取,本文给大家介绍了详细的解决方法,并有相关的代码示例供大家参考,需要的朋友可以参考下... 目录思路完整代码代码优化思路打开外层zip压缩包并遍历文件:使用with zipfile.ZipFil

Flutter打包APK的几种方式小结

《Flutter打包APK的几种方式小结》Flutter打包不同于RN,Flutter可以在AndroidStudio里编写Flutter代码并最终打包为APK,本篇主要阐述涉及到的几种打包方式,通... 目录前言1. android原生打包APK方式2. Flutter通过原生工程打包方式3. Futte

python展开嵌套列表的多种方法

《python展开嵌套列表的多种方法》本文主要介绍了python展开嵌套列表的多种方法,包括for循环、列表推导式和sum函数三种方法,具有一定的参考价值,感兴趣的可以了解一下... 目录一、嵌套列表格式二、嵌套列表展开方法(一)for循环(1)for循环+append()(2)for循环+pyPhWiFd

Flutter监听当前页面可见与隐藏状态的代码详解

《Flutter监听当前页面可见与隐藏状态的代码详解》文章介绍了如何在Flutter中使用路由观察者来监听应用进入前台或后台状态以及页面的显示和隐藏,并通过代码示例讲解的非常详细,需要的朋友可以参考下... flutter 可以监听 app 进入前台还是后台状态,也可以监听当http://www.cppcn