Dart 是 Flutter 背后的编程语言,它是一门现代化、面向对象、支持强类型的语言,语法简洁,学习起来比 Java / C++ 轻松很多。
今天我们会学习:
- 变量声明与命名规则
- 常用数据类型
- 运算符
- 流程控制语句
运行方式:
- 你可以直接在 Flutter 项目的
lib/main.dart中运行测试代码 - 也可以去 DartPad 在线运行(无需安装)
1. Dart 变量声明
在 Dart 中,每个变量都必须有一个类型。Dart 是类型安全的语言,但类型可以推断(有点像 JavaScript 的 var,但更安全)。
常用声明方式
void main() {
// 方式 1:显式类型
String name = 'Tom';
int age = 20;
double price = 19.99;
// 方式 2:var(自动推断类型)
var city = 'Beijing'; // 推断为 String
var year = 2024; // 推断为 int
// 方式 3:dynamic(动态类型,不安全,但灵活)
dynamic anything = 'Hello';
anything = 123; // OK,但不建议太频繁使用
// 方式 4:final(只能赋值一次,运行时确定值)
final country = 'China';
// country = 'USA'; // ❌ 错误,不能再次赋值
// 方式 5:const(常量,编译时就确定值)
const PI = 3.14159;
print('$name, $age 岁, 来自 $city, 国家是 $country, π=$PI');
}
区别总结:
| 声明方式 | 类型确定时间 | 是否可变 | 使用场景 |
|---|---|---|---|
var | 编译时推断 | ✅ | 一般变量 |
显式类型 String/Int | 编译时 | ✅ | 类型必须明确的场景 |
dynamic | 运行时 | ✅ | 需要临时改变类型时 |
final | 运行时赋值 | ❌ | 运行中确定一次值(如时间戳) |
const | 编译时赋值 | ❌ | 永远不变的常量 |
2. 常用数据类型
Dart 基本类型都是类对象(即一切皆对象),常用的有:
int:整数double:浮点数String:字符串bool:布尔类型List:列表/数组Map:键值对/哈希表Set:集合(无序、不重复)
简单示例
void main() {
// 数字类型
int a = 5;
double b = 3.2;
print(a + b); // 8.2
// 字符串
String name = 'Alice';
String greeting = 'Hello, $name'; // 插值
print(greeting);
// 布尔类型
bool isOpen = true;
print('Is open: $isOpen');
// 列表 List
List<String> fruits = ['Apple', 'Banana', 'Orange'];
fruits.add('Mango');
print(fruits);
// Map(字典)
Map<String, int> scores = {
'Tom': 90,
'Jerry': 85,
};
print(scores['Tom']); // 输出 90
// Set(不重复)
Set<int> nums = {1, 2, 2, 3};
print(nums); // {1, 2, 3}
}
3. 运算符
Dart 支持常见的算术、比较、逻辑与赋值运算,还增加了一些方便的语法糖。
算术运算符
void main() {
int x = 7;
int y = 3;
print(x + y); // 加 10
print(x - y); // 减 4
print(x * y); // 乘 21
print(x / y); // 除 2.333...
print(x ~/ y); // 整除 2
print(x % y); // 取余 1
}
比较运算符
void main() {
print(5 > 3); // true
print(5 < 3); // false
print(5 >= 5); // true
print(5 == 5); // true
print(5 != 4); // true
}
逻辑运算符
void main() {
bool a = true;
bool b = false;
print(a && b); // 与 false
print(a || b); // 或 true
print(!a); // 非 false
}
空安全 & 合并运算符
Dart 从 2.12 开始支持 空安全
void main() {
String? name; // ? 表示允许为空
print(name ?? '默认值'); // name 为 null 时用默认值
name = 'Bob';
print(name ?? '默认值'); // 输出 Bob
}
4. 流程控制语句
if / else
void main() {
int score = 85;
if (score >= 90) {
print('优秀');
} else if (score >= 60) {
print('及格');
} else {
print('不及格');
}
}
switch
void main() {
String grade = 'B';
switch (grade) {
case 'A':
print('非常好');
break;
case 'B':
print('良好');
break;
case 'C':
print('及格');
break;
default:
print('成绩未知');
}
}
for 循环
void main() {
for (int i = 1; i <= 5; i++) {
print('数字 $i');
}
}
for-in 遍历
void main() {
List<String> fruits = ['Apple', 'Banana', 'Mango'];
for (var fruit in fruits) {
print(fruit);
}
}
while
void main() {
int i = 0;
while (i < 3) {
print('循环 $i');
i++;
}
}
do-while
void main() {
int i = 0;
do {
print('执行 $i');
i++;
} while (i < 3);
}
完整可运行代码示例
你可以直接复制以下代码到 Flutter 项目的 lib/main.dart 或 DartPad 来测试。
// Dart 基础入门示例
void main() {
// ===== 变量声明 =====
String name = 'Alice';
var city = 'Shanghai';
dynamic anything = 42;
final country = 'China';
const PI = 3.14;
print('$name 来自 $city, 国家: $country, π=$PI');
// ===== 数据类型 =====
int age = 18;
double price = 99.99;
bool isOpen = true;
List<String> fruits = ['Apple', 'Banana'];
Map<String, int> scores = {'Tom': 90, 'Jerry': 80};
Set<int> numbers = {1, 2, 3, 3}; // 自动去重
print(fruits);
print(scores);
print(numbers);
// ===== 运算符 =====
int a = 7, b = 3;
print(a + b); // 10
print(a ~/ b); // 整除 2
print(a % b); // 1
String? nickName; // 允许为空
print(nickName ?? '未命名');
// ===== 流程控制 =====
if (age >= 18) {
print('成年');
} else {
print('未成年');
}
for (var fruit in fruits) {
print(fruit);
}
switch (city) {
case 'Shanghai':
print('魔都');
break;
default:
print('其他城市');
}
}
✅ 你现在已经知道如何在 Dart 中声明变量、使用数据类型、运算符以及流程控制了,这是学习 Flutter 的第一块编程基石。
📌 下一篇我们会进到 Dart 语言快速入门 (下):函数、类、异步编程 Future/async/await,你会明白 Flutter 中 UI 更新背后的逻辑。