Dart 基础教程

Dart 基础教程

一、环境搭建与第一个程序

  1. 安装Dart SDK

  2. 第一个Dart程序

dart 复制代码
void main() {
  print('Hello, Dart World!');
}

运行结果:

复制代码
Hello, Dart World!

二、变量与数据类型

1. 变量声明

dart 复制代码
var name = 'Alice';      // 类型推断
String city = 'London';  // 显式声明
dynamic anything = 5;    // 动态类型
final PI = 3.14;         // 运行时常量
const gravity = 9.8;     // 编译时常量

2. 基本数据类型

dart 复制代码
int age = 25;                  // 整数
double price = 9.99;           // 浮点数
bool isStudent = true;         // 布尔值
String greeting = 'Hello';     // 字符串
List<int> numbers = [1,2,3];   // 列表
Map<String, int> scores = {    // Map集合
  'Math': 90,
  'English': 85
};

3. 类型检查与转换

dart 复制代码
var value = '123';
print(value is String);  // true
int numValue = int.parse(value);
String strValue = numValue.toString();

三、运算符

1. 基础运算符

dart 复制代码
int a = 10, b = 3;
print(a + b);   // 13
print(a ~/ b);  // 3 (整除)
print(a++);     // 10 (后置递增)

2. 空安全运算符

dart 复制代码
String? nullableName;
print(nullableName ?? 'Default');  // 空合并
print(nullableName?.length);       // 安全访问

四、控制流程

1. 条件语句

dart 复制代码
int score = 85;
if (score >= 90) {
  print('优秀');
} else if (score >= 60) {
  print('及格');
} else {
  print('不及格');
}

// 三元运算符
var result = score >= 60 ? '通过' : '补考';

2. 循环语句

dart 复制代码
// for循环
for (var i = 0; i < 5; i++) {
  print(i);
}

// for-in循环
var fruits = ['apple', 'banana', 'orange'];
for (var fruit in fruits) {
  print(fruit);
}

// while循环
int count = 3;
while (count > 0) {
  print(count--);
}

五、函数

1. 基本函数

dart 复制代码
// 函数定义
double calculateBMI(double weight, double height) {
  return weight / (height * height);
}

// 箭头函数
String greet(String name) => 'Hello, $name!';

void main() {
  print(calculateBMI(70, 1.75));  // 22.857
  print(greet('Bob'));           // Hello, Bob!
}

2. 参数类型

dart 复制代码
// 命名参数
void register({String name, int age}) {
  print('$name ($age) registered');
}

// 可选参数
String say(String from, [String? to]) {
  return to != null ? '$from to $to' : from;
}

void main() {
  register(name: 'Alice', age: 25);
  print(say('Hello'));         // Hello
  print(say('Hi', 'there'));   // Hi to there
}

六、面向对象编程

1. 类与对象

dart 复制代码
class Person {
  String name;
  int age;
  
  // 构造函数
  Person(this.name, this.age);
  
  // 命名构造函数
  Person.newborn(String name) : this(name, 0);
  
  // 方法
  void introduce() {
    print('我是$name,今年$age岁');
  }
}

void main() {
  var p1 = Person('Alice', 25);
  var baby = Person.newborn('Charlie');
  p1.introduce();  // 我是Alice,今年25岁
}

2. 继承与多态

dart 复制代码
class Animal {
  void makeSound() => print('---');
}

class Dog extends Animal {
  @override
  void makeSound() => print('汪汪!');
}

void main() {
  Animal myPet = Dog();
  myPet.makeSound();  // 汪汪!
}

3. Mixin

dart 复制代码
mixin Flyable {
  void fly() => print('飞行中...');
}

class Bird with Flyable {}

void main() {
  var sparrow = Bird();
  sparrow.fly();  // 飞行中...
}

七、异常处理

dart 复制代码
void main() {
  try {
    var result = 100 ~/ 0;
  } on IntegerDivisionByZeroException {
    print('除数不能为零!');
  } catch (e) {
    print('未知错误: $e');
  } finally {
    print('处理完成');
  }
}

八、集合与泛型

1. List操作

