一、Dart SDK
-
Dart SDK 官方网址:
https://dart.dev/get-dart/archive -
下载完成、配置好环境变量后,执行
dart --version指令,即可查看 Dart 版本
二、Hello World 案例
- 在 VScode 中,安装 Dart 插件

- 创建并编辑 Dart 文件
01_hello_world.dart
dart
void main() {
print('Hello, World!');
}
- 执行
dart run 【文件名】.dart指令,运行 Dart 文件
三、Hello World 案例解读
1、核心概念
-
在 Dart 中,main 函数是程序的入口点,每一个可执行的 Dart 程序都必须包含一个 main 函数,程序运行时,会首先执行 main 函数中的代码
-
void 表示函数不返回任何值,对于 main 函数,通常使用 void,因为它不需要返回任何东西
-
print 是 Dart 标准库提供的函数,用于在控制台输出信息
2、注意事项
- Dart 语句以分号结尾
dart
print('Hello'); // 正确
print('Hello') // 错误
- Dart 中既可以使用单引号也可以使用双引号:
dart
print('Hello, World!');
print("Hello, World!");
- 大小写敏感
dart
print('Hello'); // 正确
Print('Hello'); // 错误
四、变量声明
1、演示
- var 是 Dart 中最常用的变量声明方式,Dart 会自动推断变量的类型
dart
var name = 'Alice';
var age = 25;
var height = 1.68;
var isStudent = true;
print('Name: $name');
print('Age: $age');
print('Height: $height');
print('Is Student: $isStudent');
Name: Alice
Age: 25
Height: 1.68
Is Student: true
- 也可以显式地指定变量类型
dart
int count = 10;
double price = 99.9;
String message = 'Welcome';
bool isActive = true;
print('Count: $count');
print('Price: $price');
print('Message: $message');
print('Is Active: $isActive');
# 输出结果
Count: 10
Price: 99.9
Message: Welcome
Is Active: true
2、变量命名规则
- 合法的变量名
dart
var name = 'Alice'; // 字母开头
var userName = 'Bob'; // 驼峰命名法
var user_name = 'Charlie'; // 下划线命名法
var _private = 'Secret'; // 下划线开头
var age2 = 30; // 包含数字(不在开头)
- 非法的变量名
dart
var 2name = 'Alice'; // 不能以数字开头
var my-name = 'Bob'; // 不能包含连字符
var my name = 'Charlie'; // 不能包含空格
var class = 'Dart'; // 不能使用保留字
3、注意事项
- 不能使用未初始化的变量
dart
int count;
double price;
String name;
bool isActive;
print(count);
print(price);
print(name);
print(isActive);
- 一旦 Dart 推断出变量的类型,就不能改变
dart
var value = 10; // value 是 int 类型
value = 20; // 仍然是 int 类型
value = 'text'; // 错误,不能赋值 String 类型
4、扩展
- 多变量声明
dart
var (x, y, z) = (1, 2, 3);
print('x=$x, y=$y, z=$z');
dart
var a = 1, b = 2, c = 3;
print('a=$a, b=$b, c=$c');
五、常量声明
1、基本介绍
- const 用于声明编译时常量,这些值在程序运行前就已经确定,且不可改变
2、演示
dart
// 显式类型声明
const int maxItems = 100;
const double pi = 3.14159;
const String appName = 'Dart Learning';
dart
// 自动类型推断
const maxItems = 100;
const pi = 3.14159;
const appName = 'Dart Learning';
3、const 集合
const 可以用于声明不可变的集合,尝试修改会报错
dart
const List<int> numbers = [1, 2, 3, 4, 5];
const Map<String, int> scores = {'Alice': 95, 'Bob': 88};
4、注意事项
- const 用于声明编译时常量,值必须在编译时确定,不能用于运行时计算的值
dart
// 允许
const int a = 10;
const int b = 20;
const int sum = a + b;
dart
// 不允许
const now = DateTime.now();
六、常量 final
1、基本介绍
-
final 用于声明只能被赋值一次的变量,是 Dart 中另一个重要的不可变类型声明方式
-
final 变量可以在运行时赋值
-
final 列表,变量引用不可变,但内容可变
2、演示
dart
// 显式类型声明
final String name = 'Alice';
final int age = 25;
dart
// 自动类型推断
final name = 'Alice';
final age = 25;
dart
// 运行时赋值
final DateTime now = DateTime.now();
dart
// final 列表内容可变
final List<int> numbers = [1, 2, 3];
numbers.add(4);
七、字符串类型
1、基本介绍
- Dart 支持单引号和双引号创建字符串
dart
String singleQuote = 'Hello';
String doubleQuote = "Hello";
- 多行字符串
dart
void main() {
String multiline = '''
This is a multiline string.
It can span multiple lines.
Very convenient!
''';
print(multiline);
}
# 输出结果
This is a multiline string.
It can span multiple lines.
Very convenient!
- 字符串拼接
dart
// 使用 + 运算符
String combined = 'Dart ' + 'is ' + 'awesome!';
print(combined);
dart
// 使用 * 运算符
String repeated = 'Ha ' * 3;
print(repeated);
- 字符串插值
dart
String name = 'Alice';
int age = 25;
// 简单插值
String greeting = 'Hello, $name! You are $age years old.';
// 表达式插值
String expression = 'Age next year: ${age + 1}';
print(greeting);
print(expression);
2、常用方法
- 大小写转换
dart
String text = 'Hello World';
print('Original: $text');
print('Upper: ${text.toUpperCase()}');
print('Lower: ${text.toLowerCase()}');
- 字符串查找
dart
String text = 'Hello World';
// 包含检查
print('Contains "World": ${text.contains('World')}');
print('Contains "Dart": ${text.contains('Dart')}');
// 开头结尾检查
print('Starts with "Hello": ${text.startsWith('Hello')}');
print('Ends with "World": ${text.endsWith('World')}');
// 查找位置
print('Index of "o": ${text.indexOf('o')}');
print('Last index of "o": ${text.lastIndexOf('o')}');
# 输出结果
Contains "World": true
Contains "Dart": false
Starts with "Hello": true
Ends with "World": true
Index of "o": 4
Last index of "o": 7
- 字符串截取
dart
String text = 'Hello World';
// 截取子串
print('Substring(0, 5): ${text.substring(0, 5)}');
print('Substring(6): ${text.substring(6)}');
// 分割字符串
List<String> words = text.split(' ');
print('Split: $words');
// 去除空白
String withSpaces = ' Hello ';
print('Trim: "${withSpaces.trim()}"');
print('Trim left: "${withSpaces.trimLeft()}"');
print('Trim right: "${withSpaces.trimRight()}"');
# 输出结果
Substring(0, 5): Hello
Substring(6): World
Split: [Hello, World]
Trim: "Hello"
Trim left: "Hello "
Trim right: " Hello"
- 字符串替换
dart
String text = 'Hello World';
// 替换所有
String replaced = text.replaceAll('o', 'X');
print('Replace all: $replaced');
// 替换首个
String replacedFirst = text.replaceFirst('o', 'X');
print('Replace first: $replacedFirst');
// 替换字符串
String replacedStr = text.replaceRange(0, 5, 'Hi');
print('Replace range: $replacedStr');
# 输出结果
Replace all: HellX WXrld
Replace first: HellX World
Replace range: Hi World
3、字符串属性
dart
String text = 'Hello';
print('Length: ${text.length}');
print('Hash code: ${text.hashCode}');
print('Runtime type: ${text.runtimeType}');
String unicode = '你好';
print('Unicode length: ${unicode.length}');
print('Code units: ${unicode.codeUnits}');
String t = ' ';
print('Is empty: ${t.isEmpty}');
print('Is not empty: ${t.isNotEmpty}');
# 输出结果
Length: 5
Hash code: 828172268
Runtime type: String
Unicode length: 2
Code units: [20320, 22909]
Is empty: false
Is not empty: true
4、注意事项
- 字符串是不可变的
dart
// 错误
String text = 'Hello';
text[0] = 'J';
print(newText);
dart
// 正确
String text = 'Hello';
String newText = 'J${text.substring(1)}';
print(newText);
- 字符串索引
dart
String text = 'Hello';
// 访问字符
print('First char: ${text[0]}');
// 使用 runes 处理 Unicode
print('Runes: ${text.runes}');
# 输出结果
First char: H
Runes: (72, 101, 108, 108, 111)
- null 安全
dart
// 错误,可能为 null
String? nullable;
print(nullable.length);
dart
// 正确,空安全检查
String? nullable;
print('Length: ${nullable?.length ?? 0}');
dart
// 正确,提供默认值
String? nullable;
print('Value: ${nullable ?? 'default'}');
5、扩展
(1)Raw 字符串
- 普通字符串,
\n是换行符
dart
String normal = 'Line 1\nLine 2';
print('Normal:');
print(normal);
# 输出结果
Normal:
Line 1
Line 2
- Raw 字符串,
\n是字面量符
dart
String raw = r'Line 1\nLine 2';
print('Raw:');
print(raw);
# 输出结果
Raw:
Line 1\nLine 2
(2)StringBuffer 性能优化
- 大量字符串拼接时,使用 StringBuffer 更高效
dart
StringBuffer buffer = StringBuffer();
for (int i = 0; i < 1000; i++) {
buffer.write('Item $i, ');
}
String result = buffer.toString();
print('Length: ${result.length}');
(3)字符串与其他类型转换
- 数字转字符串
dart
int num = 42;
String fromInt = num.toString();
String formatted = num.toStringAsFixed(2);
print(fromInt);
print(formatted);
# 输出结果
42
42.00
- 字符串转数字
dart
int parsedInt = int.parse('123');
double parsedDouble = double.parse('3.14');
print(parsedInt);
print(parsedDouble);
# 输出结果
123
3.14
- 字符串转列表
dart
String csv = 'apple,banana,orange';
List<String> fruits = csv.split(',');
print(fruits);
# 输出结果
[apple, banana, orange]
- 列表转字符串
dart
List<String> colors = ['red', 'green', 'blue'];
String joined = colors.join('+');
print(joined);
# 输出结果
red+green+blue