Flutter InheritedWidget 共享状态管理
InheritedWidget和React中的context功能类似,可以实现跨组件数据的传递。
定义一个共享数据的InheritedWidget,需要继承自InheritedWidget
- 这里定义了一个of方法,该方法通过context开始去查找祖先的HYDataWidget(可以查看源码查找过程)
- updateShouldNotify方法是对比新旧HYDataWidget,是否需要对更新相关依赖的Widget
// 数据共享
class DataWidget extends InheritedWidget {
// 1、共享的数据final int counter;
// 2、定义构造方法const DataWidget({super.key, required this.counter, required Widget child}): super(child: child);
// 3、获取组件最近的当前InheritedWidgetstatic DataWidget? of(BuildContext context) {// 沿着Element树,去找最近的CounterElement,从Element中取出Widget对象return context.dependOnInheritedWidgetOfExactType();}// 4、 决定要不要回调State中的didChangeDependencies 方法bool updateShouldNotify(covariant DataWidget oldWidget) {// 如果返回true:执行依赖当前的InheritedWidget的state中的 didChangeDependenciesreturn counter != oldWidget.counter;}
}
使用定义的 DataWidget 共享数据
class _MyHomePageState extends State<MyHomePage> {HomeRequest homeRequest = HomeRequest();int data = 100; // 定义一个共享数据变量void initState() {super.initState();Logs("_MyHomePageState", StackTrace.current);homeRequest.getMovieTopList(0, 20).then((value) {});}Widget build(BuildContext context) {return Scaffold(// 脚手架appBar: AppBar(title: Text(widget.title),),body: DataWidget( // 需要在共享数据组件的父类上继承DataWidgetcounter: data, // 将数据传递给共享数据 counterchild: Center(child: Column(mainAxisAlignment: MainAxisAlignment.center,children: [HYShowData01(),HYShowData02(),],),)),// 定义一个 按钮点击自动增加数据floatingActionButton: FloatingActionButton(child: Icon(Icons.add),onPressed: () {setState(() {data++;});},),);}
}class HYShowData01 extends StatelessWidget {Widget build(BuildContext context) {int? _counter = DataWidget.of(context)?.counter; // 使用共享数据return Container(color: Colors.red,child: Text("共享状态:${_counter}"),);}
}class HYShowData02 extends StatefulWidget {State<HYShowData02> createState() => _HYShowData02State();
}class _HYShowData02State extends State<HYShowData02> {void didChangeDependencies() {// TODO: implement didChangeDependenciessuper.didChangeDependencies();}Widget build(BuildContext context) {int? _counter = DataWidget.of(context)?.counter;return Container(color: Colors.blue,child: Text("共享状态:${_counter}"),);}
}
相关文章:
Flutter InheritedWidget 共享状态管理
InheritedWidget和React中的context功能类似,可以实现跨组件数据的传递。 定义一个共享数据的InheritedWidget,需要继承自InheritedWidget 这里定义了一个of方法,该方法通过context开始去查找祖先的HYDataWidget(可以查看源码查找…...
什么是反射?Java反射?反射的优缺点
目录 什么是反射(Reflection )?Java反射?反射的优缺点获取Class对象的三种方式:java反射技术的应用场景 什么是反射(Reflection )? 主要是指程序可以访问、检测和修改它本身状态或行…...
小红书2020校招测试开发后端笔试题卷三
//完全背包求组合数 #include <iostream> #include<vector> #include<set> #include<map> #include<algorithm> using namespace std; int value[300]; // vector<int>vis; // vector<int>vis1; map<vector<int>,int>m…...
python数据可视化Matplotlib
1.绘制简单的折线图 # -*- coding: utf-8 -*- import matplotlib.pyplot as pltinput_values [1, 2, 3, 4, 5] squares [1, 4, 9, 16, 25] plt.style.use(seaborn) fig, ax plt.subplots() ax.plot(input_values, squares, linewidth3) # 线条粗细# 设置图表标题并给坐标…...
firewalld防火墙
firewalld防火墙 它属于包过滤防火墙。工作在网络层,是centos7自带的默认防火墙。主要是取代iptables。 firewalld的两种配置模式: 分别是运行时配置和永久配置。 iptable是静态防火墙 firewalld是动态防火墙 它是按照区域来划分的,有9…...
iMacros WebBrowser Component for .NET
iMacros WebBrowser Component for .NET 在几分钟内实现应用程序自动化 快速轻松地将iMacro集成到您的应用程序中。不需要单独的安装程序。 无缝集成 iMacros与您的.NET应用程序无缝集成,作为Microsoft WebBrowser控件的替代品。它甚至可以用作每个.NET应用程序中的…...
3,堆,桶排序,排序总结【p4-p5】
桶排序,排序总结 3.1堆3.1.1堆结构3.1.1.1完全二叉树3.1.1.2堆分为大根堆和小根堆3.1.1.2.1案例1-去掉最大数字,使剩下的数字依然是大根堆3.1.1.2.2案例23.1.1.2.3案例33.1.1.2.4案例4-方便制造大根堆方法 3.1.2堆排序3.1.2.1案例-堆排序的扩展3.1.2.1.1…...
使用langchain与你自己的数据对话(四):问答(question answering)
之前我已经完成了使用langchain与你自己的数据对话的前三篇博客,还没有阅读这三篇博客的朋友可以先阅读一下: 使用langchain与你自己的数据对话(一):文档加载与切割使用langchain与你自己的数据对话(二):向量存储与嵌入使用langc…...
如何快速开拓海外华人市场?附解决方案!
开拓华人市场对于企业来说是非常必要的。华人市场庞大且潜力巨大,拥有巨额的消费能力。随着华人经济的不断增长,越来越多的企业开始意识到华人市场的重要性。 通过开拓华人市场,企业可以获得更多的销售机会,并且在竞争激烈的市场…...
【云原生-制品管理】制品管理的优势
制品介绍制品管理-DevOps制品管理优势总结 制品介绍 制品管理指的是存储、版本控制和跟踪在软件开发过程中产生的二进制文件或“制品”的过程。这些制品可以包括编译后的源代码、库和文档,包括操作包、NPM 和 Maven 包(或像 Docker 这样的容器镜像&…...
Java爬虫----HttpClient方式(获取数据篇)
目录 一、爬虫的定义 二、获取数据 (1)基于Get方式的请求(无参) (2)基于Get方式请求(有参) (3)基于Post方式的请求(无参) &…...
计算机视觉实验:图像增强应用实践
本次实验主要从基于统计、函数映射的图像增强方法和基于滤波的图像增强方法两种方法中对一些图像增强的算法进行实现。主要的编程语言为python,调用了python自带的PIL图像库用于读取图像,利用numpy进行图像运算,最后使用opencv第三方库进行对…...
ES6:Generator函数详解
ES6:Generator函数详解 1、 概念2、yield表达式2.1 yield 语句与 return 语句区别2.2 Generator函数不加yield语句,这时变成了一个单纯的暂缓执行函数2.3 yield 表达式只能用在 Generator 函数里面,用在其它地方都会报错2.4 yield 表达式如果…...
前端小练-产品宣传页面
文章目录 前言页面结构固定钉头部轮播JS特效 完整代码总结 前言 经过一个月的爆肝,花费了一个月(期间还花费了将近半个月的时间打比赛,还要备研)算是把数二高数的内容强化了一遍,接下来刷熟练度即可,可惜的…...
arm学习之stm32设备树学习-中断控制led灯亮灭+字符设备指令控制led灯亮灭
中断控制led灯亮灭 驱动文件源码 led-key.c #include<linux/init.h> #include<linux/module.h> #include<linux/of.h> #include<linux/of_gpio.h> #include<linux/gpio.h> #include<linux/of_irq.h> #include<linux/interrupt.h> s…...
快速开发框架若依的基础使用详解
Hi I’m Shendi 快速开发框架若依的基础使用详解 最近在为公司制作新的项目,经过了一段时间的技术沉淀,我开始尝试接触市面上用的比较多的快速开发框架,听的最多的当属若依吧 于是就选用了若依 介绍 为什么选?目的是为了提高开发…...
RabbitMQ 教程 | 第4章 RabbitMQ 进阶
👨🏻💻 热爱摄影的程序员 👨🏻🎨 喜欢编码的设计师 🧕🏻 擅长设计的剪辑师 🧑🏻🏫 一位高冷无情的编码爱好者 大家好,我是 DevO…...
小程序如何从分类中移除商品
有时候商家可能需要在商品分类中删除某些商品,无论是因为商品已下架、库存不足还是其他原因。在这篇文章中,我们将介绍如何从分类中移除商品。 方式一:分类管理中删除商品。 进入小程序管理后台,找到分类管理,在分…...
P1219 [USACO1.5] 八皇后 Checker Challenge
题目 思路 非常经典的dfs题,需要一点点的剪枝 剪枝①:行、列,对角线的标记 剪枝②:记录每个皇后位置 代码 #include<bits/stdc.h> using namespace std; const int maxn105; int a[maxn];int n,ans; bool vis1[maxn],vis…...
如何在不使用脚本和插件的情况下手动删除 3Ds Max 中的病毒?
如何加快3D项目的渲染速度? 3D项目渲染慢、渲染卡顿、渲染崩溃,本地硬件配置不够,想要加速渲染,在不增加额外的硬件成本投入的情况下,最好的解决方式是使用渲云云渲染,在云端批量渲染,批量出结…...
从噪声到艺术:深入解析扩散模型采样算法的核心步骤
1. 扩散模型:当数学遇见艺术创作 想象一下,你正在看一位画家作画。他一开始只是在画布上随意涂抹颜料,看起来毫无章法。但随着画笔的不断调整,那些混乱的色块逐渐形成了清晰的轮廓,最终变成一幅精美的画作。这正是扩散…...
3dsconv高效使用指南:从格式难题到批量转换的实用方案
3dsconv高效使用指南:从格式难题到批量转换的实用方案 【免费下载链接】3dsconv Python script to convert Nintendo 3DS CCI (".cci", ".3ds") files to the CIA format 项目地址: https://gitcode.com/gh_mirrors/3d/3dsconv 解决3DS游…...
【Java Web学习 | 第十篇】JavaScript(4) 对象
【Java Web学习 | 第十篇】JavaScript(4) - 对象(Object)深度详解(2026最新版) 恭喜你完成数组与函数进阶! 对象(Object) 是 JavaScript 中最重要、最核心的数据结构。在 Java Web 开发中&…...
Tree of Thoughts终极指南:5分钟掌握思维树算法原理与实战应用
Tree of Thoughts终极指南:5分钟掌握思维树算法原理与实战应用 【免费下载链接】tree-of-thought-llm [NeurIPS 2023] Tree of Thoughts: Deliberate Problem Solving with Large Language Models 项目地址: https://gitcode.com/gh_mirrors/tr/tree-of-thought-l…...
从v4l2-ctl命令到media拓扑:手把手教你调试RK3568上的OV8858摄像头图像
RK3568平台OV8858摄像头深度调试实战:从硬件链路到图像优化的全流程解析 当你在RK3568平台上调试OV8858摄像头时,是否遇到过这样的场景:设备树配置看似正确,但摄像头输出的图像却出现花屏、颜色异常或干脆没有信号?作为…...
Z-Image-Turbo LoRA WebUI实战案例:为独立游戏开发者生成角色立绘素材
Z-Image-Turbo LoRA WebUI实战案例:为独立游戏开发者生成角色立绘素材 1. 项目概述与价值 作为一名独立游戏开发者,你是否曾经为角色立绘的设计而头疼?传统的美术外包成本高昂,自己绘制又需要专业技能。现在,通过Z-I…...
Phi-3-mini-4k-instruct-gguf实战教程:开箱即用的轻量中文问答部署指南
Phi-3-mini-4k-instruct-gguf实战教程:开箱即用的轻量中文问答部署指南 1. 认识Phi-3-mini-4k-instruct-gguf Phi-3-mini-4k-instruct-gguf是微软Phi-3系列中的轻量级文本生成模型GGUF版本。这个模型特别适合处理中文问答、文本改写、摘要整理以及简短创作等任务。…...
转行AIGC,杭州培训助你3个月入职大厂
转行AIGC,杭州培训助你3个月入职大厂 最近,很多小伙伴私信我,说想转行做AIGC相关工作,但苦于没有方向,不知道从哪里入手。今天就给大家分享一个真实案例,看看他是如何在短短3个月内成功转型,并…...
Qt, C++数据类型扩展问题
Qt项目中ObjectDic类的类型扩展与代码优化 前言 在Qt项目开发中,我们经常会遇到需要处理不同类型数据的情况,尤其是当涉及到负数时,类型的选择就显得尤为重要。本文将详细介绍如何在Qt项目中扩展ObjectDic类的类型支持,从无符号整…...
视频号推客模式系统小程序开发
开发一个基于微信视频号的推客模式系统小程序,需要结合微信生态的开放能力和推客(分销)模式的业务逻辑。以下是关键开发要点:微信小程序与视频号打通通过微信开放平台的JS-SDK实现小程序与视频号的互联互通。调用wx.openChannelsA…...
