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子页面向父组件传递数据的方法介绍

《四种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 则负责绘制动画。

Flutter Button使用

Material 组件库中有多种按钮组件如ElevatedButton、TextButton、OutlineButton等,它们的父类是于ButtonStyleButton。         基本的按钮特点:         1.按下时都会有“水波文动画”。         2.onPressed属性设置点击回调,如果不提供该回调则按钮会处于禁用状态,禁用状态不响应用户点击。

Cortex-A7:ARM官方推荐的嵌套中断实现机制

0 参考资料 ARM Cortex-A(armV7)编程手册V4.0.pdf ARM体系结构与编程第2版 1 前言 Cortex-M系列内核MCU中断硬件原生支持嵌套中断,开发者不需要为了实现嵌套中断而进行额外的工作。但在Cortex-A7中,硬件原生是不支持嵌套中断的,这从Cortex-A7中断向量表中仅为外部中断设置了一个中断向量可以看出。本文介绍ARM官方推荐使用的嵌套中断实现机

flutter开发实战-flutter build web微信无法识别二维码及小程序码问题

flutter开发实战-flutter build web微信无法识别二维码及小程序码问题 GitHub Pages是一个直接从GitHub存储库托管的静态站点服务,‌它允许用户通过简单的配置,‌将个人的代码项目转化为一个可以在线访问的网站。‌这里使用flutter build web来构建web发布到GitHub Pages。 最近通过flutter build web,通过发布到GitHu

Flutter 中的低功耗蓝牙概述

随着智能设备数量的增加,控制这些设备的需求也在增加。对于多种使用情况,期望设备在需要进行控制的同时连接到互联网会受到很大限制,因此是不可行的。在这些情况下,使用低功耗蓝牙(也称为 Bluetooth LE 或 BLE)似乎是最佳选择,因为它功耗低,在我们的手机中无处不在,而且无需连接到更广泛的网络。因此,蓝牙应用程序的需求也在不断增长。 通过阅读本文,您将了解如何开始在 Flutter 中开