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

Flutter学习13 - Widget

1、Flutter中常用 Widget

在这里插入图片描述

2、StatelessWidget 和 StateFulWidget

  • Flutter 中的 widget 有很多,但主要分两种:
StatelessWidget无状态的 widget如果一个 widget 是最终的或不可变的,那么它就是无状态的
StatefulWidget有状态的 widget如果一个 widget 会被用户交互或数据导致状态改变,那么它就是有状态的

2.1、StatelessWidget

  • Text、AboutDialog、CircleAvatar 等都是 StatelessWidget 的子类

无状态 widget 通常会在 3 种情况下使用:

(1) 将 widget 插入树中时
(2) 当 widget 的父级更改配置时
(3) 当它依赖的 InheritedWidget 发生改变时

代码示例

//无状态 widget
class LeonStateLessWidget extends StatelessWidget {final String text;const LeonStateLessWidget({super.key, required this.text});Widget build(BuildContext context) {return Center(child: Text(text,style: const TextStyle(color: Colors.yellow, fontSize: 26),),);}
}

2.2、StatefulWidget

  • TextField、Checkbox、Radio、Form、Slider、InkWell 等都是 StatefulWidget 的子类
  • StatefulWidget 使用 setState 方法管理状态变化,调用 setState 方法告诉 Flutter 框架某个状态发生了改变,Flutter 会重新运行 build 方法
  • createState() 方法会创建一个管理 widget 状态的状态对象 _xxxState,_xxxState() 类会实现 widget 的 build 方法

代码示例

//有状态 widget
class LeonStatefulWidget extends StatefulWidget {const LeonStatefulWidget({super.key});State<LeonStatefulWidget> createState() => _LeonStatefulWidgetState();
}class _LeonStatefulWidgetState extends State<LeonStatefulWidget> {var count = 0;Widget build(BuildContext context) {return Center(child: Column(children: [Text('点击次数: $count'),ElevatedButton(onPressed: _onClick, child: const Text('点我'))],),);}void _onClick() {setState(() {count++;});}
}

2.3、代码示例

在这里插入图片描述

import 'package:flutter/material.dart';
import 'package:zlzf/widget.dart';void main() {runApp(const MyApp());
}class MyApp extends StatelessWidget {const MyApp({super.key});Widget build(BuildContext context) {return MaterialApp(title: 'Leon Demo',theme: ThemeData(primarySwatch: Colors.blue,),home: Scaffold(appBar: AppBar(title: const LeonStateLessWidget(text: 'Widget 学习',),),body: const LeonStatefulWidget()));}
}

3、补充

  • Flutter 中状态管理的 3 中主要方式:
每个 widget 管理自己的状态如果所讨论的状态是用户数据,例如复选框的已选中或未选中状态,或滑块的位置,则状态最好由父widget管理
父 widget 管理 widget 的状态如果widget的状态取决于动作,例如动画,那么最好是由widget自身来管理状态
混合搭配管理见机行事
http://www.lryc.cn/news/337603.html

相关文章:

  • Django开发一个学生选课系统
  • Vue3项目搭建及文件结构
  • 【机器学习】Logistic与Softmax回归详解
  • MATLAB Simulink仿真搭建及代码生成技术—01自定义新建模型模板
  • 【Java8新特性】二、函数式接口
  • 供应RTC5606H 芯片现货
  • 洛谷-P1596 [USACO10OCT] Lake Counting S
  • 基于双向长短期神经网络BILSTM的发生概率预测,基于GRU神经网络的发生概率预
  • 对OceanBase中的配置项与系统变量,合法性检查实践
  • YOLOv8绝缘子边缘破损检测系统(可以从图片、视频和摄像头三种方式检测)
  • 【vim 学习系列文章 18 -- 选中行前后增加两行】
  • 分布式系统接口限流方案
  • Flutter仿Boss-6.底部tab切换
  • 深入理解机器学习:用Python构建您的第一个预测模型
  • redisson与redis集群检测心跳机制原理
  • 部署Redis
  • 性能测试-数据库优化二(SQL的优化、数据库拆表、分表分区,读写分离、redis)
  • 44.基于SpringBoot + Vue实现的前后端分离-汽车租赁管理系统(项目 + 论文PPT)
  • 2024届数字IC秋招-华为机试-数字芯片-笔试真题和答案(五)(含2022年和2023年)
  • Lua语法(四)——协程
  • LangChain-15 Manage Prompt Size 管理上下文大小,用Agent的方式询问问题,并去百科检索内容,总结后返回
  • OR-TOOL 背包算法
  • 前端h5录音
  • Android Studio 使用Flutter开发第一个Web页面(进行中)
  • Vue.js组件精讲 第2章 基础:Vue.js组件的三个API:prop、event、slot
  • npm install 报 ERESOLVE unable to resolve dependency tree 异常解决方法
  • RPC还是HTTP
  • Conda 常用命令总结
  • Spring MVC 文件上传和下载
  • WSL访问adb usb device