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

flutter 专题 九十六 Flutter开发之常用Widgets

上一篇,我们介绍了基础Widgets,接下来,我们看一下Flutter开发中一些比较常见的Widget。

Flutter Widget采用现代响应式框架构建,这是从 React 中获得的灵感,中心思想是用widget构建你的UI。 Widget描述了他们的视图在给定其当前配置和状态时应该看起来像什么。当widget的状态发生变化时,widget会重新构建UI,Flutter会对比前后变化的不同, 以确定底层渲染树从一个状态转换到下一个状态所需的最小更改,类似于React/Vue中虚拟DOM的diff算法。

状态管理

响应式的编程框架中都会有一个永恒的主题——“状态(State)管理”,无论是在React/Vue(两者都是支持响应式编程的Web开发框架)还是Flutter中,他们讨论的问题和解决的思想都是一致的。谈到管理状态,就不得不说以下几个常见的方法:

  • Widget管理自己的状态。
  • Widget管理子Widget状态。
  • 混合管理(父Widget和子Widget都管理状态)。

那么,如何选择哪种状态管理方式呢?下面是官方给出的一些原则可以帮助你做出决定。

  • 如果状态是用户数据,如复选框的选中状态、滑块的位置,则该状态最好由父Widget管理。
  • 如果状态是有关界面外观效果的,例如颜色、动画,那么状态最好由Widget本身来管理。
  • 如果某一个状态是不同Widget共享的则最好由它们共同的父Widget管理。

接下来,我们将通过创建三个简单示例TapboxA、TapboxB和TapboxC来说明管理状态的不同方式。
这些例子功能是相似的 ——创建一个盒子,当点击它时,盒子背景会在绿色与灰色之间切换。状态 _active确定颜色:绿色为true ,灰色为false,如下图所示。

管理自身状态

例如,有一个_TapboxAState类,该类主要实现了以下一些功能:

  • 管理TapboxA的状态。
  • 定义_active:确定盒子的当前颜色的布尔值。
  • 定义_handleTap()函数,该函数在点击该盒子时更新_active,并调用setState()更新UI。
  • 实现widget的所有交互式行为。
class TapboxA extends StatefulWidget {TapboxA({Key key}) : super(key: key);@override_TapboxAState createState() => new _TapboxAState();
}class _TapboxAState extends State<TapboxA> {bool _active = false;void _handleTap() {setState(() {_active = !_active;});}Widget build(BuildContext context) {return new GestureDetector(onTap: _handleTap,child: new Container(child: new Center(child: new Text(_active ? 'Active' : 'Inactive',style: new TextStyle(fontSize: 32.0, color: Colors.white),),),width: 200.0,height: 200.0,decoration: new BoxDecoration(color: _active ? Colors.lightGreen[700] : Colors.grey[600],),),);}
}

布局Widget

相关文章:

flutter 专题 九十六 Flutter开发之常用Widgets

上一篇&#xff0c;我们介绍了基础Widgets&#xff0c;接下来&#xff0c;我们看一下Flutter开发中一些比较常见的Widget。 Flutter Widget采用现代响应式框架构建&#xff0c;这是从 React 中获得的灵感&#xff0c;中心思想是用widget构建你的UI。 Widget描述了他们的视图在…...

Linux环境下内存错误问题排查与修复

最近这几天服务器总是掉线&#xff0c;要查一下服务器的问题。可以首先查看一下计算机硬件&#xff0c;这是一台某鱼上拼凑的服务器&#xff1a; sudo lshw -shortH/W path Device Class Description system NF5270M3 (To be filled by O…...

flutter 专题 六十八 Flutter 多图片上传

使用Flutter进行应用开发时&#xff0c;经常会遇到选图、拍照等需求。如果要求不高&#xff0c;Flutter图库选择可以使用官方提供的image_picker&#xff0c;如果需要多选&#xff0c;那么可以使用multi_image_picker插件库。multi_image_picker库支持图库管理&#xff0c;多选…...

与总社团联合会合作啦

2025.4.2日&#xff0c;我社团向总社团联合会与暮光社团发起合作研究“浔川代码编辑器v2.0”。至3日&#xff0c;我社团收到回复&#xff1a; 总社团联合会&#xff1a; 总社团联合会已收到浔川社团官方联合会的申请&#xff0c;经考虑&#xff0c;我们同意与浔川社团官方联合…...

技巧:使用 ssh 设置隧道代理访问 github

