Dart Flutter 教程【Dart部分】

本文介绍了Dart编程语言的基本信息,包括其由谷歌开发的背景和在web、移动应用开发中的用途。文章详细阐述了如何在Windows和Mac上搭建Dart环境,推荐使用Vscode作为开发工具,并讲解了如何在Vscode中配置Dart插件。此外,还详细讨论了Dart的变量定义、命名规则、数据类型(如Numbers、Strings、Booleans、Lists和Maps)以及如何使用is关键词判断数据类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

!!!笔记源自b站课程
此处是课程链接

写在前面:
Dart有很多语法与其他语言比如C、Java都很像,有基础的友友们可以搭一下环境,简单看一下不同点即可。剩下的在开发实践中逐渐熟练~

Dart介绍 Win Mac上面分别搭建Dart环境

Dart介绍
Dart是由谷歌开发的计算机编程语言,它可以被用于web、服务器、移动应用和物联网等领域的开发。
Dart诞生于2011年,号称要取代JavaScript。但是过去的几年中一直不温不火。直到Flutter的出现现在被人们重新重视起来。
要学Flutter的话,我们首先得回Dart。
官网:https://flutter.cn/

Dart环境搭建:
要在我们本地开发Dart程序的话首先需要按照Dart Sdk
官方文档:https://dart.dev/get-dart

Dart开发工具:
Dart的开发工具有很多,比如IDEA、WebStorm、Atom、Vscode等。
这里我们主要讲解在Vscode中配置Dart。

1、找到vscode插件按照dart
2、找到vscode插件按照code runner Code Runner可以运行我们的文件

Dart入口方法介绍 Dart打印 Dart注释 Dart变量 常量 命名规则

入口方法的两种定义方式
在这里插入图片描述

在这里插入图片描述

Dart变量
dart是一个强大的脚本类语言,可以不预先定义变量类型,自动会类型推导
dart中定义变量可以通过var关键字来声明变量

在这里插入图片描述
注意:var后就不要写类型,写了类型就不要var

Dart的命名规则:
1、变量名称必须由数字、字母、下划线和美元符组成
2、注意:标识符开头不能是数字
3、标识符不能是保留字和关键字
4、变量的名字是区分大小写的
5、标识符一定要见名思意:变量名称建议用名词,方法名称建议用动词。

Dart数据类型讲解

Dart中文支持以下数据类型:
常用数据类型:
Numbers(数值):
int
double
String(字符串):
String
Booleans(布尔):
bool
List(数组):
在Dart中,数组是列表对象,所以大多数人只是称他们为列表
Maps(字典):
通常来说,Map是一个键值对相关的对象。键和值可以是任何类型的对象,每个键只出现一次

字符串类型

1、字符串定义的几种方式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述!!三个单引号/双引号可以打印多行字符

2、字符串的拼接

在这里插入图片描述

在这里插入图片描述

数值类型

1、int

在这里插入图片描述

2、double 既可以是整型也可以是浮点型

在这里插入图片描述

3、运算符

±*/ 和其他语言一样

布尔类型

true

false

list集合

1、第一种定义List的方式

在这里插入图片描述

2、第二种定义List的方式 指定类型

在这里插入图片描述

3、第三种定义List的方式 增加数据

在这里插入图片描述在这里插入图片描述
!!中括号创建可以改变长度 list.filled是固定长度 不可以改变。

Map

第一种定义Map的方式

在这里插入图片描述

第二种定义Map的方式

在这里插入图片描述
Dart判断数据类型

is关键词来判断数据类型
在这里插入图片描述

Dart运算符

Dart运算符

算术运算符

在这里插入图片描述

关系运算符

在这里插入图片描述

逻辑运算符

在这里插入图片描述

赋值运算符

在这里插入图片描述

条件表达式

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

在这里插入图片描述!!a为空把10赋值给b 否则把a赋值给b

Dart类型转换

1、Number与String类型之间的转换

Number转换成String toString()
Stirng转换成Number parse()

2、其他类型转换成Booleans类型

isEmpty():判断字符串是否为空

循环语句

++ –
++自增1
–自减1
放前面先计算后赋值
放后面先赋值后计算

for基本语法

for(int i=1;i<=100;i++){
	print(i);
}

while、do while 基本语法

while(表达式/循环条件){

}
do{
语句/循环体
}while(表达式/循环条件)

break和continue

break语句功能:

1、在switch语句中使流程跳出switch结构
2、在循环语句中使流程跳出当前循环,遇到break,循环终止,后面代码也不会执行

强调!!
1、如果在循环中已经执行了break语句,就不会执行循环体中位于break后的语句。
2、在多层循环中,一个break语句只能向外跳出一层

break可以用在switch case 中,也可以用在for循环和while循环中

continue语句的功能:

