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

Flutter

这里写自定义目录标题

  • Flutter
    • 1. 状态管理

Flutter

1. 状态管理

全局状态管理------------待补充(当应用中需要一些跨组件(包括跨路由)的状态需要同步时,上面介绍的方法便很难胜任了。比如,我们有一个设置页,里面可以设置应用的语言,我们为了让设置实时生效,我们期望在语言状态发生改变时,App中依赖应用语言的组件能够重新 build 一下,但这些依赖应用语言的组件和设置页并不在一起,所以这种情况用上面的方法很难管理。这时,正确的做法是通过一个全局状态管理器来处理这种相距较远的组件之间的通信)。

父Widget管理子Widget的状态:父组件负责“拥有”状态(即管理状态),而子组件负责“触发”状态变化。通过父组件传递回调函数,子组件可以“通知”父组件发生了什么变化,父组件通过 setState() 更新自己的状态并重新构建 UI。

// ParentWidget 为 TapboxB 管理状态.//------------------------ ParentWidget --------------------------------import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';class ParentWidget extends StatefulWidget {_ParentWidgetState createState() => _ParentWidgetState();
}class _ParentWidgetState extends State<ParentWidget> {bool _active = false;void _handleTapboxChanged(bool newValue) {setState(() {_active = newValue;});}Widget build(BuildContext context) {return Container(child: TapboxB(active: _active,onChanged: _handleTapboxChanged,),);}
}//------------------------- TapboxB ----------------------------------class TapboxB extends StatelessWidget {TapboxB({Key? key, this.active = false, required this.onChanged}): super(key: key);final bool active;final ValueChanged<bool> onChanged;void _handleTap() {onChanged(!active);}Widget build(BuildContext context) {return GestureDetector(onTap: _handleTap,child: Container(child: Center(child: Text(active ? 'Active' : 'Inactive',style: TextStyle(fontSize: 32.0, color: Colors.white),),),width: 200.0,height: 200.0,decoration: BoxDecoration(color: active ? Colors.lightGreen[700] : Colors.grey[600],),),);}
}

用户点击 -> _handleTap -> 执行 onChanged(!active) ->子组件的 onChanged为父组件传递的_handleTapboxChanged回调 -> 执行_handleTapboxChanged方法,里面包含setState,就会更新UI。
整体来看:父组件控制子类的状态,通过定义setState来实现状态的变化,为了要控制子组件,父类传递给子类状态和回调(只是函数的名字,没有执行,只是传递),在子类中,当用户点击之后执行父类传递的回调函数(这里是函数名字+(参数),即执行方法),这个方法为setState,出发UI更新和状态变化。

http://www.lqws.cn/news/606079.html

相关文章:

  • Oracle 证书等级介绍
  • Rust 安装使用教程
  • 去中心化身份:2025年Web3身份验证系统开发实践
  • 【数据结构】排序算法:冒泡与快速
  • MacOS 安装brew 国内源【超简洁步骤】
  • transformers==4.42.0会有一个BUG
  • 从SEO到GEO:AI时代的品牌大模型种草与数字营销重构
  • Ubuntu-18.04-bionic 的apt的/etc/apt/sources.list 更换国内镜像软件源 笔记250702
  • WPF学习笔记(20)Button与控件模板
  • 从模型部署到AI平台:云原生环境下的大模型平台化演进路径
  • 如快 Sofast:自定义快捷键 剪贴板智能管家快速查找搜索提升办公效率
  • 全面的 Spring Boot 整合 RabbitMQ 的 `application.yml` 配置示例
  • HarmonyOS学习记录2
  • Linux平台MinGW32/MinGW64交叉编译完全指南:原理、部署与组件详解
  • 计算机网络(五)数据链路层 MAC和ARP协议
  • RuoYi框架低代码特性
  • 医学+AI教育实践!南医大探索数据挖掘人才培养,清华指导发布AI教育白皮书
  • Java项目:基于SSM框架实现的软件工程项目管理系统【ssm+B/S架构+源码+数据库+毕业论文+开题报告】
  • python: 字符串编码和解码
  • CAN转Modbus TCP网关赋能食品搅拌机智能协同控制
  • 支持向量机(SVM)在脑部MRI分类中的深入应用与实现
  • Django全栈开发:架构解析与性能优化实战
  • 基于开源链动2+1模式AI智能名片S2B2C商城小程序的场景零售创新研究
  • 【算法】动态规划 矩阵:120. 三角形最小路径和
  • 达梦数据库linux安装
  • 飞算 JavaAI 智控引擎:全链路开发自动化新图景
  • 自动化Docker容器化安装与配置工具介绍
  • 7月2日星期三今日早报简报微语报早读
  • Intellij IDEA 2023的下载和安装
  • Servlet开发流程(包含IntelliJ IDEA项目添加Tomcat依赖的详细教程)