问题 由于不可知的原因&#xff0c;在国内服务器不能访问 Github。但是有clone代码需求&#xff0c;这里介绍一种可行的方法。 解决办法 使用 ssh 设置代理&#xff0c;让代理服务器请求 github 解决。 第一步 ssh -fND 1080 用户名代理服务器IP这里的意思是监听 1080 端口…...

安装 TabbyAPI+Exllamav2 和 vLLM 的详细步骤

在 5090 显卡上成功安装 TabbyAPIExllamav2 和 vLLM 并非易事&#xff0c;经过一番摸索&#xff0c;我总结了以下详细步骤&#xff0c;希望能帮助大家少走弯路。 重要提示&#xff1a; 用户提供的 PyTorch 安装使用了 cu128&#xff0c;这并非标准 CUDA 版本。请根据你的系统实…...

Linux 进程信号

目录 信号 生活角度的信号 技术应用角度的信号 signal函数 信号概念 用kill -l命令可以察看系统定义的信号列表 信号处理常见方式概览 信号的产生 通过键盘组合键发送信号 通过系统函数向进程发信号 由软件条件产生信号 由硬件异常产生信号 信号的保存 阻塞信号 ​…...

【学习篇】fastapi接口定义学习

fastapi学习链接&#xff1a;用户指南 1. 路径参数 访问fastapi接口的默认http路径为http://127.0.0.1:8000&#xff0c;/items为定义的接口函数read_item的路径&#xff0c;/{item_id}这个用大括号括起来的参数就是路径参数&#xff0c;接口函数可以通过引用这个路径参数名称…...

第十二步:react

React 1、安装 1、脚手架 npm i -g create-react-app&#xff1a;安装react官方脚手架create-react-app 项目名称&#xff1a;初始化项目 2、包简介 react&#xff1a;react框架的核心react-dom&#xff1a;react视图渲染核心react-native&#xff1a;构建和渲染App的核心…...

MySQL简介

MySQL 是由瑞典 MySQL AB 公司开发的一款开源关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;现归属 Oracle 公司。以下是其核心特点及简介&#xff1a; 1. 基础特性 - 开源免费&#xff1a;遵循 GPL 协议&#xff0c;个人及中小型企业可免费使用&#xff0c;…...

AIGC时代Kubernetes企业级云原生运维实战:智能重构与深度实践指南

文章目录 一、AIGC技术栈与Kubernetes的深度融合1. 智能配置生成&#xff1a;从YAML到自然语言2. 动态资源优化&#xff1a;AI驱动的弹性伸缩 二、智能运维体系架构深度解析四维能力矩阵增强实现&#xff1a;关键组件升级代码示例&#xff1a; 三、企业级实战策略深度实践策略1…...

市场波动与交易策略优化

市场波动与交易策略优化 在交易市场中&#xff0c;价格波动是常态。如何有效应对市场的波动&#xff0c;制定合理的交易策略&#xff0c;成为许多交易者关注的重点。本文将探讨市场波动的影响因素&#xff0c;并介绍应对不同市场波动环境的策略。 一、市场波动的影响因素 市场供…...

Prolog语言的移动UI设计

Prolog语言的移动UI设计 随着移动设备的普及&#xff0c;用户界面的设计已成为软件开发的重要组成部分。移动UI设计不仅要注重美观&#xff0c;更要关注用户体验和功能的实现。使用Prolog语言进行移动UI设计&#xff0c;虽然相对少见&#xff0c;但其逻辑编程的特性为复杂的交…...

linux 命令 awk

awk 是 Linux/Unix 系统中一个强大的文本处理工具&#xff0c;尤其擅长处理结构化文本数据&#xff08;如日志、表格数据&#xff09;。它不仅是命令行工具&#xff0c;还是一种脚本语言&#xff0c;支持变量、条件、循环等编程特性 1. 基本语法 awk [选项] 模式 {动作} 文件名…...

在 PyQt 加载 UI 三种方法

目录 方法一&#xff1a;使用 uic 模块动态加载 &#xff08;不推荐用于大型项目&#xff09; 方法二&#xff1a;将 UI 文件编译为 Python 模块后导入 方法3&#xff1a;使用uic模块直接在代码中加载UI文件 注意事项 总结&#xff1a; 在PyQt中&#xff0c;加载UI文件通常…...

前端快速入门学习2-HTML

一、概述 HTML全称是Hypertext Markup Language(超文本标记语言) HTML通过一系列的 标签(也称为元素) 来定义文本、图像、链接等等。HTML标签是由尖括号包围的关键字。 标签通常成对出现&#xff0c;包括开始标签和结束标签(也称为双标签)&#xff0c;内容位于这两个标签之间…...

