第3章 - Dart 语言基础
嗨,朋友!我是长安。
在正式开始写 Flutter 代码之前,我们需要先了解一下 Dart 语言。别担心,Dart 语法非常简洁,如果你有任何编程基础(Java、JavaScript、Python 等),10 分钟就能上手!
🤔 Dart 是什么?
Dart 是 Google 开发的一门编程语言,专门为 Flutter 设计。它的特点是:
- 📝 语法简洁,容易学习
- ⚡ 支持 JIT(即时编译)和 AOT(提前编译)
- 🎯 强类型语言,但支持类型推断
- 🔄 支持异步编程(Future、async/await)
🚀 在线体验 Dart
你可以直接在浏览器中体验 Dart,无需安装任何东西:
访问 DartPad 在线编辑器
📖 变量与数据类型
1. 声明变量
// 使用 var 声明(自动推断类型)
var name = '长安';
var age = 18;
var height = 1.75;
// 明确指定类型
String city = '北京';
int count = 100;
double price = 99.9;
bool isStudent = true;
// final - 运行时常量(只能赋值一次)
final birthday = DateTime.now();
// const - 编译时常量
const pi = 3.14159;
2. 基本数据类型
| 类型 | 说明 | 示例 |
|---|---|---|
int | 整数 | 42, -17, 0 |
double | 浮点数 | 3.14, -0.5 |
String | 字符串 | 'Hello', "World" |
bool | 布尔值 | true, false |
List | 列表/数组 | [1, 2, 3] |
Map | 键值对 | {'name': '长安'} |
3. 字符串操作
// 字符串定义
String greeting = 'Hello';
String name = "Flutter";
// 字符串拼接
String message = greeting + ', ' + name; // Hello, Flutter
// 字符串插值(推荐)
String intro = 'I am learning $name'; // I am learning Flutter
String info = 'Next year I am ${age + 1}';// Next year I am 19
// 多行字符串
String longText = '''
这是第一行
这是第二行
这是第三行
''';
4. List(列表)
// 创建列表
List<String> fruits = ['苹果', '香蕉', '橙子'];
var numbers = [1, 2, 3, 4, 5];
// 访问元素
print(fruits[0]); // 苹果
// 添加元素
fruits.add('葡萄');
// 遍历列表
for (var fruit in fruits) {
print(fruit);
}
// 列表长度
print(fruits.length); // 4
5. Map(映射)
// 创建 Map
Map<String, dynamic> person = {
'name': '长安',
'age': 18,
'city': '北京',
};
// 访问值
print(person['name']); // 长安
// 添加/修改
person['email'] = 'changan@example.com';
// 遍历 Map
person.forEach((key, value) {
print('$key: $value');
});
🔀 流程控制
1. 条件判断
int score = 85;
// if-else
if (score >= 90) {
print('优秀');
} else if (score >= 60) {
print('及格');
} else {
print('不及格');
}
// 三元运算符
String result = score >= 60 ? '通过' : '未通过';
// switch-case
String grade = 'A';
switch (grade) {
case 'A':
print('优秀');
break;
case 'B':
print('良好');
break;
default:
print('其他');
}
2. 循环
// for 循环
for (int i = 0; i < 5; i++) {
print('第 $i 次');
}
// for-in 循环
List<String> colors = ['红', '绿', '蓝'];
for (var color in colors) {
print(color);
}
// while 循环
int count = 0;
while (count < 3) {
print(count);
count++;
}
// forEach(函数式)
colors.forEach((color) => print(color));
🎯 函数
1. 基本函数
// 普通函数
int add(int a, int b) {
return a + b;
}
// 调用
int result = add(3, 5); // 8
// 无返回值
void sayHello(String name) {
print('Hello, $name!');
}
2. 箭头函数
// 单行函数可以用箭头语法简写
int multiply(int a, int b) => a * b;
// 等价于
int multiply2(int a, int b) {
return a * b;
}
3. 可选参数
// 命名参数(用花括号)
void createUser({String? name, int? age}) {
print('Name: $name, Age: $age');
}
createUser(name: '长安', age: 18);
// 位置可选参数(用方括号)
void greet(String name, [String? greeting]) {
print('${greeting ?? 'Hello'}, $name!');
}
greet('Flutter'); // Hello, Flutter!
greet('Flutter', '你好'); // 你好, Flutter!
// 默认值
void connect({String host = 'localhost', int port = 8080}) {
print('Connecting to $host:$port');
}
🏗️ 类与对象
这是 Flutter 开发中最重要的部分,因为 Flutter 的一切都是对象!
1. 定义类
class Person {
// 属性
String name;
int age;
// 构造函数
Person(this.name, this.age);
// 方法
void introduce() {
print('我是 $name,今年 $age 岁');
}
}
// 使用
var person = Person('长安', 18);
person.introduce(); // 我是 长安,今年 18 岁
2. 命名构造函数
class Point {
double x;
double y;
// 普通构造函数
Point(this.x, this.y);
// 命名构造函数
Point.origin() : x = 0, y = 0;
Point.fromJson(Map<String, double> json)
: x = json['x']!,
y = json['y']!;
}
var p1 = Point(3, 4);
var p2 = Point.origin();
var p3 = Point.fromJson({'x': 1.0, 'y': 2.0});
3. 继承
// 父类
class Animal {
String name;
Animal(this.name);
void speak() {
print('$name 发出声音');
}
}
// 子类
class Dog extends Animal {
Dog(String name) : super(name);
void speak() {
print('$name 汪汪叫');
}
}
var dog = Dog('旺财');
dog.speak(); // 旺财 汪汪叫
⏰ 异步编程
Flutter 中经常需要处理异步操作(网络请求、文件读写等),掌握异步编程很重要!
1. Future
// Future 代表一个异步操作的结果
Future<String> fetchData() {
// 模拟网络请求,2秒后返回数据
return Future.delayed(
Duration(seconds: 2),
() => '数据加载完成',
);
}
// 使用 then 处理结果
fetchData().then((data) {
print(data);
});
2. async/await
// 使用 async/await 让异步代码看起来像同步代码
Future<void> loadData() async {
print('开始加载...');
String data = await fetchData(); // 等待结果
print(data);
print('加载完成!');
}
// 调用
loadData();
3. 错误处理
Future<void> loadDataWithError() async {
try {
String data = await fetchData();
print(data);
} catch (e) {
print('出错了:$e');
} finally {
print('无论成功失败都会执行');
}
}
🔒 空安全(Null Safety)
Dart 2.12+ 引入了空安全特性,帮助你避免空指针错误。
// 非空类型(默认)
String name = '长安'; // 不能为 null
// name = null; // 错误!
// 可空类型(加 ?)
String? nickname; // 可以为 null
nickname = null; // OK
// 断言非空(加 !)
print(nickname!.length); // 确定不为空时使用
// 空值检查
print(nickname?.length); // 如果为空返回 null
// 空值合并
String displayName = nickname ?? '游客'; // 如果为空使用默认值
📝 小结
这一章我们学习了 Dart 的核心知识:
- ✅ 变量与数据类型(int、String、List、Map 等)
- ✅ 流程控制(if、for、while)
- ✅ 函数定义与调用
- ✅ 类与对象(构造函数、继承)
- ✅ 异步编程(Future、async/await)
- ✅ 空安全特性
学习建议
不需要把所有语法都背下来!先有个印象,写 Flutter 代码时遇到不懂的再回来查。
💪 练习题
- 创建一个
Student类,包含name和score属性,以及一个判断是否及格的方法 - 使用 List 存储 5 个学生,并找出最高分
- 写一个异步函数,模拟 3 秒后返回用户信息
点击查看答案
练习1:Student 类
class Student {
String name;
int score;
Student(this.name, this.score);
bool isPassed() => score >= 60;
}
练习2:找最高分
List<Student> students = [
Student('小明', 85),
Student('小红', 92),
Student('小刚', 78),
Student('小美', 95),
Student('小强', 68),
];
Student topStudent = students.reduce((a, b) => a.score > b.score ? a : b);
print('最高分:${topStudent.name} - ${topStudent.score}分');
练习3:异步函数
Future<Map<String, dynamic>> fetchUser() async {
await Future.delayed(Duration(seconds: 3));
return {
'name': '长安',
'age': 18,
'email': 'changan@example.com',
};
}
void main() async {
print('加载中...');
var user = await fetchUser();
print('用户信息:$user');
}
🚀 下一步
Dart 基础掌握了,下一章我们就来 创建第一个 Flutter 应用!
由 编程指南 提供
