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
相关推荐
阅文作家助手开发团队_山神13 小时前
第三章: Flutter-quill 数据格式Delta
flutter
阅文作家助手开发团队_山神13 小时前
第二章:Document 模块与 DOM 树详解
flutter
程序员老刘13 小时前
20%的选择决定80%的成败
flutter·架构·客户端
肥肥呀呀呀1 天前
flutter 中Stack 使用clipBehavior: Clip.none, 超出的部分无法响应所有事件
flutter
SY.ZHOU1 天前
Flutter如何支持原生View
flutter
sg_knight1 天前
Flutter嵌入式开发实战 ——从树莓派到智能家居控制面板,打造工业级交互终端
android·前端·flutter·ios·智能家居·跨平台
张风捷特烈1 天前
每日一题 Flutter#4 | 说说组件 build 函数的作用
android·flutter·面试
小镇梦想家2 天前
鸿蒙NEXT-Flutter(2)
flutter
至善迎风2 天前
一键更新依赖全指南:Flutter、Node.js、Kotlin、Java、Go、Python 等主流语言全覆盖
java·flutter·node.js
椒盐煎蛋2 天前
新建的Flutter插件工程,无法索引andorid工程代码;无法索引io.flutter包下代码。
flutter