Flutter - StatefulWidget (有状态的 Widget) 和 生命周期

StatefulWidget 

/*** 需求:* 两个按钮,一个计数器* 这里要用到 StatefulWidget,因为 StatelessWidget 通常用来展示固定不变的数据*/
main() => runApp(MyApp());class MyApp extends StatelessWidget {@overrideWidget build(BuildContext context) {return MaterialApp(home: MyHomeContent(),);}
}/*** Widget 中的数据都是不可变的,为何必须定义为 final ?* 因为 Widget 中展示的数据发生变化时辉重新构建整个 Widget* Widget 源码中有 @immutable 注解,(被@immutable注解标明的类或者子类都必须是不可变的)** Flutter 将 StatefulWidget 设计成了两个类,创建 StatefulWidget 时必须创建两个类:* 1 一个类继承自 StatefulWidget,作为 Widget树的一部分* 2 一个类继承自 State,用于记录 StatefulWidget 会变化的状态,并且根据状态的变化,构建出新的 Widget*/
class MyHomeContent extends StatefulWidget {@overrideState<MyHomeContent> createState() => _MyHomeContentState();
}class _MyHomeContentState extends State<MyHomeContent> {var num = 0;@overrideWidget build(BuildContext context) {return Center(child: Column(mainAxisAlignment: MainAxisAlignment.center,children: [Text('计数:$num',style: TextStyle(fontSize: 28,color: Colors.blue,decoration: TextDecoration.none)),Row(mainAxisAlignment: MainAxisAlignment.center,children: [ElevatedButton(onPressed: (){setState(() {num++;});}, child: Icon(Icons.add)),ElevatedButton(onPressed: (){setState(() {num--;});}, child: Icon(Icons.remove))],)],),);}
}

生命周期

