【Flutter】- 核心语法

文章目录

  • 知识回顾
  • 前言
  • 源码分析
    • 1. 有状态组件
    • 2. 无状态组件
    • 3. 组件生命周期
    • 4. 常用组件
        • Container组件
        • Text组件
        • Image组件
        • 布局组件row colum stack expanded
        • ElevntButton按钮
  • 拓展知识
  • 总结


知识回顾

【Flutter】- 基础语法

前言

Flutter是以组件化的思想构建客户端页面的,类似于 vue 和 react,每个组件都有独立的结构、样式和交互。

Flutter的组件分为两大类:无状态组件 和 有状态组件

● StatelessWidget: 没有状态改变的Widget,通常这种Widget仅仅是做一些展示工作而已;
● StatefulWidget: 需要保存状态,并且可能出现状态改变的Widget;


源码分析

1. 有状态组件

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';class MyApp3 extends StatefulWidget {const MyApp3({super.key});@overrideState<MyApp3> createState() => _MyApp3State();
}class _MyApp3State extends State<MyApp3> {String name = '';int age = 0;@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text('有状态组件'),),body: Center(child: Text('name:$name,age:$age'),),floatingActionButton: FloatingActionButton(onPressed: () {setState(() {age++;});},backgroundColor: Colors.red,child: const Icon(Icons.add),),);}
}

2. 无状态组件

import 'package:flutter/material.dart';class MyApp2 extends StatelessWidget {MyApp2({super.key, this.name = '', this.age = 0});String name;int age;@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text('无状态组件')),body: Center(child: Text('name:$name,age:$age')),);}
}

3. 组件生命周期

有状态组件的生命周期:
在这里插入图片描述

  • 初始化

○ createState:当State组件开始被创建时会自动调用,生命周期内只会执行一次
○ initState:当 State 被初始化时会自动调用,生命周期内只会执行一次
■ 我们通常会在这个方法中执行一些数据初始化的操作,或者也可能会发送网络请求;
■ 注意:这个方法是重写父类的方法,必须调用super,因为父类中会进行一些其他操作

  • 更新

○ didChangeDependencies:当 State 依赖的数据改变时,即初始化时或者是外部传入的数据改变时自动调用的, 这个方法在两种情况下会调用:
■ 情况一:调用initState会调用;
■ 情况二:从其他对象中依赖一些数据发生改变时,比如前面我们提到的InheritedWidget(这个后面会讲到);

  • 构建

○ build:构建组件结构并返回渲染好的组件实例,生命周期内会被执行多次
■ 手动调用setState方法,会根据最新的状态(数据)来重新调用build方法,构建对应的Widgets;
○ didUpdateWidget:该方法主要是组件重新构建时才会被调用的
■ 比如:热重载 或者 父组件发生 build 时子组件的该方法就会被调用
■ 注意:该方法被调用后,本组件中的 build 方法一定也会再被调用

  • 销毁

○ deactivate:组件从节点中移除时会自动调用,可以监听组件是否即将被销毁
○ dispose:释放组件内存资源时会自动调用,可以监听组件是否被彻底销毁