Cortex-M系列MCU的位带操作

Cortex-M系列位带操作详解 位带&#xff08;Bit-Banding&#xff09;是Cortex-M3/M4等处理器提供的一种硬件特性&#xff0c;允许通过别名地址对内存或外设寄存器中的单个位进行原子读-改-写操作&#xff0c;无需禁用中断或使用互斥锁。以下是位带操作的完整指南&#xff1a; …...

【嵌入式-stm32电位器控制LED亮灭以及编码器控制LED亮灭】

嵌入式-stm32电位器控制LED亮暗 任务代码Key.cKey.hmain.c 实验现象 任务 本文主要介绍利用stm32f103C8T6实现电位器控制PWM的占空比大小来改变LED亮暗程度&#xff0c;按键实现使用定时器非阻塞式&#xff0c;其中一个按键切换3个LED的控制状态&#xff0c;另一个按键是重置当…...

抖音热点视频识别与分片处理机制解析

抖音作为日活数亿的短视频平台,其热点视频识别和分片处理机制是支撑高并发访问的核心技术。以下是抖音热点视频识别与分片的实现方案: 热点视频识别机制 1. 实时行为监控系统 用户行为聚合:监控点赞、评论、分享、完播率等指标的异常增长曲线内容特征分析:通过AI识别视频…...

添加购物车功能

业务需求&#xff1a; 用户提交三个字段&#xff0c;服务端根据提交的字段判断是菜品还是套餐&#xff0c;根据菜品或者套餐添加购物车表中。 代码实现 RestController Slf4j RequestMapping("/user/shoppingCart") public class ShoppingCartController {Autowired…...

蓝桥杯备赛 Day16 单调数据结构

单调栈和单调队列能够动态的维护&#xff0c;还需用1-2两个数组在循环时从单调栈和单调队列中记录答案 单调栈 要点 1.时刻保持内部元素具有单调性质的栈(先进后出),核心是:入栈时逐个删除所有"更差的点",一般可分为单调递减栈、单调递增栈、单调不减栈、单调不增…...

AI Agent开发大全第十九课-神经网络入门 (Tensorflow)

(前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站)。 一、从买房困惑到神经元:神经网络的灵感来源 1.1 房地产经纪人的定价难题 想象一个周末的房产中介门店,经纪人小李正面对10份不同房源的报...

Mac VM 卸载 win10 安装win7系统

卸载 找到相应直接删除&#xff08;移动到废纸篓&#xff09; 可参考&#xff1a;mac如何卸载虚拟机win 下载 win7下载地址...

torch.nn中的非线性激活使用

1、神经网络中的非线性激活 在神经网络中&#xff0c;**非线性激活函数&#xff08;Non-linear Activation Functions&#xff09;**是引入非线性变换的关键组件&#xff0c;使神经网络能够学习并建模复杂的非线性关系。如果没有激活函数&#xff0c;无论神经网络有多少层&…...

【安全】Web渗透测试(全流程)_渗透测试学习流程图

1 信息收集 1.1 域名、IP、端口 域名信息查询&#xff1a;信息可用于后续渗透 IP信息查询&#xff1a;确认域名对应IP&#xff0c;确认IP是否真实&#xff0c;确认通信是否正常 端口信息查询&#xff1a;NMap扫描&#xff0c;确认开放端口 发现&#xff1a;一共开放两个端口&…...

要素的选择与转出

1.要素选择的三种方式 当要在已有的数据中选择部分要素时&#xff0c;ArcMap提供了三种方式:按属性选择、位置选择及按图形选择。 1)按属性选择 通过设置 SQL查询表达式&#xff0c;用来选择与选择条件匹配的要素。 (1)单击主菜单下【选择】【按属性选择】&#xff0c;打开【按…...

C 语言命令行参数:让程序交互更灵活

一、引言 在 C 语言编程领域&#xff0c;命令行参数是一种极为实用的机制&#xff0c;它允许我们在执行程序时&#xff0c;从外部向程序传递数据。这一特性极大地增强了程序的灵活性和可控性&#xff0c;避免了在代码中对数据进行硬编码。比如在开发系统工具、脚本程序时&…...

部署nerdctl工具

nerdctl 是一个专为Containerd设计的容器管理命令行工具&#xff0c;旨在提供类似 Docker 的用户体验&#xff0c;同时支持 Containerd 的高级特性&#xff08;如命名空间、compose等&#xff09;。 1、下载安装 wget https://github.com/containerd/nerdctl/releases/downlo…...

SOA 架构

