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

相关文章

深度解析Nginx日志分析与499状态码问题解决

《深度解析Nginx日志分析与499状态码问题解决》在Web服务器运维和性能优化过程中,Nginx日志是排查问题的重要依据,本文将围绕Nginx日志分析、499状态码的成因、排查方法及解决方案展开讨论... 目录前言1. Nginx日志基础1.1 Nginx日志存放位置1.2 Nginx日志格式2. 499

在macOS上安装jenv管理JDK版本的详细步骤

《在macOS上安装jenv管理JDK版本的详细步骤》jEnv是一个命令行工具,正如它的官网所宣称的那样,它是来让你忘记怎么配置JAVA_HOME环境变量的神队友,:本文主要介绍在macOS上安装... 目录前言安装 jenv添加 JDK 版本到 jenv切换 JDK 版本总结前言China编程在开发 Java

Spring Boot Actuator应用监控与管理的详细步骤

《SpringBootActuator应用监控与管理的详细步骤》SpringBootActuator是SpringBoot的监控工具,提供健康检查、性能指标、日志管理等核心功能,支持自定义和扩展端... 目录一、 Spring Boot Actuator 概述二、 集成 Spring Boot Actuat

MySQL多实例管理如何在一台主机上运行多个mysql

《MySQL多实例管理如何在一台主机上运行多个mysql》文章详解了在Linux主机上通过二进制方式安装MySQL多实例的步骤,涵盖端口配置、数据目录准备、初始化与启动流程,以及排错方法,适用于构建读... 目录一、什么是mysql多实例二、二进制方式安装MySQL1.获取二进制代码包2.安装基础依赖3.清

Spring Boot集成Druid实现数据源管理与监控的详细步骤

《SpringBoot集成Druid实现数据源管理与监控的详细步骤》本文介绍如何在SpringBoot项目中集成Druid数据库连接池,包括环境搭建、Maven依赖配置、SpringBoot配置文件... 目录1. 引言1.1 环境准备1.2 Druid介绍2. 配置Druid连接池3. 查看Druid监控

Knife4j+Axios+Redis前后端分离架构下的 API 管理与会话方案(最新推荐)

《Knife4j+Axios+Redis前后端分离架构下的API管理与会话方案(最新推荐)》本文主要介绍了Swagger与Knife4j的配置要点、前后端对接方法以及分布式Session实现原理,... 目录一、Swagger 与 Knife4j 的深度理解及配置要点Knife4j 配置关键要点1.Spri

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔

Python中bisect_left 函数实现高效插入与有序列表管理

《Python中bisect_left函数实现高效插入与有序列表管理》Python的bisect_left函数通过二分查找高效定位有序列表插入位置,与bisect_right的区别在于处理重复元素时... 目录一、bisect_left 基本介绍1.1 函数定义1.2 核心功能二、bisect_left 与

Spring中管理bean对象的方式(专业级说明)

《Spring中管理bean对象的方式(专业级说明)》在Spring框架中,Bean的管理是核心功能,主要通过IoC(控制反转)容器实现,下面给大家介绍Spring中管理bean对象的方式,感兴趣的朋... 目录1.Bean的声明与注册1.1 基于XML配置1.2 基于注解(主流方式)1.3 基于Java

基于Python+PyQt5打造一个跨平台Emoji表情管理神器

《基于Python+PyQt5打造一个跨平台Emoji表情管理神器》在当今数字化社交时代,Emoji已成为全球通用的视觉语言,本文主要为大家详细介绍了如何使用Python和PyQt5开发一个功能全面的... 目录概述功能特性1. 全量Emoji集合2. 智能搜索系统3. 高效交互设计4. 现代化UI展示效果