import 'package:flutter/material.dart';class MyApp4 extends StatefulWidget {const MyApp4({super

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/54560.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows C++-创建数据流代理(二)

完整的数据流演示 下图显示了 dataflow_agent 类的完整数据流网络&#xff1a; 由于 run 方法是在一个单独的线程上调用的&#xff0c;因此在完全连接网络之前&#xff0c;其他线程可以将消息发送到网络。 _source 数据成员是一个 unbounded_buffer 对象&#xff0c;用于缓冲…

Windows 编译 FFmpeg 源码详细教程

FFmpeg FFmpeg 是一个开源的多媒体框架,它包括了一整套工具和库,可以用来处理(转码、转换、录制、流式传输等)音频和视频。FFmpeg 支持广泛的音视频格式,并且可以在多种操作系统上运行,包括 Windows、Linux 和 macOS。 FFmpeg 的主要组件包括: ffmpeg:这是一个命令行工…

OpenCV视频I/O(20)视频写入类VideoWriter之用于将图像帧写入视频文件函数write()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::VideoWriter::write() 函数用于将图像帧写入视频文件。 该函数/方法将指定的图像写入视频文件。图像的大小必须与打开视频编写器时指定的大…

在Python中处理文件路径

在Python中处理文件路径 下面将详细介绍如何使用 pathlib 模块来处理文件路径。我们将从创建 Path 对象、绝对路径与相对路径、访问文件路径分量&#xff0c;以及检查文件路径是否存在等几个方面进行讲解。 1. 创建 Path 对象 要使用 pathlib&#xff0c;首先需要导入模块并…

网站建设中常见的网站后台开发语言有哪几种,各自优缺点都是什么?

市场上常见的网站后台开发语言有PHP、Python、JavaScript、Ruby、Java和.NET等。这些语言各有其独特的优缺点&#xff0c;适用于不同的开发场景和需求。以下是对这些语言的具体介绍&#xff1a; PHP 优点&#xff1a;PHP是一种广泛用于Web开发的动态脚本语言&#xff0c;特别适…

Diffusion models(扩散模型) 是怎么工作的

前言 给一个提示词, Midjourney, Stable Diffusion 和 DALL-E 可以生成很好看的图片&#xff0c;那么它们是怎么工作的呢&#xff1f;它们都用了 Diffusion models&#xff08;扩散模型&#xff09; 这项技术。 Diffusion models 正在成为生命科学等领域的一项尖端技术&…

基于STM32的智能花盆浇水系统设计

引言 本项目设计了一个基于STM32的智能花盆浇水系统。该系统通过土壤湿度传感器检测土壤湿度&#xff0c;当湿度低于设定阈值时&#xff0c;自动启动水泵进行浇水。它还结合了温湿度传感器用于环境监测。该项目展示了STM32在传感器集成、自动控制和节水智能化应用中的作用。 …

Mongo Java Driver使用getCollection做分页查询遇到的一些坑

背景 最近在做Mongo上的表数据的迁移&#xff0c;原本应该是DBA要干的活&#xff0c;但是想着DBA排期比较长&#xff0c;加上我们开发的权限又非常有限&#xff0c;而且数据量又没有多少&#xff0c;就想着自己开发个小小的程序从旧实例上查&#xff0c;写到新实例上去算了。于…

Nginx05-基础配置案例

零、文章目录 Nginx05-基础配置案例 1、案例需求 &#xff08;1&#xff09;有如下访问 http://192.168.119.161:8081/server1/location1 访问的是&#xff1a;index_sr1_location1.htmlhttp://192.168.119.161:8081/server1/location2 访问的是&#xff1a;index_sr1_loca…

YoloV9改进策略:BackBone改进|CAFormer在YoloV9中的创新应用,显著提升目标检测性能

摘要 在目标检测领域,模型性能的提升一直是研究者和开发者们关注的重点。近期,我们尝试将CAFormer模块引入YoloV9模型中,以替换其原有的主干网络,这一创新性的改进带来了显著的性能提升。 CAFormer,作为MetaFormer框架下的一个变体,结合了深度可分离卷积和普通自注意力…

计算机网络自顶向下(2)----socket编程

1.套接字 套接字是用于在计算机网络中进行通信的一种技术。它是操作系统提供的一种接口&#xff0c;通过该接口&#xff0c;应用程序可以通过网络连接进行数据的传输和接收。 套接字包含了一个IP地址和一个端口号&#xff0c;用于唯一标识一个网络连接。通过套接字&#xff0c;…

Ansible学习之ansible-pull命令

想要知道ansible-pull是用来做什么的&#xff0c;就需要了解Ansible的工作模&#xff0c;Ansible的工作模式有两种&#xff1a; push模式 push推送&#xff0c;这是Ansible的默认模式&#xff0c;在主控机上编排好playbook文件&#xff0c;push到远程主机上来执行。pull模式 p…

远程调用的问题以及eureka原理

目录 服务调用出现的问题 问题分析 解决方案&#xff08;eureka原理&#xff09; eureka&#xff08;两个角色&#xff09; eureka的解决方案 此过程出现的问题 eureka的作用 总结 服务调用出现的问题 服务消费者该如何获取服务提供者的地址信息&#xff1f;如果有多个…

系统架构设计师论文《论企业应用系统的数据持久层架构设计》精选试读

论文真题 数据持久层&#xff08;Data Persistence Layer&#xff09;通常位于企业应用系统的业务逻辑层和数据源层之间&#xff0c;为整个项目提供一个高层、统一、安全、并发的数据持久机制&#xff0c;完成对各种数据进行持久化的编程工作&#xff0c;并为系统业务逻辑层提…

【SpringBoot】基础+JSR303数据校验

目录 一、Spring Boot概要 1. SpringBoot介绍 2. SpringBoot优点 3. SpringBoot缺点 4. 时代背景-微服务 二、Spring Boot 核心配置 1. Spring Boot配置文件分类 1.1 application.properties 1.2 application.yml 1.3 小结 2. YAML概述 3. YAML基础语法 3.1 注意事…

【教程】57帧! Mac电脑流畅运行黑神话悟空

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 1、先安装CrossOver。网上有许多和谐版&#xff0c;可自行搜索。&#xff08;pd虚拟机里运行黑神话估计够呛的&#xff09; 2、运行CrossOver&#xf…

nvidia英伟达显卡高刷新显示器dp接口无法进入bios的解决办法

nvidia英伟达显卡高刷新显示器dp接口无法进入bios的解决办法 问题分析 在gtx20x0之前的显卡&#xff0c;如1050ti&#xff0c;window能正常使用dp接口&#xff0c;但进入bios就无法显示&#xff08;显示器无信号输入&#xff09; 问题解决 安装NVIDIA Graphics Firmware Upda…

SpringBoot上传图片实现本地存储以及实现直接上传阿里云OSS

一、本地上传 概念&#xff1a;将前端上传的文件保存到自己的电脑 作用&#xff1a;前端上传的文件到后端&#xff0c;后端存储的是一个临时文件&#xff0c;方法执行完毕会消失&#xff0c;把临时文件存储到本地硬盘中。 1、导入文件上传的依赖 <dependency><grou…

Vueron引领未来出行:2026年ADAS激光雷达解决方案上市路线图深度剖析

Vueron ADAS激光雷达解决方案路线图分析&#xff1a;2026年上市展望 Vueron近期发布的ADAS激光雷达解决方案路线图&#xff0c;标志着该公司在自动驾驶技术领域迈出了重要一步。该路线图以2026年上市为目标&#xff0c;彰显了Vueron对未来市场趋势的精准把握和对技术创新的坚定…

【瑞昱RTL8763E】刷屏

1 显示界面填充 用户创建的各个界面在 rtk_gui group 中。各界面中 icon[]表对界面进行描述&#xff0c;表中的每个元素代表一 个显示元素&#xff0c;可以是背景、小图标、字符等&#xff0c;UI_WidgetTypeDef 结构体含义如下&#xff1a; typedef struct _UI_WidgetTypeDef …