DartSDK
作用:用于帮助编写、编译、调试和运行
注意:
- 文件后缀名:
.dart - 入口:
main()方法 - 绝大部分结尾需要加分号,
{}后面不加分号!
如何需要了解更多或是安装 DartSDK,移步至下面所推荐的文章!
基础语法
常量和变量
变量的语法:
var 变量名 = 值;
常量语法:
const 常量名 = 值;
final 常量名 = 值;
补充:
DataTime.now():护球当前时间print():打印输入
常用的数据类型
- 字符串 String(可用单引 / 双引号)
- 常用的属性和方法:
- 匹配开头第一个字符是否是“新”字:
.startWith("新")
- 匹配开头第一个字符是否是“新”字:
- 语法:
- 常用的属性和方法:
String 属性名 = '文本${变量名}'
//${变量名} 等价于 $变量名
- 数字类型:int / num(可整数,也可小数) / double
- 赋值关系:
- double 不能直接赋值给 int 类型,但可间接,如
toInt()方法 - int 不能直接赋值给 double 类型,但可间接,如
toDouble()方法 - num 不能直接赋值给 double 类型,但可间接,如
toDouble()方法 - double 能直接赋值给 num 类型
- double 不能直接赋值给 int 类型,但可间接,如
- 赋值关系:
- 布尔类型 bool
- 列表类型 List
- 语法:
List 变量名 = [v1 ,v2 ,v3 ,...]; - 常用方法:
add(e):在尾部添加元素 eaddAll(列表):在尾部添加一个列表remove(e):删除元素 e (第一个)removeLast(e):删除元素 e (最后一个)removeRange(start ,end):删除范围内的数据(不包含 end)
- 常用的操作方法和属性:
- 循环:
.forEach(item) - 是否满足条件:
.every(item){return 布尔值} - 筛选出满足条件的数据:
.where((item){return 布尔值}) - 列表长度:
.length - 获取最后一个元素:
.last - 获取第一个元素:
.first - 是否为空:
.isEmpty
- 循环:
- 语法:
- 字典类型 Map:
- 声明语法:
Map 变量名 = {key:value} - 获取某个键的值:
变量名[key] - 常用的操作方法:
- 循环:
.forEach((key,value){}) - 再添加一个字典:
.addAll(map) - 是否包含某个 key:
.containsKey(key) - 删除某个键值对:
.remove(key) - 清空字典:
.clear()
- 循环:
- 声明语法:
- 动态类型 dynamic:
- 特点:允许变量运行时自由改变类型,同时绕过编译时的静态类型检查
- 语法:
dynamic 变量名 = 值 / 表达式;
dynamic 和 var 的区别:
| 类型名称 | 区别 |
| dynamic | 运行可自由改变类型,无编译检查,方法和属性直接调用 |
| var0 | 根据初始值推断类型,有编译检查,仅限推断属性和方法 |
空安全机制
通过编译静态检查将运行时空指针提前暴露。
常用的操作符:
| 操作符 | 说明 | 示例代码 | 示例说明 |
可空类型:? | 声明可空变量 | string? name; | 允许 String 或 null |
安全访问:?. | 对象为 null 可跳过操作,返回 null | user?.name; | user 为 null,返回 null |
非空断言:!. | 保证变量非空(否则运行时崩溃) | name!.length | 断言 name 非空 |
空合并:?? | 在左侧为 null 返回右侧默认值 | name??"Jack" | name 为 null,返回 Jack |
运算符
算术运算符:+、-、*、/、~/(整除,向下取整)、%
赋值运算符:+=、-=、*=、/=
比较运算符:==、!=、>、>=、<、<=
逻辑运算符:&&、||、!
流程控制
if 分支:
if (){}
if (){} else {}
if (){} else if (){} else {}
if (){} else if (){ if (){} else {} } else {}
三元运算符:表达式 ? true : false
switch / case结构
循环语句:
while(){}
for(int i = 0;i<10;i++){}
contiune:继续
函数
语法:
返回值类型 函数名(参数列表){
函数体;
}
可选位置参数:
- 用
[参数列表]包裹,按照顺序传递 - 可选参数可以提供默认值!
可命名参数:
- 使用
{参数列表}包裹,按照参数名=值的方式进行传递,无需关注顺序!
匿名函数:
Function 变量名 = (){}
箭头函数:
函数名(参数列表) => 代码;
类
定义语法:
class 类名{
}
实例化语法:
类名 对象名 = 类名();
属性 / 方法:
对象名.属性名 / 方法名();
默认构造函数:
class 类名 {
类名({参数列表}){}
}
命名构造函数:
class 类名 {
类名.构造函数名({参数列表}){}
}
//实例化语法:
类名 对象名 = 类名.构造函数名(参数列表);
构造函数语法糖:
class 类名{
类名({this.属性1,this.属性2});
类名.命名函数({参数列表});
}
公有属性:提供自我或其他外部文件和类使用
私有属性:仅提供自身使用,使用 _属性名 / _方法名() 来区分
导入其他文件中的类的语法格式:
import '文件名.dart'
继承:Dart 属于单继承
class 类名 extends 父类名 {
类名({参数列表}){}
}
重写:通过使用 @override 注解来重写父类方法,扩展其行为
super 关键字来调用父类构造函数,确保父类能被初始化!super 语法:
子类构造函数({参数列表}):super({参数列表})
多态
抽象类:使用 abstract 关键字实现
语法:
abstract class 类名{}
通过继承实现抽象类:
class 类名 implements 抽象类名 {
@override
抽象类中的抽象方法(){}
}
类的混入:
在不使用传统继承的情况下,向类中添加新的功能
方式:
- 定义:使用
mixin关键字定义一个对象 - 使用:使用
with关键字将定义的对象混入到当前对象中
特点:一个类支持 with 多个 mixin ,调用优先级遵循“后来居上”的原则
语法:
mixin 类名1 {}
class 类名2 with 类名1 {}
泛型
允许使用类型参数,限定类型的同时,让类型更加灵活,让代码更加健壮和可维护型更强
语法:
void 方法名<T>(参数列表){}
分类:泛型集合、方法和类。
异步编程
Dart 是单线程语言,即同时只能做一件事,遇到耗时任务就会造成程序阻塞
Dart 采用单线程 + 事件循环的机制来完成耗时任务
事件循环:
- 执行同步代码 => 执行微任务队列 => 执行事件队列 => 结束
- 微任务队列:
Future.microtask() - 事件队列:
Future、Future.delayed()、IO 操作等
Future
代表一个异步操作的最终结果
状态:Uncompleted(等待)、Completed with a value(成功)、Completed with a error(失败)
创建:Future((){})
- 执行成功:不抛出异常 => 成功状态 => then((){})
- 执行失败:throw Exception() => 失败状态 => catchError((){})
语法:
Future f = Future((){});
f.then((){});
f.catchError((){});
// 链式调用
f.then((value){
return Future(()=>"")
}).then((value){
return Future(()=>"")
}
...
.catchError((error){})
async / await
特点:async 总等后面的 Future 执行成功,才会执行下方的逻辑
语法:
函数名() async {
try {
await Future({});// 执行成功后才执行后面的逻辑
} catch(error){
// 执行失败的逻辑
}
}
补充:
// Duration():时间函数
// 延迟函数
Future.delayed(Duration(seconds:3));
![[学习笔记 Day01] Future 基础:Dart 语言从初识到异步编程的代码编写的蜕变-资源刺客](https://images.kodo.cdn.itdka.cn/wp-contents/uploads/2026/05/20260522182552195-科技感ENVI安装教程封面-10.png)

![[学习笔记 Day06]Python 数据分析与应用:数据分析库 Pandas 的使用-资源刺客](http://images.kodo.cdn.itdka.cn/wp-content/uploads/2025/09/20250923154612655.png)
![[学习笔记 Day08]数据分析与应用:数据聚合与分组运算-资源刺客](https://images.kodo.cdn.itdka.cn/wp-content/uploads/2025/09/20250923154612655.png)
![[学习笔记 Day01]C++基础:简单的程序设计,始于梦想的开始!-资源刺客](http://images.kodo.cdn.itdka.cn/wp-content/uploads/2025/09/20250922171813209.webp)
![[学习笔记 Day02]Vue基础:前端造梦,继续干!-资源刺客](http://images.kodo.cdn.itdka.cn/wp-content/uploads/2025/09/20250919193418264.jpeg)

![[123盘直链防盗刷教程] WordPress子比主题下载配置123云盘直链鉴权教程-资源刺客](https://images.kodo.cdn.itdka.cn/wp-contents/uploads/2026/07/20260713220147718-123盘直链防盗刷教程-scaled.png)
![[手把手教] 从DartSDK 的下载以及安装教程到编辑器的配置,包学会!-资源刺客](https://images.kodo.cdn.itdka.cn/wp-contents/uploads/2026/05/20260522162412506-科技感ENVI安装教程封面-9.png)

![[学习笔记 Day03]Redis 基础:Redis 设计的优化建议与最佳实践-资源刺客](https://images.kodo.cdn.itdka.cn/wp-contents/uploads/2026/05/20260521215425110-科技感ENVI安装教程封面-8.png)
![[学习笔记 Day02]Redis + OpenResty + Lua 实现多级缓存-资源刺客](https://images.kodo.cdn.itdka.cn/wp-contents/uploads/2026/05/20260521202850344-科技感ENVI安装教程封面-7.png)
![[自动化 + 手残党专属]宝塔安装AllinSSL证书管理教程-资源刺客](http://images.kodo.cdn.itdka.cn/wp-content/uploads/2025/11/20251112122722716.png)




![[GitHub]Clawdbot-feishu:OpenClaw 的飞书集成插件-资源刺客](http://images.kodo.cdn.itdka.cn/wp-content/uploads/2026/02/20260214135015363.png)

![[学习笔记 Day04]ASP.NET WEB 设计基础:让自己的程序飞向世界的每一个角落-资源刺客](http://images.kodo.cdn.itdka.cn/wp-content/uploads/2025/08/20250827185617438.jpeg)



暂无评论内容