dart 复制代码
var numbers = [1, 2, 3];
numbers.add(4);
numbers.removeAt(0);
print(numbers.where((n) => n > 2));  // (3,4)

2. Map操作

dart 复制代码
var capitals = {
  'China': 'Beijing',
  'Japan': 'Tokyo'
};
capitals['USA'] = 'Washington';
print(capitals.containsKey('China'));  // true

3. 泛型使用

dart 复制代码
class Box<T> {
  T content;
  Box(this.content);
}

void main() {
  var stringBox = Box<String>('Secret');
  var intBox = Box<int>(42);
}

九、异步编程

1. Future基础

dart 复制代码
Future<String> fetchUser() async {
  await Future.delayed(Duration(seconds: 1));
  return '用户数据';
}

void main() async {
  print('开始获取...');
  var user = await fetchUser();
  print('获取到:$user');
}

2. Stream使用

dart 复制代码
Stream<int> countStream(int to) async* {
  for (int i = 1; i <= to; i++) {
    await Future.delayed(Duration(milliseconds: 500));
    yield i;
  }
}

void main() async {
  await for (var num in countStream(3)) {
    print(num);  // 间隔0.5秒输出1,2,3
  }
}

十、综合案例:温度转换器

dart 复制代码
class Temperature {
  double celsius;
  
  Temperature(this.celsius);
  
  double get fahrenheit => celsius * 9/5 + 32;
  
  factory Temperature.fromFahrenheit(double f) {
    return Temperature((f - 32) * 5/9);
  }
}

void main() {
  var t1 = Temperature(25);
  print('25°C = ${t1.fahrenheit.toStringAsFixed(1)}°F');  // 77.0°F
  
  var t2 = Temperature.fromFahrenheit(77);
  print('77°F = ${t2.celsius}°C');  // 25°C
}

十一、最佳实践

  1. 始终启用空安全
  2. 使用final声明不需要修改的变量
  3. 优先使用??运算符处理空值
  4. 对于简单构造函数使用语法糖形式
  5. 异步操作统一使用async/await
  6. 集合操作多使用高阶函数(map, where, reduce等)

十二、扩展练习

实现一个简易待办事项应用:

  • 使用类管理待办事项
  • 支持添加/删除任务
  • 可以标记任务完成状态
  • 保存数据到本地文件
dart 复制代码
class TodoItem {
  String title;
  bool isDone;
  
  TodoItem(this.title, [this.isDone = false]);
}

class TodoList {
  final List<TodoItem> _items = [];
  
  void add(String title) => _items.add(TodoItem(title));
  
  void remove(int index) => _items.removeAt(index);
  
  void toggleDone(int index) {
    _items[index].isDone = !_items[index].isDone;
  }
  
  void display() {
    _items.asMap().forEach((i, item) {
      print('${i+1}. [${item.isDone ? '✓' : ' '}] ${item.title}');
    });
  }
}

void main() {
  var myList = TodoList();
  myList.add('学习Dart');
  myList.add('练习Flutter');
  myList.toggleDone(0);
  myList.display();
}

输出结果:

css 复制代码
1. [✓] 学习Dart
2. [ ] 练习Flutter
相关推荐
怀君1 小时前
Flutter——数据库Drift开发详细教程(五)
数据库·flutter
ssslar4 小时前
Flutter PIP 插件 ---- 为iOS 重构PipController, Demo界面,更好的体验
flutter·pip
肥肥呀呀呀20 小时前
flutter 的热更新方案shorebird
flutter
snail2012111 天前
Flutter接入ProtoBuff和原生Android通信【性能最优】
android·flutter
程序猿阿伟1 天前
《让歌声跨越山海:Flutter借助Agora SDK实现高质量连麦合唱》
flutter
郝郝先生--1 天前
Flutter 异步原理-Zone
前端·flutter
怀君2 天前
Flutter——数据库Drift开发详细教程(四)
数据库·flutter
肥肥呀呀呀2 天前
flutter 资料收集
前端·flutter
程序猿阿伟2 天前
《社交应用架构生存战:React Native与Flutter的部署容灾决胜法则》
flutter·react native·架构
肥肥呀呀呀2 天前
flutter利用 injectable和injectable_generator 自动get_it注册
flutter