【Flutter】- 核心语法

ops/2024/10/11 4:50:45/

文章目录

  • 知识回顾
  • 前言
  • 源码分析
    • 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.ppmy.cn/ops/123811.html

相关文章

关于相机的一些零碎知识点

热成像&#xff0c;英文为Thermal Imaging&#xff0c;例如型号500T&#xff0c;其实指的就是热成像500分辨率。 相机的CMOS&#xff0c;英文为Complementary Metal Oxide Semiconductor&#xff0c;是数码相机的核心成像部件&#xff0c;是一种互补金属氧化物导体器件。 DPI…

Python爱心射线(完整代码)

目录 系列目录 写在前面​ 完整代码 下载代码 代码分析 写在后面 系列目录 序号直达链接表白系列1Python制作一个无法拒绝的表白界面2Python满屏飘字表白代码3

云数据库价格贵吗?云数据库租用价格表

云数据库价格贵吗&#xff1f;这是许多企业在考虑迁移到云端时常问的问题。实际上&#xff0c;云数据库的价格并不是一成不变的&#xff0c;主要取决于多种因素&#xff0c;包括业务需求、所选配置、服务提供商以及使用时长等。 首先&#xff0c;不同的云服务提供商会提供多样化…

JS中的浅拷贝手段

1.slice方法 let arr [1,2,3] let newArr arr.slice(); newArr[0] 100; console.log(arr);//[1,2,3]当修改newArr的时候&#xff0c;arr的值并不改变&#xff0c;什么原因&#xff1f;因为这里newArr是arr浅拷贝后的结果&#xff0c;newArr和arr现在引用的已经不是同一块空…

ElementUI 2.x 输入框回车后在调用接口进行远程搜索功能

输入框回车后在调用接口进行远程搜索功能 主要思路 默认的远程搜索会在输入框聚焦的时候就展示下拉弹窗&#xff0c;而我们需要的是在回车之后才展示下拉弹窗。 具体代码 <divv-for"(domain, index) in formData.domains"class"dynamic-input":key&…

设计模式-备忘录模式

备忘录&#xff08;Memento&#xff09;模式&#xff1a;在不破坏封装性的前提下&#xff0c;捕获一个对象的内部状态&#xff0c;并在改对象之外这个状态&#xff0c;从而可以在以后将该对象恢复到原先保存的状态。 就是实现的思路&#xff1a;就是可变化的类中关联中 备忘录对…

【Vue】vue-admin-template项目搭建

准备 node环境 node&#xff1a;v16.12.0npm&#xff1a;8.1.0 vue-element-admin下载 官网&#xff1a;https://panjiachen.github.io/vue-element-admin-site/guide/ 我这边下载的是4.4.0版本的&#xff0c;使用其他版本可能会因为所需要的node和npm版本过低或过高导致异常…

vue2项目的路由使用history模式,刷新会导致页面404的问题

在vue2项目中&#xff0c;如果我们使用的路由是history模式&#xff0c;刷新会导致页面404&#xff0c;解决方法很简单&#xff0c;在vue.config.js文件中的devServer下增加historyApiFallback: true; 代码如下: module.exports {devServer: {historyApiFallback: true,} }