定义与概念&#xff1a;SOA 将应用程序的不同功能单元&#xff08;称为服务&#xff09;进行封装&#xff0c;并通过定义良好的接口和协议来实现这些服务之间的通信和交互。这些服务可以在不同的平台和编程语言中实现&#xff0c;彼此之间相互独立&#xff0c;能够以松散耦合的…...

K8s私有仓库拉取镜像报错解决:x509 certificate signed by unknown authority

前言 在Kubernetes环境中使用自签名证书的私有Harbor镜像仓库时&#xff0c;常会遇到证书验证失败的问题。本文将详细讲解如何解决这个常见的证书问题。 环境信息&#xff1a; Kubernetes版本&#xff1a;1.28.2容器运行时&#xff1a;containerd 1.6.20私有仓库&#xff1a…...

在线考试系统带万字文档java项目java课程设计java毕业设计springboot项目

文章目录 在线考试系统一、项目演示二、项目介绍三、万字项目文档四、部分功能截图五、部分代码展示六、底部获取项目源码带万字文档&#xff08;9.9&#xffe5;带走&#xff09; 在线考试系统 一、项目演示 在线考试系统 二、项目介绍 1、管理员角色&#xff1a; 考试管理&…...

Axure RP 9 详细图文安装流程(附安装包)教程包含下载、安装、汉化、授权

文章目录 前言一、Axure RP 9介绍二、Axure RP 9 安装流程1. Axure RP 9 下载2. 启动安装程序3. 安装向导操作4.完成安装 三、Axure RP 9 汉化四、Axure RP 9授权 前言 本基础安装流程教程&#xff0c;将以清晰、详尽且易于遵循的步骤介绍Axure RP 9 详细图文安装流程&#xf…...

动态规划练习题④

583. 两个字符串的删除操作 给定两个单词 word1 和 word2 &#xff0c;返回使得 word1 和 word2 相同所需的最小步数。 每步 可以删除任意一个字符串中的一个字符。 示例 1&#xff1a; 输入: word1 "sea", word2 "eat" 输出: 2 解释: 第一步将 &quo…...

多输入多输出 | Matlab实现BO-GRU贝叶斯优化门控循环单元多输入多输出预测

多输入多输出 | Matlab实现BO-GRU贝叶斯优化门控循环单元多输入多输出预测 目录 多输入多输出 | Matlab实现BO-GRU贝叶斯优化门控循环单元多输入多输出预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Matlab实现BO-GRU贝叶斯优化门控循环单元多输入多输出预测&#…...

爬虫工程师的社会现状

现在网上你只要搜索教程就是韦世东;k哥爬虫教你爬虫方面的逆向知识;然后看着这些逆向js百例;搞得我很尴尬我做了这么多年的爬虫工程师;现在算什么;这些逆向的东西我并没有很深层次的了解;但是工作的内容也依旧解决了;并没有到爬虫工程师非要会那么多逆向才能算的上是合格的爬虫…...

Flink 1.20 Kafka Connector:新旧 API 深度解析与迁移指南

Flink Kafka Connector 新旧 API 深度解析与迁移指南 一、Flink Kafka Connector 演进背景 Apache Flink 作为实时计算领域的标杆框架&#xff0c;其 Kafka 连接器的迭代始终围绕性能优化、语义增强和API 统一展开。Flink 1.20 版本将彻底弃用基于 FlinkKafkaConsumer/FlinkK…...

Vue2 父子组件数据传递与调用:从 ref 到 $emit

提示&#xff1a;https://github.com/jeecgboot/jeecgboot-vue2 文章目录 案例父组件向子组件传递数据的方式父组件调用子组件方法的方式子组件向父组件传递数据的方式流程示意图 案例 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 以下是 整合后的关…...

【matplotlib参数调整】

1. 基本绘图函数常用参数 折线图 import matplotlib.pyplot as plt import numpy as npx np.linspace(0, 10, 100) y np.sin(x)plt.plot(x, y, colorred, linestyle--, linewidth2,markero, markersize5, labelsin(x), alpha0.8) plt.title(折线图示例) plt.xlabel(X 轴) p…...

如何使用 IntelliJ IDEA 开发命令行程序(或 Swing 程序)并手动管理依赖(不使用 pom.xml)

以下是详细步骤&#xff1a; 1. 创建项目 1.1 打开 IntelliJ IDEA。 1.2 在启动界面&#xff0c;点击 Create New Project&#xff08;创建新项目&#xff09;。 1.3 选择 Java&#xff0c;然后点击 Next。 1.4 确保 Project SDK 选择了正确的 JDK 版本&#x…...

