Dart语法基础 #
一、Dart语言简介 #
1.1 什么是Dart #
Dart是Google开发的客户端优化编程语言,用于快速构建任何平台上的应用。Dart是Flutter的开发语言,具有以下特点:
| 特点 | 说明 |
|---|---|
| 面向对象 | 一切皆对象,支持类、混入、接口 |
| 类型安全 | 支持静态类型检查和类型推断 |
| 现代语法 | 支持空安全、扩展、异步等特性 |
| 跨平台 | 可编译为移动端、Web、桌面端 |
1.2 Dart代码结构 #
dart
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Center(
child: Text('Hello, Dart!'),
),
),
);
}
}
二、变量与常量 #
2.1 变量声明 #
dart
var name = 'Flutter';
String language = 'Dart';
dynamic value = 100;
Object obj = 'Hello';
2.2 变量类型 #
| 关键字 | 说明 | 示例 |
|---|---|---|
| var | 类型推断 | var name = 'Dart'; |
| String | 字符串 | String name = 'Dart'; |
| int | 整数 | int count = 10; |
| double | 浮点数 | double price = 9.99; |
| bool | 布尔值 | bool isValid = true; |
| List | 列表 | List<int> nums = [1, 2, 3]; |
| Map | 映射 | Map<String, int> scores = {'a': 1}; |
| dynamic | 动态类型 | dynamic value = 'any'; |
| Object | 任意对象 | Object obj = 'hello'; |
2.3 常量声明 #
final:运行时常量
dart
final name = 'Flutter';
final String language = 'Dart';
final time = DateTime.now();
const:编译时常量
dart
const pi = 3.14159;
const int maxCount = 100;
const colors = ['red', 'green', 'blue'];
2.4 final vs const #
| 特性 | final | const |
|---|---|---|
| 赋值时机 | 运行时 | 编译时 |
| 可否使用运行时值 | 可以 | 不可以 |
| 内存优化 | 一般 | 更好 |
| 使用场景 | 运行时确定的值 | 固定不变的值 |
dart
final now = DateTime.now();
const timeout = Duration(seconds: 30);
const list1 = [1, 2, 3];
final list2 = [1, 2, 3];
list1[0] = 10;
list2[0] = 10;
const list3 = [...list1];
三、空安全 #
3.1 可空类型 #
dart
String? nullableName;
String nonNullableName = 'Dart';
nullableName = null;
3.2 空安全操作符 #
| 操作符 | 说明 | 示例 |
|---|---|---|
| ? | 可空类型声明 | String? name; |
| ! | 非空断言 | name!.length |
| ?? | 空值合并 | name ?? 'default' |
| ?. | 空安全访问 | name?.length |
| ??= | 空值赋值 | name ??= 'default'; |
3.3 使用示例 #
dart
String? name;
int length = name?.length ?? 0;
int length2 = name!.length;
name ??= 'Flutter';
String displayName = name ?? 'Guest';
3.4 late关键字 #
dart
late String description;
void init() {
description = 'Initialized later';
}
class User {
late final String name;
User(this.name);
}
四、数据类型 #
4.1 数字类型 #
dart
int count = 10;
double price = 9.99;
num value = 10;
num value2 = 10.5;
int hexValue = 0xFF;
double scientific = 1.42e5;
int parsed = int.parse('10');
double parsed2 = double.parse('3.14');
String str = 10.toString();
String str2 = 3.14159.toStringAsFixed(2);
4.2 字符串类型 #
dart
String name = 'Flutter';
String message = "Hello, $name!";
String multiLine = '''
第一行
第二行
第三行
''';
String raw = r'原始字符串\n不转义';
String concat = 'Hello' + ' ' + 'World';
String interpolation = 'Count: ${count + 1}';
int length = name.length;
bool empty = name.isEmpty;
bool contains = name.contains('Flut');
bool starts = name.startsWith('Flu');
String upper = name.toUpperCase();
String sub = name.substring(0, 3);
List<String> parts = 'a,b,c'.split(',');
String trimmed = ' hello '.trim();
4.3 布尔类型 #
dart
bool isValid = true;
bool isEmpty = false;
bool result = 1 > 0;
bool result2 = name.isNotEmpty && count > 0;
bool result3 = name.isEmpty || count < 0;
4.4 列表类型 #
dart
List<int> numbers = [1, 2, 3, 4, 5];
var fruits = <String>['apple', 'banana'];
var mixed = [1, 'two', true];
var emptyList = <int>[];
var filled = List<int>.filled(5, 0);
int first = numbers.first;
int last = numbers.last;
int len = numbers.length;
numbers.add(6);
numbers.addAll([7, 8]);
numbers.insert(0, 0);
numbers.remove(3);
numbers.removeAt(0);
numbers.clear();
bool hasOne = numbers.contains(1);
int index = numbers.indexOf(3);
var doubled = numbers.map((n) => n * 2).toList();
var filtered = numbers.where((n) => n > 2).toList();
var sum = numbers.reduce((a, b) => a + b);
for (var num in numbers) {
print(num);
}
4.5 集合类型 #
dart
Set<int> uniqueNumbers = {1, 2, 3, 4, 5};
var names = <String>{'Alice', 'Bob'};
var emptySet = <int>{};
uniqueNumbers.add(6);
uniqueNumbers.addAll({7, 8});
uniqueNumbers.remove(1);
bool contains = uniqueNumbers.contains(2);
var intersection = {1, 2, 3}.intersection({2, 3, 4});
var union = {1, 2}.union({3, 4});
var difference = {1, 2, 3}.difference({2, 3});
4.6 映射类型 #
dart
Map<String, int> scores = {
'Alice': 90,
'Bob': 85,
'Charlie': 95,
};
var emptyMap = <String, int>{};
var emptyMap2 = Map<String, int>();
scores['David'] = 88;
scores.update('Alice', (value) => value + 5);
scores.remove('Bob');
int? score = scores['Alice'];
bool hasKey = scores.containsKey('Alice');
bool hasValue = scores.containsValue(90);
var keys = scores.keys;
var values = scores.values;
var entries = scores.entries;
scores.forEach((key, value) {
print('$key: $value');
});
for (var entry in scores.entries) {
print('${entry.key}: ${entry.value}');
}
五、运算符 #
5.1 算术运算符 #
dart
int a = 10;
int b = 3;
int sum = a + b;
int diff = a - b;
int product = a * b;
double quotient = a / b;
int intQuotient = a ~/ b;
int remainder = a % b;
a++;
a--;
++a;
--a;
5.2 关系运算符 #
dart
bool equal = a == b;
bool notEqual = a != b;
bool greater = a > b;
bool less = a < b;
bool greaterOrEqual = a >= b;
bool lessOrEqual = a <= b;
5.3 逻辑运算符 #
dart
bool and = true && false;
bool or = true || false;
bool not = !true;
5.4 赋值运算符 #
dart
int x = 10;
x += 5;
x -= 3;
x *= 2;
x ~/= 4;
x ??= 100;
5.5 条件运算符 #
dart
String result = a > b ? 'a大' : 'b大';
String name = nullableName ?? 'default';
5.6 级联运算符 #
dart
class Person {
String? name;
int? age;
void sayHello() {
print('Hello, I am $name');
}
}
var person = Person()
..name = 'Alice'
..age = 25
..sayHello();
5.7 类型运算符 #
dart
var value = 'Hello';
if (value is String) {
print(value.length);
}
if (value is! int) {
print('Not an integer');
}
六、控制流 #
6.1 if-else #
dart
int score = 85;
if (score >= 90) {
print('优秀');
} else if (score >= 60) {
print('及格');
} else {
print('不及格');
}
6.2 switch-case #
dart
String grade = 'A';
switch (grade) {
case 'A':
print('优秀');
break;
case 'B':
print('良好');
break;
case 'C':
print('及格');
break;
default:
print('不及格');
}
switch (score) {
case >= 90:
print('优秀');
case >= 60:
print('及格');
default:
print('不及格');
}
6.3 for循环 #
dart
for (int i = 0; i < 5; i++) {
print(i);
}
var list = [1, 2, 3, 4, 5];
for (var item in list) {
print(item);
}
for (var i = 0; i < list.length; i++) {
print('Index $i: ${list[i]}');
}
6.4 while循环 #
dart
int i = 0;
while (i < 5) {
print(i);
i++;
}
int j = 0;
do {
print(j);
j++;
} while (j < 5);
6.5 break和continue #
dart
for (int i = 0; i < 10; i++) {
if (i == 5) break;
print(i);
}
for (int i = 0; i < 10; i++) {
if (i % 2 == 0) continue;
print(i);
}
outer:
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (i == 1 && j == 1) break outer;
print('($i, $j)');
}
}
七、异常处理 #
7.1 抛出异常 #
dart
throw Exception('发生错误');
throw FormatException('格式错误');
throw '自定义错误信息';
7.2 捕获异常 #
dart
try {
var result = 10 ~/ 0;
} on IntegerDivisionByZeroException {
print('除零错误');
} on FormatException catch (e) {
print('格式错误: $e');
} catch (e, stackTrace) {
print('错误: $e');
print('堆栈: $stackTrace');
} finally {
print('总是执行');
}
7.3 自定义异常 #
dart
class CustomException implements Exception {
final String message;
CustomException(this.message);
@override
String toString() => 'CustomException: $message';
}
throw CustomException('自定义错误');
八、注释 #
8.1 单行注释 #
dart
int count = 10;
8.2 多行注释 #
dart
int count = 10;
8.3 文档注释 #
dart
/// 计算两个数的和
///
/// [a] 第一个数
/// [b] 第二个数
/// 返回两数之和
int add(int a, int b) {
return a + b;
}
九、总结 #
9.1 核心要点 #
| 要点 | 说明 |
|---|---|
| 变量 | var、类型声明、dynamic |
| 常量 | final(运行时)、const(编译时) |
| 空安全 | ?、!、??、?.、??=、late |
| 数据类型 | int、double、String、bool、List、Map、Set |
| 控制流 | if-else、switch、for、while |
| 异常 | try-catch-finally |
9.2 下一步 #
掌握了Dart基础语法后,让我们继续学习 变量与类型!
最后更新:2026-03-28