6、Flutter - 状态管理 StatelessWidget 和 StatefulWidget

2023-11-29 06:38

本文主要是介绍6、Flutter - 状态管理 StatelessWidget 和 StatefulWidget,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

状态管理 StatelessWidget 和  StatefulWidget

 

详细代码参见Demo

Demo地址 -> flutter_testdemo2

 

创建一个

state_mag_demo.dart  的文件

import 'package:flutter/material.dart';

widget 继承自 StatelessWidget 或  StatefulWidget


StatelessWidget 无状态 里面的数据是静态的,也就是创建出来之后是不能改变的
StatelessWidget 只渲染一次,如下点击count 加了之后不会去调用build 去渲染页面

当我们想实现一个动态改变的页面时,使用 StatelessWidget 是我法满足我们需要的

例如如下代码。我们添加一个button。然后点击改变 count 的值,页面是的Text 是不会改变的,因为 StatelessWidget build 只执行一次,不会去重新渲染页面

class StateManagerDemo extends StatelessWidget {int count = 0;@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text('StateManagerDemo'),),body: Center(child: Chip(label: Text('$count')),),floatingActionButton: FloatingActionButton(child: Icon(Icons.add),onPressed: () {count += 1;print('count = $count');},));}
}

 

可以使用 StatefulWidget 有状态的

有状态,这是一个树状结构,如果变化的话通知 StatefulWidget 将会从头到尾全部重新渲染
所以不要什么都用 StatefulWidget
 

State 用来管理状态的 ,

State<StateManagerDemo2> 泛型用来关联 StateManagerDemo2

// 有状态,这是一个树状结构,如果变化的话通知 StatefulWidget 将会从头到尾全部重新渲染
//所以不要什么都用 StatefulWidget
class StateManagerDemo2 extends StatefulWidget {@override_StateManagerDemo2State createState() => _StateManagerDemo2State();
}//State 用来管理状态的
//State<StateManagerDemo2> 泛型用来关联 StateManagerDemo2
class _StateManagerDemo2State extends State<StateManagerDemo2> {int count = 0;@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text('StateManagerDemo'),),body: Center(child: Chip(label: Text('$count')),),floatingActionButton: FloatingActionButton(child: Icon(Icons.add),onPressed: () {setState(() {//当发生变化的时候去重新buildcount += 1;});print('count = $count');},));}
}

有状态
StatefulWidget
State  build 去渲染界面
setState(() { 有变化时去通知 StatefulWidget 重新build 渲染一下界面。是增量的


Widget  有点类似于 iOS中的 view
写在widget里的需要用widget去关联
如果直接写在state里的可以直接拿到

上面的 int count = 0;要是写到  StatefulWidget 中,在State 中用的话需要widget.count 去访问

这篇关于6、Flutter - 状态管理 StatelessWidget 和 StatefulWidget的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/431827

相关文章

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

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

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用

SpringBoot使用minio进行文件管理的流程步骤

《SpringBoot使用minio进行文件管理的流程步骤》MinIO是一个高性能的对象存储系统,兼容AmazonS3API,该软件设计用于处理非结构化数据,如图片、视频、日志文件以及备份数据等,本文... 目录一、拉取minio镜像二、创建配置文件和上传文件的目录三、启动容器四、浏览器登录 minio五、

IDEA中的Kafka管理神器详解

《IDEA中的Kafka管理神器详解》这款基于IDEA插件实现的Kafka管理工具,能够在本地IDE环境中直接运行,简化了设置流程,为开发者提供了更加紧密集成、高效且直观的Kafka操作体验... 目录免安装:IDEA中的Kafka管理神器!简介安装必要的插件创建 Kafka 连接第一步:创建连接第二步:选

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

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

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

hdu1565(状态压缩)

本人第一道ac的状态压缩dp,这题的数据非常水,很容易过 题意:在n*n的矩阵中选数字使得不存在任意两个数字相邻,求最大值 解题思路: 一、因为在1<<20中有很多状态是无效的,所以第一步是选择有效状态,存到cnt[]数组中 二、dp[i][j]表示到第i行的状态cnt[j]所能得到的最大值,状态转移方程dp[i][j] = max(dp[i][j],dp[i-1][k]) ,其中k满足c

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

软考系统规划与管理师考试证书含金量高吗?

2024年软考系统规划与管理师考试报名时间节点: 报名时间:2024年上半年软考将于3月中旬陆续开始报名 考试时间:上半年5月25日到28日,下半年11月9日到12日 分数线:所有科目成绩均须达到45分以上(包括45分)方可通过考试 成绩查询:可在“中国计算机技术职业资格网”上查询软考成绩 出成绩时间:预计在11月左右 证书领取时间:一般在考试成绩公布后3~4个月,各地领取时间有所不同

安全管理体系化的智慧油站开源了。

AI视频监控平台简介 AI视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。用户只需在界面上进行简单的操作,就可以实现全视频的接入及布控。摄像头管理模块用于多种终端设备、智能设备的接入及管理。平台支持包括摄像头等终端感知设备接入,为整个平台提