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
相关推荐
微祎_21 小时前
Flutter for OpenHarmony:单词迷宫一款基于 Flutter 构建的手势驱动字母拼词游戏,通过滑动手指连接字母路径来组成单词。
flutter·游戏
ujainu1 天前
护眼又美观:Flutter + OpenHarmony 鸿蒙记事本一键切换夜间模式(四)
android·flutter·harmonyos
ujainu1 天前
让笔记触手可及:为 Flutter + OpenHarmony 鸿蒙记事本添加实时搜索(二)
笔记·flutter·openharmony
一只大侠的侠1 天前
Flutter开源鸿蒙跨平台训练营 Day 13从零开发注册页面
flutter·华为·harmonyos
一只大侠的侠1 天前
Flutter开源鸿蒙跨平台训练营 Day19自定义 useFormik 实现高性能表单处理
flutter·开源·harmonyos
恋猫de小郭1 天前
Flutter Zero 是什么?它的出现有什么意义?为什么你需要了解下?
android·前端·flutter
一只大侠的侠1 天前
Flutter开源鸿蒙跨平台训练营 Day 10特惠推荐数据的获取与渲染
flutter·开源·harmonyos
renke33641 天前
Flutter for OpenHarmony:色彩捕手——基于HSL色轮与感知色差的交互式色觉训练系统
flutter
子春一1 天前
Flutter for OpenHarmony:构建一个 Flutter 四色猜谜游戏,深入解析密码逻辑、反馈算法与经典益智游戏重构
算法·flutter·游戏
铅笔侠_小龙虾1 天前
Flutter 实战: 计算器
开发语言·javascript·flutter