main() => runApp(MyApp());class MyApp extends StatelessWidget {@overrideWidget build(BuildContext context) {return MaterialApp(home: MyStatefulWidget(),);}
}class MyStatefulWidget extends StatefulWidget {MyHomeContent(){print('生命周期 ---- MyStatefulWidget的构造方法');}/*** 当 Flutter 构建一个 StatefulWidget 时,会立即调用 createState() 方法。* 这个方法返回一个 State 对象,该对象将管理这个 Widget 的状态。*/@overrideState<MyStatefulWidget> createState() => _MyNumState();
}class _MyNumState extends State<MyStatefulWidget> {_MyNumState(){print('生命周期 ---- _MyNumState的构造方法');}/*** initState() 是 State 对象的初始化方法,只会被调用一次。* 通常在这里进行一些初始化操作,比如订阅流、初始化数据等。*/@overridevoid initState() {super.initState();print('生命周期 ---- _MyNumState的 init方法');}/*** didChangeDependencies() 在 initState() 之后立即调用,* 并且在依赖的 InheritedWidget 发生变化时也会调用。* 通常在这里执行一些依赖于 BuildContext 或 InheritedWidget 的操作。*/@overridevoid didChangeDependencies() {super.didChangeDependencies();print('生命周期 ---- _MyNumState的 didChangeDependencies方法');}/*** build() 方法是构建 Widget 树的核心方法,每次 UI 需要更新时都会调用。* 这个方法必须返回一个 Widget,通常是组合其他 Widget 来构建界面。*/@overrideWidget build(BuildContext context) {print('生命周期 ---- _MyNumState的 build方法');return Center(child: Column(mainAxisAlignment: MainAxisAlignment.center,children: [Row(children: [ElevatedButton(onPressed: (){/*** setState() 用于通知 Flutter 框架状态已经改变,需要重新构建 UI。* 调用 setState() 会触发 build() 方法。*/setState(() {});}, child: Icon(Icons.remove))],)],),);}/*** 当父 Widget 重建并传入新的 Widget 配置时,didUpdateWidget() 会被调用。* 通常在这里比较新旧 Widget 的配置,并根据需要更新状态。*/@overridevoid didUpdateWidget(covariant MyStatefulWidget oldWidget) {super.didUpdateWidget(oldWidget);print('生命周期 ---- _MyNumState的 didUpdateWidget方法');}/*** 当 State 对象从 Widget 树中移除时,deactivate() 会被调用。* 通常在这里做一些清理工作,但 State 对象仍然可能被重新插入到树中。*/@overridevoid deactivate() {super.deactivate();print('生命周期 ---- _MyNumState的 deactivate方法');}/*** 当 State 对象从 Widget 树中永久移除时,dispose() 会被调用。* 通常在这里释放资源,比如取消订阅、关闭流等。*/@overridevoid dispose() {super.dispose();print('生命周期 ---- _MyNumState的 dispose方法');}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/25591.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(八)趣学设计模式 之 装饰器模式!

目录 一、 啥是装饰器模式&#xff1f;二、 为什么要用装饰器模式&#xff1f;三、 装饰器模式的实现方式四、 装饰器模式的优缺点五、 装饰器模式的应用场景六、 装饰器模式 vs 代理模式七、 总结 &#x1f31f;我的其他文章也讲解的比较有趣&#x1f601;&#xff0c;如果喜欢…

如何使用 Ollama 的 API 来生成文本

如何使用 Ollama 的 API 来生成文本 简介 生成文本 生成文本的示例 加载模型 卸载模型 简介 Ollama 提供了一个 RESTful API&#xff0c;允许开发者通过 HTTP 请求与 Ollama 服务进行交互。这个 API 覆盖了所有 Ollama 的核心功能&#xff0c;包括模型管理、运行和监控。本…

Matlab地图绘制教程第2期—水陆填充图

上一期分享了海岸线图的绘制方法&#xff1a; 本着由浅入深的理念&#xff0c;本期再来分享一下水陆填充图的绘制方法。 先来看一下成品效果&#xff1a; 特别提示&#xff1a;Matlab地图绘制教程系列&#xff0c;旨在降低大家使用Matlab进行地图类科研绘图的门槛&#xff0c;…

8.Dashboard的导入导出

分享自己的Dashboard 1. 在Dashboard settings中选择 JSON Model 2. 导入 后续请参考第三篇导入光放Dashboard&#xff0c;相近

计算机毕设-基于springboot的融合多源高校画像数据与协同过滤算法的高考择校推荐系统的设计与实现(附源码+lw+ppt+开题报告)

博主介绍&#xff1a;✌多个项目实战经验、多个大型网购商城开发经验、在某机构指导学员上千名、专注于本行业领域✌ 技术范围&#xff1a;Java实战项目、Python实战项目、微信小程序/安卓实战项目、爬虫大数据实战项目、Nodejs实战项目、PHP实战项目、.NET实战项目、Golang实战…

SpringBoot 整合mongoDB并自定义连接池,实现多数据源配置

要想在同一个springboot项目中使用多个数据源&#xff0c;最主要是每个数据源都有自己的mongoTemplate和MongoDbFactory。mongoTemplate和MongoDbFactory是负责对数据源进行交互的并管理链接的。 spring提供了一个注解EnableMongoRepositories 用来注释在某些路径下的MongoRepo…

2025年信息科学与工程学院科协机器学习介绍——conda环境配置

机器学习——环境的安装 目录 机器学习——环境的安装安装pycharm安装miniconda安装需要的库Miniconda如何使用&#xff1f;镜像网站 下载需要的软件包和库这里着重介绍一下怎么下载pytorch 推荐一个python编辑器 ## 安装python python官网&#xff1a;Welcome to Python.org …

【操作系统】处理机调度

处理机调度 一、调度的概念、层次1.1 三个层次1.2 七状态模型 二、调度算法的评价指标2.1 CPU利用率2.2 系统吞吐率2.3 周转时间2.4 等待时间2.5 响应时间 三、进程调度&#xff08;低级调度&#xff09;的时机3.1 需要进程调度的情况3.2 不能进程调度的情况3.3 闲逛进程 四、进…

特斯拉 FSD 算法深度剖析:软件层面全解读

一、引言 特斯拉的 FSD&#xff08;Full Self-Driving&#xff09;系统作为自动驾驶领域的前沿成果&#xff0c;其软件层面的算法设计至关重要。本文将从软件的角度&#xff0c;深入探讨特斯拉 FSD 所采用的算法&#xff0c;包括感知、规划、控制等多个方面&#xff0c;以期为…

Flutter - 布局Widget

Flutter的布局主要分为 单子组件 和 多子组件 两大类&#xff1a; Container、Padding、Align这些属于单子组件&#xff0c;而Row、Column、ListView这些则是多子组件。 单子组件 Align组件 Align 是一个用于控制子组件位置的单子布局组件。它通过指定对齐方式&#xff08…

WorldQuant Brain的专属语言——Fast Expression

使用brain需要的编程语言 在使用BRAIN平台时往往不需要事先有编码背景&#xff0c;因此小白也能很快对其上手&#xff0c;但有经验的程序员来讲&#xff0c;该平台暂时没有禁止API通信低强度进行时的程序化访问&#xff08;但是非常不好意思&#x1f623;怎么访问我没找到&…

MySQL—使用binlog日志恢复数据

一、binlog日志恢复数据简介 在 MySQL 中&#xff0c;使用二进制日志&#xff08;binlog&#xff09;恢复数据是一种常见的用于故障恢复或数据找回的方法。以下是详细的使用步骤&#xff1a; 确认 binlog 已启用&#xff1a;首先需要确认 MySQL 服务器已经启用了二进制日志功…

解决 ERROR 1130 (HY000): Host is not allowed to connect to this MySQL server

当使用 MySQL 时&#xff0c;您可能会遇到错误信息“ERROR 1130 (HY000): Host ‘hostname’is not allowed to connect to this MySQL server”这是 MySQL 用于防止未经授权的访问的标准安全特性。实际上&#xff0c;服务器还没有配置为接受来自相关主机的连接。 Common Caus…

【Excel】 Power Query抓取多页数据导入到Excel

抓取多页数据想必大多数人都会&#xff0c;只要会点编程技项的人都不会是难事儿。那么&#xff0c;如果只是单纯的利用Excel软件&#xff0c;我还真的没弄过。昨天&#xff0c;我就因为这个在网上找了好久发好久。 1、在数据-》新建查询-》从其他源-》自网站 &#xff0c;如图 …

python-leetcode 45.二叉树转换为链表

题目&#xff1a; 给定二叉树的根节点root,请将它展开为一个单链表&#xff1a; 展开后的单链表应该使用同样的TreeNode,其中right子指针指向链表中的下一个节点&#xff0c;而左子指针始终为空 展开后的单链表应该与二叉树先序遍历顺序相同 方法一&#xff1a;二叉树的前序…

vue3.2 + vxe-table4.x 实现多层级结构的 合并、 展开、收起 功能

<template><div style"padding: 20px"><vxe-table border :data"list" :height"800" :span-method"rowspanMethod"><vxe-column title"一级类目" field"category1"><template #defaul…

C++ Primer 成员访问运算符

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…

Linux:Shell环境变量与命令行参数

目录 Shell的变量功能 什么是变量 变数的可变性与方便性 影响bash环境操作的变量 脚本程序设计&#xff08;shell script&#xff09;的好帮手 变量的使用&#xff1a;echo 变量的使用&#xff1a;HOME 环境变量相关命令 获取环境变量 环境变量和本地变量 命令行…

ollama和open-webui部署ds

博客地址&#xff1a; ollama和open-webui部署ds 引言 最近&#xff0c;deepseek是越来越火&#xff0c;我也趁着这个机会做了下私有化部署&#xff0c;我这边使用的ollama和 open-webui实现的web版本 ollama 简介 Ollama 是一个开源的工具&#xff0c;专门用于简化机器学…

SpringBoot接口自动化测试实战:从OpenAPI到压力测试全解析

引言&#xff1a;接口测试的必要性 在微服务架构盛行的今天&#xff0c;SpringBoot项目的接口质量直接影响着系统稳定性。本文将分享如何通过自动化工具链实现接口的功能验证与性能压测&#xff0c;使用OpenAPI规范打通测试全流程&#xff0c;让您的接口质量保障体系更加完备。…