只能在循环语句中使用,使本次循环结束,进行下一次循环
continue可以在for循环以及while循环中使用,但是不建议在while循环中使用,容易造成死循环。

Dart List Set Map详解

List里面常用的属性和方法:

常用属性:

length 长度
reversed 翻转
isEmpty 是否为空
isNotEmpty 是否不为空

常用方法:

add 增加
addAll 拼接数组
indexOf 查找 传入具体值
remove 删除 传入具体值
removeAt 删除 传入索引值
fillRange 修改
insert(index,value) 指定位置插入
insertAll(index,list) 指定位置插入list
toList() 其他类型转换成List
join() list转换成字符串
split() 字符串转换成List
forEarch
map
where
any
every

set
用它最主要的功能就是去除数组重复内容
Set是没有顺序且不能重复的集合,所以不能通过索引取获取值

Map
映射(Maps)是无序的键值对:

常用属性:

keys 获取所有的key值
values 获取所有的value值
isEmpty 是否为空
isNotEmpty 是否不为空

常用方法:

remove(key) 删除指定key的数据
addAll({…}) 合并映射 给映射内增加属性
containsValue 查看映射内的值 返回true/false
forEach
map
where
any
every

Dart中的函数 函数的定义 可选参数 默认参数 命名参数 箭头函数 匿名函数 闭包等

内置方法/函数

print();

自定义方法:
自定义方法的基本格式:

返回类型 方法名称(参数1,参数2,...){
	方法体
	return 返回值;
}

可选参数
在这里插入图片描述

放在最后面的[]中

默认参数
在这里插入图片描述
如果不传参的话 就是默认参数

命名参数
在这里插入图片描述
放在大括号中 传参的命名必须和括号中一样

闭包
1、全局变量的特点:全局变量常驻内存、全局变量污染全局
2、局部变量的特点:不常驻内存会被垃圾机制回收、不会污染全局

想实现的功能:
1、常驻内存
2、不污染全局

产生了闭包,闭包可以解决这个问题
闭包:函数嵌套函数,内部函数会调用外部函数的变量或参数
闭包的写法:函数嵌套函数 并return里面的函数,这样就形成了闭包。

Dart中的类 对象

面向对象编程(OOP)的三个基本特征是:封装、继承、多态
封装:
封装是对象和类概念的主要特性。封装,把客观事物封装成抽象的类,并且把自己的部分属性和方法提供给其他对象使用。
继承:
面向对象编程(OOP)语言的一个主要功能就是:继承。继承是指这样一种能力,它可以使用现有类的功能
多态:
允许子类类型的指针赋值给父亲类型的指针,同一个函数调用会有不同的执行效果。

Dart中所有的东西都是对象,所有的对象都继承自Object类。
Dart是一门使用类和单继承的面向对象语言,所有的对象都是类的实例,并且所有的类都是Object的子类。
一个类通常由属性和方法组成。

Dart中的类 静态成员 操作符 类的继承

Dart中的静态成员:
1、使用static关键字来实现类级别的变量和函数
2、静态方法不能访问非静态成员,非静态方法可以访问静态成员

Dart中的对象操作符
? 条件运算符怒
as 类型转换
is 类型判断
… 级联操作(连缀)

Dart中类的继承
1、子类使用extends关键字来继承父类
2、子类会继承弗雷里面可见的属性和方法 但是不会继承构造函数
3、子类能复写父类的 方法 getter和setter

覆写父类的方法
在这里插入图片描述

Dart中的抽象类 多态 和接口

Dart中抽象类:
Dart抽象类主要用于定义标准,子类可以继承抽象类,也可以实现抽象类接口。
1、抽象类通过abstract关键字来定义
2、Dart中的抽象方法不能用abstract声明,Dart中没有方法体的方法我们成为抽象方法
3、如果子类继承抽象类必须得实现里面的抽象方法
4、如果把抽象类当作接口实现的话必须得实现抽象类里面定义的所有属性和方法
5、抽象类不能被实例化,只能继承它的子类可以
ectends抽象类和implements的区别:
1、如果要复用抽象类里面的方法,并且要用抽象方法约束自类的话我们就用extends继承抽象类
2、如果只是把抽象类当作标准的话我们就用implements实现抽象类

Dart中的多态:
允许将子类类型的指针赋值给父类类型的指针,同一个函数调用会有不同的执行效果。
子类的实例赋值给父类的引用。
多态就是父类定义一个方法不去实现,让继承他的子类取实现,每个子类有不同的表现。

接口:
和Java一样,dart也有接口,但是和Java还是有区别的。
首先,dart的接口没有interface关键字定义接口,而是普通类或抽象类都可以作为接口被实现。
同样使用implements关键字进行实现。
但是dart的接口有点奇怪,如果实现的类是普通类,会将普通类和抽象中的属性的方法全部需要覆写一遍。
而因为抽象类可以定义抽象方法,普通类不可以,所以一般如果要实现像Java接口那样的方式,一般会使用抽象类。
建议使用抽象类定义接口。

