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

相关文章

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

Java嵌套for循环优化方案分享

《Java嵌套for循环优化方案分享》介绍了Java中嵌套for循环的优化方法,包括减少循环次数、合并循环、使用更高效的数据结构、并行处理、预处理和缓存、算法优化、尽量减少对象创建以及本地变量优化,通... 目录Java 嵌套 for 循环优化方案1. 减少循环次数2. 合并循环3. 使用更高效的数据结构4

四种Flutter子页面向父组件传递数据的方法介绍

《四种Flutter子页面向父组件传递数据的方法介绍》在Flutter中,如果父组件需要调用子组件的方法,可以通过常用的四种方式实现,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录方法 1:使用 GlobalKey 和 State 调用子组件方法方法 2:通过回调函数(Callb

Spring常见错误之Web嵌套对象校验失效解决办法

《Spring常见错误之Web嵌套对象校验失效解决办法》:本文主要介绍Spring常见错误之Web嵌套对象校验失效解决的相关资料,通过在Phone对象上添加@Valid注解,问题得以解决,需要的朋... 目录问题复现案例解析问题修正总结  问题复现当开发一个学籍管理系统时,我们会提供了一个 API 接口去

SpringBoot嵌套事务详解及失效解决方案

《SpringBoot嵌套事务详解及失效解决方案》在复杂的业务场景中,嵌套事务可以帮助我们更加精细地控制数据的一致性,然而,在SpringBoot中,如果嵌套事务的配置不当,可能会导致事务不生效的问题... 目录什么是嵌套事务?嵌套事务失效的原因核心问题:嵌套事务的解决方案方案一:将嵌套事务方法提取到独立类

鸿蒙开发搭建flutter适配的开发环境

《鸿蒙开发搭建flutter适配的开发环境》文章详细介绍了在Windows系统上如何创建和运行鸿蒙Flutter项目,包括使用flutterdoctor检测环境、创建项目、编译HAP包以及在真机上运... 目录环境搭建创建运行项目打包项目总结环境搭建1.安装 DevEco Studio NEXT IDE

hdu1254(嵌套bfs,两次bfs)

/*第一次做这种题感觉很有压力,思路还是有点混乱,总是wa,改了好多次才ac的思路:把箱子的移动当做第一层bfs,队列节点要用到当前箱子坐标(x,y),走的次数step,当前人的weizhi(man_x,man_y),要判断人能否将箱子推到某点时要嵌套第二层bfs(人的移动);代码如下:

Flutter 进阶:绘制加载动画

绘制加载动画:由小圆组成的大圆 1. 定义 LoadingScreen 类2. 实现 _LoadingScreenState 类3. 定义 LoadingPainter 类4. 总结 实现加载动画 我们需要定义两个类:LoadingScreen 和 LoadingPainter。LoadingScreen 负责控制动画的状态,而 LoadingPainter 则负责绘制动画。