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

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

文章目录

  • Dart介绍 Win Mac上面分别搭建Dart环境
  • Dart入口方法介绍 Dart打印 Dart注释 Dart变量 常量 命名规则
  • Dart数据类型讲解
  • Dart运算符
  • 循环语句
  • Dart List Set Map详解
  • Dart中的函数 函数的定义 可选参数 默认参数 命名参数 箭头函数 匿名函数 闭包等
  • Dart中的类 对象
  • Dart中的类 静态成员 操作符 类的继承
  • Dart中的抽象类 多态 和接口
  • Dart中一个类实现多个接口 以及Dart中的Mixins
  • 泛型 泛型方法 泛型类 泛型接口
  • Dart中的库 自定义库、系统库、第三方库
  • Dart 2.13之后的一些新特性Null safety、late关键字、空类型声明符?、非空断言!、required关键字
  • Dart性能优化之常量、常量构造函数详解

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构造函数不能有主体(没有语句执行!)

Dart Flutter 教程【Dart部分】相关推荐

  1. 【Flutter】Dart 函数 ( 函数构成 | 私有函数 | 匿名函数 | 函数总结 )

    文章目录 一.Dart 函数构成 二.Dart 私有函数 三.Dart 匿名函数 四.完整代码示例 五.Dart 方法总结 六. 相关资源 一.Dart 函数构成 Dart 函数构成 : 方法名 , ...

  2. 【Flutter】Dart 面向对象 ( 类定义 | 类的继承 | 私有变量 | 可选参数 | 默认参数 | 初始化列表 )

    文章目录 一. Dart 面向对象 二. 类定义 三. 类的继承 四. 私有变量 五. 可选参数与默认参数 六. 初始化列表 七. 完整代码示例 八. 相关资源 一. Dart 面向对象 OOP 基本 ...

  3. 使用Dart/Flutter语言开发的命令行文字RPG类型小游戏

    使用Dart/Flutter语言开发的命令行文字RPG类型小游戏 项目源码:https://gitee.com/FantasyWind/word_game 介绍 项目背景 本项目为使用Dart/Flu ...

  4. 【Flutter】Dart 泛型 ( 泛型类 | 泛型方法 | 特定类型约束的泛型 )

    文章目录 一.Dart 泛型类与泛型方法 二.Dart 泛型中的特定类型约束 三.Dart 自带泛型 四.完整代码示例 五. 相关资源 一.Dart 泛型类与泛型方法 泛型作用 : 为 类 , 接口 ...

  5. 【Flutter】Dart 数据类型 ( var 数据类型 | Object 数据类型 )

    文章目录 一. var 数据类型 二. var 数据类型不能被改变 三. Object 类型 四. 完整代码示例 五. 相关资源 Dart 语言中有 dynamic , var , Object , ...

  6. 【Flutter】Dart 数据类型 ( dynamic 数据类型 )

    文章目录 一. dynamic 数据类型 二. dynamic 变量无法进行语法检查 三. dynamic 变量运行时类型修改 四. 完整代码示例 五. 相关资源 Dart 语言中有 dynamic ...

  7. 【Flutter】Dart 数据类型 Map 类型 ( 创建 Map 集合 | 初始化 Map 集合 | 遍历 Map 集合 )

    文章目录 一. Dart 数据类型 Map 类型 二. Map 类型初始化并赋值 1. 创建 Map 对象同时进行初始化操作 2. 先创建 Map 对象再进行赋值 三. Map 集合遍历 1. 使用 ...

  8. 【Flutter】Dart 数据类型 字符串类型 ( 字符串定义 | 字符串拼接 | 字符串 API 调用 )

    文章目录 I . 字符串定义 I . 字符串拼接 III . 字符串 API 调用 IV . 字符串 Demo 示例 I . 字符串定义 使用单引号 ' ' 和 双引号 " " 都 ...

  9. flutter - 如何在Dart/Flutter中将某些元素从一个Map复制到新Map中?

    flutter - 如何在Dart/Flutter中将某些元素从一个Map复制到新Map中? 如何在Dart / Flutter中将某些元素从一个Map复制到新Map中? Old_Map = {'A' ...

最新文章

  1. C++——Lambda函数
  2. wget: unable to resolve host address “mirrors.163.com” 的解决办法
  3. VxWorks下Shell调试总结
  4. 计算机采购类增值税税率是多少,各个行业的税率是多少?
  5. linux vi 上下左右 ab,【Linux】Ubuntu vi 上下左右变ABCD及 apt-get install报错问题解决方法...
  6. MYSQL:Error Code: 1786 Statement violates GTID consistency: CREATE TABLE ... SELECT.
  7. ios上传图片文件到服务器,iOS 图片以文件形式上传到服务器
  8. 编译OpenJDK8:configure: error: Could not find all X11 headers
  9. angular中的cookie读写
  10. 人工智能python课程总结1500字_人工智能学习心得
  11. html颜色怎么渐变效果,html怎么设置颜色渐变
  12. 5分钟了解Pandas的透视表
  13. 输出数字矩阵并把最后变为PUM
  14. ESP8266-NodeMCU驱动TFT-SPI彩屏(驱动芯片ILI9341)- 第一个例程【1】
  15. Win10笔记本用雷电3接口外接显卡加速tensorflow深度学习步骤
  16. DXF文件的使用与PCB元件封装确认
  17. Android项目实战_手机安全卫士软件管家
  18. Java 实现sha_Java实现SHA算法的方法详解
  19. video.js 视频截图、录制、自定义全屏,hls、flv、mp4视频播放
  20. 记一次讲座与前辈的对话

热门文章

  1. oppoA83怎么升级android版本,OPPO A83 A1刷机教程_OPPO A83 A1卡刷升级更新官方系统包...
  2. myelicpes2019初次使用设置_【北通手柄设置】实况足球2019手柄操作设置教程-挖辣椒攻略...
  3. C++学校信息管理系统
  4. ue4 小知识 FDateTime Now() 时间概念
  5. matlab有仿真小灯泡吗,基于Matlab电力变压器励磁涌流的分析和仿真
  6. SWEBOK软件工程知识体系 - 1.软件需求
  7. 2021中国企业数智服务十大趋势
  8. sql查询本天,本周,本季度,本年,前一天,后一天,最后一天,本季度天数,本月天数
  9. 最新云盘网盘PHP系统源码+对接云存储/附安装教程
  10. 大疆文档(1)-介绍-概念