Linux红帽:RHCSA认证知识讲解(十 一)配置NTP 时间同步、用户密码策略与使用 autofs 实现 NFS 自动挂载

Linux红帽&#xff1a;RHCSA认证知识讲解&#xff08;十 一&#xff09;配置NTP 时间同步、用户密码策略与 NFS 自动挂载 前言一、配置 NTP 时间同步1.1 NTP 简介1.2 安装和配置 NTP 客户端 二、配置新建用户密码过期时间2.1 查看用户密码过期时间2.2 修改密码过期时间 三、使用…...

ffmpeg音视频处理流程

文章目录 FFmpeg 音视频处理流程详细讲解总结音视频处理流程相关的 FFmpeg 工具和命令 FFmpeg 的音视频处理流程涵盖了从输入文件读取数据、编码和解码操作、数据处理、以及最终输出数据的完整过程。为了更好地理解这一流程&#xff0c;我们可以从以下几个关键步骤来分析&#…...

leetcode-代码随想录-链表-移除链表元素

题目 链接&#xff1a;203. 移除链表元素 - 力扣&#xff08;LeetCode&#xff09; 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 输入&#xff1a;head [1,2,6,3,4,5,6], val 6 …...

c++与rust的语言区别,rust的主要难点,并举一些例子

C 和 Rust 都是系统级编程语言&#xff0c;它们在设计目标、语法、内存管理等方面存在诸多区别&#xff0c;以下为你详细介绍&#xff1a; 设计目标 C&#xff1a;C 最初是为了给 C 语言添加面向对象编程特性而设计的&#xff0c;之后不断发展&#xff0c;旨在提供高性能、灵…...

从基础算力协作到超智融合,超算互联网助力大语言模型研习

一、背景 大语言模型&#xff08;LLMs&#xff09;的快速发展释放出了AI应用领域的巨大潜力。同时&#xff0c;大语言模型作为 AI领域的新兴且关键的技术进展&#xff0c;为 AI 带来了全新的发展方向和应用场景&#xff0c;给 AI 注入了新潜力&#xff0c;这体现在大语言模型独…...

【spring cloud Netflix】Eureka注册中心

1.概念 Eureka就好比是滴滴&#xff0c;负责管理、记录服务提供者的信息。服务调用者无需自己寻找服务&#xff0c;而是把自己的 需求告诉Eureka&#xff0c;然后Eureka会把符合你需求的服务告诉你。同时&#xff0c;服务提供方与Eureka之间通过“心跳” 机制进行监控&#xf…...

记录学习的第二十天

今天只做了一道题&#xff0c;有点不在状态。 这道题其实跟昨天的每日一题是差不多的&#xff0c;不过这道题需要进行优化。 根据i小于j&#xff0c;且j小于k&#xff0c;当nums[j]确定时&#xff0c;保证另外两个最大即可得答案。 所以可以使用前缀最大值和后缀最大值。 代…...

7-5 表格输出

作者 乔林 单位 清华大学 本题要求编写程序&#xff0c;按照规定格式输出表格。 输入格式&#xff1a; 本题目没有输入。 输出格式&#xff1a; 要求严格按照给出的格式输出下列表格&#xff1a; ------------------------------------ Province Area(km2) Pop.(…...

【爬虫开发】爬虫开发从0到1全知识教程第14篇:scrapy爬虫框架,介绍【附代码文档】

本教程的知识点为&#xff1a;爬虫概要 爬虫基础 爬虫概述 知识点&#xff1a; 1. 爬虫的概念 requests模块 requests模块 知识点&#xff1a; 1. requests模块介绍 1.1 requests模块的作用&#xff1a; 数据提取概要 数据提取概述 知识点 1. 响应内容的分类 知识点&#xff1a…...

安装 Microsoft Visual C++ Build Tools

Microsoft Visual C Build Tools下载安装 安装Microsoft Visual C Build Tools是为了在windows系统上编译和运行需要C支持的程序或库&#xff08;例如某些Python包&#xff0c;Node.js模块等&#xff09;。 1.下载 打开浏览器&#xff0c;访问 Visual Studio Build Tools下载…...

启服云专利管理系统:铸就知识产权保护的坚固壁垒

在全球竞争日益激烈的今天&#xff0c;知识产权已经成为企业核心竞争力的关键组成部分&#xff0c;而专利作为知识产权的重要体现&#xff0c;其管理和保护显得尤为重要。启服云专利管理系统凭借其卓越的功能和先进的技术&#xff0c;在知识产权保护领域展现出了显著的优势。 高…...