【Flutter】- 核心语法

news2024/12/28 22:09:42

文章目录

  • 知识回顾
  • 前言
  • 源码分析
    • 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});

  @override
  State<MyApp3> createState() => _MyApp3State();
}

class _MyApp3State extends State<MyApp3> {
   
  String name = '';
  int age = 0;

  @override
  Widget 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;

  @override
  Widget 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.coloradmin.cn/o/2195665.html

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

相关文章

Linux中的网络指令:ping、netstat、watch、pidof、xargs

目录 Ping指令 netstat指令 watch指令 pidof指令 xargs指令 Ping指令 功能&#xff1a;检测两台主机间的网络连通性 语法&#xff1a;ping [选项] 目标主机的IP地址 &#xff08;192.168.1.1&#xff09;或域名&#xff08;google.com&#xff09; 常见选项&#xff1a…

用户登录与信息管理:实现小程序登录与用户信息存储

用户登录与信息管理&#xff1a;实现小程序登录与用户信息存储 在现代的移动应用中&#xff0c;用户登录与信息管理是构建个性化用户体验的基础。小程序作为轻量级的应用形式&#xff0c;在简化开发流程的同时&#xff0c;也需要我们妥善管理用户的登录状态与用户信息。本文将…

动态规划10:174. 地下城游戏

动态规划解题步骤&#xff1a; 1.确定状态表示&#xff1a;dp[i]是什么 2.确定状态转移方程&#xff1a;dp[i]等于什么 3.初始化&#xff1a;确保状态转移方程不越界 4.确定填表顺序&#xff1a;根据状态转移方程即可确定填表顺序 5.确定返回值 题目链接&#xff1a;174.…

【学习笔记】kruskal重构树

前言 最近一场div2没开出C2&#xff0c;猛掉104分。 赛后补E&#xff0c;发现自己连E1都没思路&#xff0c;一问才知道是kruskal重构树。 好吧&#xff0c;OI时期欠下的债该还了。 kruskal重构树是什么 它是一棵 2 n − 1 2n-1 2n−1 个点的二叉树。点有点权&#xff0c;下…

深入挖掘C++中的特性之一 — 多态

目录 1.多态的概念 2.多态的定义及其实现 1.虚函数 2.虚函数的重写/覆盖 3.实现多态的必要条件 4.多态的代码呈现 5.来一道小题&#xff0c;深入理解一下多态 3.虚函数重写的一些其他问题 1.协变 2.析构函数的重写 4.override和final关键字 5.重载/重写/隐藏的对比&…

动态规划算法专题(四):子串、子数组系列

目录 1、最大子数组和 1.1 算法原理 1.2 算法代码 2、环形子数组的最大和 2.1 算法原理 2.2 算法代码 3、乘积最大子数组 3.1 算法原理 3.2 算法代码 4、乘积为正数的最长子数组长度 4.1 算法原理 4.2 算法代码 5、等差数列划分 5.1 算法原理 5.2 算法代码 6、…

C++读取大文件三种方法速度比较

目录 测试说明第一种方法&#xff1a;按块读&#xff0c;一次读8kb第二种方法&#xff1a;按行读&#xff0c;一次读一行第三种方法&#xff1a;多线程并行读取完整示例 测试说明 测试文件&#xff1a;100万行&#xff0c;每一行是两个小数&#xff0c;中间用逗号隔开&#xf…

python脚本实现Redis未授权访问漏洞利用

之前介绍过Redis未授权访问漏洞&#xff0c;本文使用python实现Redis未授权访问检测以及对应三种getshell。 1 测试环境准备 CentOS 7&#xff08;192.168.198.66/24&#xff09;&#xff1a;安装 Redis 服务器并用 root 权限开启服务&#xff0c;关闭保护模式&#xff1b;安…

4-coumarate--CoA ligase4-香豆酸:辅酶A连接酶4CL-文献精读63

Characterization and Functional Analysis of 4-Coumarate:CoA Ligase Genes in Mulberry 桑树中4-香豆酸&#xff1a;辅酶A连接酶基因的表征与功能分析 桑树T2T基因组-文献精读16 摘要 4-香豆酸&#xff1a;辅酶A连接酶&#xff08;4CL&#xff09;由一个小型的多基因家族…

pytest(六)——allure-pytest的基础使用

前言 一、allure-pytest的基础使用 二、需要掌握的allure特性 2.1 Allure报告结构 2.2 Environment 2.3 Categories 2.4 Flaky test 三、allure的特性&#xff0c;allure.step()、allure.attach的详细使用 3.1 allure.step 3.2 allure.attach&#xff08;挺有用的&a…

软件测试比赛-学习

一、环境配置 二、浏览器适配 //1.设置浏览器的位置,google浏览器位置是默认且固定在电脑里的//2.设置浏览器驱动的位置,C:\Users\27743\AppData\Local\Google\Chrome\ApplicationSystem.setProperty("webdriver.chrome.driver", "C:\\Users\\27743\\AppData\\…

【python实操】python小程序之对象的属性操作

引言 python小程序之对象的属性操作 文章目录 引言一、对象的属性操作1.1 题目1.2 代码1.3 代码解释 二、思考2.1 添加属性2.2 获取属性 一、对象的属性操作 1.1 题目 给对象添加属性 1.2 代码 class Cat:# 在缩进中书写⽅法def eat(self):# self 会⾃动出现,暂不管print(f…

弹性分布式数据集RDD详细说明

文章目录 整体介绍一、定义与特性二、操作与转换三、存储级别与持久化四、依赖关系与容错机制五、优化与性能调优 常见操作支持的数据格式1.文本文件 (Text Files)2. CSV 文件3. JSON 文件4. Parquet 文件5. Sequence Files6.Hadoop文件读取A. 读取HDFS上的文本文件B. 使用Hado…

(Linux驱动学习 - 8).信号异步通知

一.异步通知简介 1.信号简介 信号类似于我们硬件上使用的“中断”&#xff0c;只不过信号是软件层次上的。算是在软件层次上对中断的一种模拟&#xff0c;驱动可以通过主动向应用程序发送信号的方式来报告自己可以访问了&#xff0c;应用程序获取到信号以后就可以从驱动设备中…

论文阅读——联邦忘却学习研究综述

文章基本信息 作者&#xff1a; 王鹏飞魏宗正周东生宋威肖蕴明孙庚于硕张强 机构&#xff1a; 大连理工大学计算机科学与技术学院大连理工大学社会计算与认知智能教育部重点实验室大连大学先进设计与智能计算教育部重点实验室美国西北大学计算机科学系吉林大学计算机科学与…

QT调用libusb库stm32407上下位机

安富莱USB上位机教程 参考安富莱的视频&#xff0c;不过这里 调用是libusb最新的库 可以参考上一个文章&#xff1a; QT调用最新的libusb库 https://editor.csdn.net/md/?articleId142733711 调试结果&#xff1a; 资源地址&#xff1a; 上位机&#xff1a;https://downl…

基于pytorch的手写数字识别-训练+使用

import pandas as pd import numpy as np import torch import matplotlib import matplotlib.pyplot as plt from torch.utils.data import TensorDataset, DataLoadermatplotlib.use(tkAgg)# 设置图形配置 config {"font.family": serif,"mathtext.fontset&q…

Maven 高级之分模块设计与继承、聚合

在软件开发中&#xff0c;随着项目规模的扩大&#xff0c;代码量和复杂度不断增加&#xff0c;传统的一体化开发模式逐渐暴露出诸多问题。为了解决这些问题&#xff0c;模块化开发应运而生&#xff0c;而 Maven 正是模块化开发的利器&#xff0c;它提供的继承和聚合机制为构建和…

fiddler抓包20_弱网模拟

课程大纲 ① 打开CustomRules.js文件&#xff1a;Fiddler快捷键“CtrlR”(或鼠标点击&#xff0c;菜单栏 - Rules - Customize Rules)。 ② 设置速率&#xff1a;“CtrlF”&#xff0c;搜索 “m_SimulateModem”&#xff0c;定位至函数。在函数里设置上传、下载速率&#xff0c…

ESP8266模块(WIFI STM32)

目录 一、介绍 二、传感器原理 1.原理图 2.引脚描述 3.ESP8266基础AT指令介绍 4.ESP8266基础工作模式 三、程序设计 main.c文件 esp8266.h文件 esp8266.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 ESP8266是一款嵌入式系统级芯片&#xff0c;它集成了Wi…