Dart中一个类实现多个接口 以及Dart中的Mixins

一个类实现多个接口:
在这里插入图片描述mixins:
mixins的中文意思是混入,就是在类中混入其他功能。
在Dart中可以使用mixins实现类似多继承的功能。
因为mixins使用的条件,随着Dart版本一直在变,这里讲的是Dart2.x中使用mixins的条件:
1、作为mixins的类只能继承自Object,不能继承其他类
2、作为mixins的类不能有构造函数
3、一个类可以mixins多个mixins类
4、mixins绝不是继承,也不是接口,而是一种全新的特性。

泛型 泛型方法 泛型类 泛型接口

通俗理解:泛型就是解决类、接口、方法的复用性、以及对不特定数据类型的支持(类型校验)

Dart中的泛型接口
实现数据缓存的功能:有文件缓存和内存缓存,内存缓存和文件缓存按照接口约束实现。
1、定义一个泛型接口 约束实现它的子类必须有getByKey(key)和setByKey(key,value)
2、要求setByKey的时候的value的类型和实例化子类的时候指定的类型一致

Dart中的库 自定义库、系统库、第三方库

前面结束Dart基础知识的时候基本上都是在一个文件里面编写Dart代码的,但实际开发中不可能这么简单
在Dart中,库的使用是通过import关键字引入的。
library指令可以创建一个库,每个Dart文件都是一个库,即使没有使用library指令来指定。
Dart中的库主要有三种
1、我们自定义的库
import ’lib/xxx.dart’.
2、系统内置库
import ‘dart:math’;
import ‘dart:io’;
import ‘dart:convert’;
3、Pub包管理系统中的库
https://pub.dev/packages
https://pub.flutter-io.cn/packages
https://pub.dartlang.org/flutter/

1、需要在自己项目的根目录新建一个pubspec.yaml
2、在pubspec.yaml文件 然后配置名称、描述、依赖等信息
3、然后允许pub get获取包下载到本地
4、项目中引入库 import ‘package:http/http.dart’ as http; (看文档使用)

Dart中导入自己本地库
在这里插入图片描述
导入系统内置库 math库在这里插入图片描述

导入系统内置库实现请求数据
在这里插入图片描述

async和await:
这两个关键字的使用只需要记住两点:
只有async方法才能使用await关键字调用方法
如果调用别的async方法必须使用await关键字

async是让方法变成异步。
await是等待异步方法执行完成。

pub包管理系统:
1、从下面网址找到要用的库
https://pub.dev/packages
https://pub.flutter-io.cn/packages
https://pub.dartlang.org/flutter/
2、创建一个pubspec.yaml文件,内容如下
在这里插入图片描述

3、配置dependencies
4、运行put get获取远程库
5、看文档引入库使用

部分库导入
如果只需导入库的一部分,有两种模式:
1、只导入需要的部分,使用show关键字
在这里插入图片描述
2、隐藏不需要的部分,使用hide关键字
在这里插入图片描述

延迟加载
也称为懒加载,可以在需要的时候在进行加载。
懒加载的最大好处就是可以减少APP启动时间
懒加载使用deferred as关键字来指定,如下列例子:

在这里插入图片描述

当需要使用的时候,需要使用loadLibrary()方法来加载

Dart 2.13之后的一些新特性Null safety、late关键字、空类型声明符?、非空断言!、required关键字

Null safety
翻译成中文的意思就是空安全。
它可以帮助开发者避免一些在日常开发中很难被发现的错误,并且额外的好处是可以改善性能。
Flutter2.2.0之后的版本都要求使用null safety
?可空类型
在这里插入图片描述

!类型断言
在这里插入图片描述
late关键字
late关键字主要用于延迟初始化

required关键字
最开始@required是注解
现在他已经作为内置修饰符
主要用于允许根据需要标记任何命名参数(函数或者类),使得他们不为空。

Dart性能优化之常量、常量构造函数详解

Dart常量:
final和const修饰
const声明的常量是在编译时确定的,永远不会改变
final声明的常量允许声明后再赋值,赋值后不可改名,final声明的变量是在运行时确定的
final不仅有const的在编译时常量的特性,最重要的是它是运行时常量,并且final是惰性初始化

identical函数
在这里插入图片描述
常量构造函数总结:
1、常量构造函数需以const关键字修饰
2、它的类不能有任何非final字段(我们在编译时“知道”的值不能在以后更改)
3、构建常量实例必须使用定义的常量构造函数
4、如果实例化时不加const修饰符,即使调用的是常量构造函数,实例化的对象也不是常量实例
5、const构造函数不能有主体(没有语句执行!)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值