1. 基础入门
1.1 什么是 Flutter
1.1.1 Flutter 的特点和优势
- 跨平台开发:一套代码同时支持 Android、iOS、Web、桌面和嵌入式设备。
- 高性能:使用 Skia 图形引擎直接渲染,避免桥接(Bridge)开销,性能接近原生。
- 快速开发 :
- Hot Reload:实时预览代码修改的效果,极大提高开发效率。
- 丰富的 Widget:内置大量可复用的 UI 组件,减少开发时间。
- 一致性:无论在 Android 还是 iOS,UI 表现一致。
- 强大的社区支持:丰富的插件生态,几乎覆盖所有主流功能需求。
1.1.2 Flutter 的架构
- Dart 编程语言 :
- Flutter 的核心语言,支持面向对象和函数式编程。
- 提供高效的垃圾回收机制和强大的异步编程能力。
- Widget :
- Flutter 的一切都是 Widget,UI 是由 Widget 树构建的。
- 分为
StatelessWidget
和StatefulWidget
。
- Skia 渲染引擎 :
- Flutter 使用 Skia 渲染引擎直接绘制 UI,而不是依赖平台的原生控件。
- 提供高性能的 2D 图形渲染。
- 平台通道(Platform Channel) :
- 用于与原生代码(如 Java、Kotlin、Swift、Objective-C)交互,扩展功能。
1.1.3 Flutter 和其他跨平台框架的对比
特性 | Flutter | React Native | Kotlin Multiplatform |
---|---|---|---|
语言 | Dart | JavaScript/TypeScript | Kotlin |
渲染方式 | 自定义渲染(Skia 引擎) | 使用原生控件 | 使用原生控件 |
性能 | 接近原生 | 依赖桥接,性能稍逊 | 接近原生 |
开发效率 | 高效(Hot Reload + 丰富的 Widget) | 高效(Hot Reload) | 中等(需编写平台特定代码) |
生态系统 | 丰富的插件生态 | 丰富的插件生态 | 插件生态较少 |
适用场景 | UI 密集型应用 | UI 密集型应用 | 需要共享业务逻辑的多平台项目 |
1.2 环境搭建
1.2.1 安装 Flutter SDK
- 下载 Flutter SDK :
- 前往 Flutter 官网 下载适合你操作系统的 SDK。
- 解压并配置环境变量 :
- 将 Flutter 的
bin
目录添加到系统的环境变量中。 - 验证安装:运行
flutter doctor
检查环境配置。
- 将 Flutter 的
1.2.2 配置开发环境
- Android Studio :
- 安装 Flutter 和 Dart 插件。
- 配置 Android 模拟器(AVD)。
- VS Code :
- 安装 Flutter 和 Dart 插件。
- 配置调试环境。
- Xcode (仅 macOS):
- 安装最新版本的 Xcode。
- 配置 iOS 模拟器。
1.2.3 配置模拟器
- Android 模拟器 :
- 打开 Android Studio,进入 AVD Manager。
- 创建一个虚拟设备,选择目标 API 级别。
- 启动模拟器。
- iOS 模拟器 :
- 打开 Xcode,进入
Xcode > Open Developer Tool > Simulator
。 - 选择设备类型(如 iPhone 14 Pro)。
- 打开 Xcode,进入
1.2.4 测试运行第一个 Flutter 应用
-
创建一个新项目:
bashflutter create my_first_app cd my_first_app flutter run
-
修改代码并使用 Hot Reload 查看实时效果。
1.3 Dart 基础
1.3.1 Dart 的语法基础
-
变量与数据类型 :
- Dart 是强类型语言,支持类型推断。
dartint age = 25; double height = 1.75; String name = "Flutter"; bool isFlutterAwesome = true; var inferredType = "Dart"; // 自动推断为 String
-
条件语句与循环 :
-
条件语句:
dartif (age > 18) { print("成年人"); } else { print("未成年人"); }
-
循环:
dartfor (int i = 0; i < 5; i++) { print("循环次数:$i"); }
-
1.3.2 函数与匿名函数
-
函数定义 :
dartint add(int a, int b) { return a + b; }
-
匿名函数 :
dartvar multiply = (int a, int b) => a * b; print(multiply(2, 3)); // 输出:6
1.3.3 异步编程
-
Future :
dartFuture<String> fetchData() async { await Future.delayed(Duration(seconds: 2)); return "数据加载完成"; }
-
Stream :
dartStream<int> numberStream() async* { for (int i = 0; i < 5; i++) { await Future.delayed(Duration(seconds: 1)); yield i; } }
1.3.4 面向对象编程
-
类与对象 :
dartclass Person { String name; int age; Person(this.name, this.age); void introduce() { print("我是 $name,今年 $age 岁"); } } void main() { var person = Person("张三", 25); person.introduce(); }
-
继承与多态 :
dartclass Animal { void speak() { print("动物发出声音"); } } class Dog extends Animal { @override void speak() { print("汪汪汪"); } } void main() { Animal animal = Dog(); animal.speak(); // 输出:汪汪汪 }
-
抽象类与接口 :
dartabstract class Shape { double getArea(); } class Circle implements Shape { double radius; Circle(this.radius); @override double getArea() => 3.14 * radius * radius; }
1.3.5 常用集合
-
List :
dartvar numbers = [1, 2, 3]; numbers.add(4); print(numbers); // 输出:[1, 2, 3, 4]
-
Set :
dartvar uniqueNumbers = {1, 2, 3}; uniqueNumbers.add(3); print(uniqueNumbers); // 输出:{1, 2, 3}
-
Map :
dartvar person = {"name": "张三", "age": 25}; print(person["name"]); // 输出:张三