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

相关文章

基于Python和MoviePy实现照片管理和视频合成工具

《基于Python和MoviePy实现照片管理和视频合成工具》在这篇博客中,我们将详细剖析一个基于Python的图形界面应用程序,该程序使用wxPython构建用户界面,并结合MoviePy、Pill... 目录引言项目概述代码结构分析1. 导入和依赖2. 主类:PhotoManager初始化方法:__in

关于WebSocket协议状态码解析

《关于WebSocket协议状态码解析》:本文主要介绍关于WebSocket协议状态码的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录WebSocket协议状态码解析1. 引言2. WebSocket协议状态码概述3. WebSocket协议状态码详解3

Flutter打包APK的几种方式小结

《Flutter打包APK的几种方式小结》Flutter打包不同于RN,Flutter可以在AndroidStudio里编写Flutter代码并最终打包为APK,本篇主要阐述涉及到的几种打包方式,通... 目录前言1. android原生打包APK方式2. Flutter通过原生工程打包方式3. Futte

nvm如何切换与管理node版本

《nvm如何切换与管理node版本》:本文主要介绍nvm如何切换与管理node版本问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录nvm切换与管理node版本nvm安装nvm常用命令总结nvm切换与管理node版本nvm适用于多项目同时开发,然后项目适配no

Redis实现RBAC权限管理

《Redis实现RBAC权限管理》本文主要介绍了Redis实现RBAC权限管理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1. 什么是 RBAC?2. 为什么使用 Redis 实现 RBAC?3. 设计 RBAC 数据结构

Flutter监听当前页面可见与隐藏状态的代码详解

《Flutter监听当前页面可见与隐藏状态的代码详解》文章介绍了如何在Flutter中使用路由观察者来监听应用进入前台或后台状态以及页面的显示和隐藏,并通过代码示例讲解的非常详细,需要的朋友可以参考下... flutter 可以监听 app 进入前台还是后台状态,也可以监听当http://www.cppcn

mac安装nvm(node.js)多版本管理实践步骤

《mac安装nvm(node.js)多版本管理实践步骤》:本文主要介绍mac安装nvm(node.js)多版本管理的相关资料,NVM是一个用于管理多个Node.js版本的命令行工具,它允许开发者在... 目录NVM功能简介MAC安装实践一、下载nvm二、安装nvm三、安装node.js总结NVM功能简介N

MySQL 中的服务器配置和状态详解(MySQL Server Configuration and Status)

《MySQL中的服务器配置和状态详解(MySQLServerConfigurationandStatus)》MySQL服务器配置和状态设置包括服务器选项、系统变量和状态变量三个方面,可以通过... 目录mysql 之服务器配置和状态1 MySQL 架构和性能优化1.1 服务器配置和状态1.1.1 服务器选项

SpringBoot中使用 ThreadLocal 进行多线程上下文管理及注意事项小结

《SpringBoot中使用ThreadLocal进行多线程上下文管理及注意事项小结》本文详细介绍了ThreadLocal的原理、使用场景和示例代码,并在SpringBoot中使用ThreadLo... 目录前言技术积累1.什么是 ThreadLocal2. ThreadLocal 的原理2.1 线程隔离2

linux进程D状态的解决思路分享

《linux进程D状态的解决思路分享》在Linux系统中,进程在内核模式下等待I/O完成时会进入不间断睡眠状态(D状态),这种状态下,进程无法通过普通方式被杀死,本文通过实验模拟了这种状态,并分析了如... 目录1. 问题描述2. 问题分析3. 实验模拟3.1 使用losetup创建一个卷作为pv的磁盘3.