Flutter基础入门
2025/2/22 18:41:26
来源:https://blog.csdn.net/s12117719679/article/details/145698689
浏览:
次
关键词:Flutter基础入门
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
检查环境配置。
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)。
1.2.4 测试运行第一个 Flutter 应用
- 创建一个新项目:
flutter create my_first_app
cd my_first_app
flutter run
- 修改代码并使用 Hot Reload 查看实时效果。
1.3 Dart 基础
1.3.1 Dart 的语法基础
- 变量与数据类型:
int age = 25;
double height = 1.75;
String name = "Flutter";
bool isFlutterAwesome = true;
var inferredType = "Dart";
- 条件语句与循环:
1.3.2 函数与匿名函数
- 函数定义:
int add(int a, int b) {return a + b;
}
- 匿名函数:
var multiply = (int a, int b) => a * b;
print(multiply(2, 3));
1.3.3 异步编程
- Future:
Future<String> fetchData() async {await Future.delayed(Duration(seconds: 2));return "数据加载完成";
}
- Stream:
Stream<int> numberStream() async* {for (int i = 0; i < 5; i++) {await Future.delayed(Duration(seconds: 1));yield i;}
}
1.3.4 面向对象编程
- 类与对象:
class Person {String name;int age;Person(this.name, this.age);void introduce() {print("我是 $name,今年 $age 岁");}
}void main() {var person = Person("张三", 25);person.introduce();
}
- 继承与多态:
class Animal {void speak() {print("动物发出声音");}
}class Dog extends Animal {@overridevoid speak() {print("汪汪汪");}
}void main() {Animal animal = Dog();animal.speak();
}
- 抽象类与接口:
abstract class Shape {double getArea();
}class Circle implements Shape {double radius;Circle(this.radius);@overridedouble getArea() => 3.14 * radius * radius;
}
1.3.5 常用集合
- List:
var numbers = [1, 2, 3];
numbers.add(4);
print(numbers);
- Set:
var uniqueNumbers = {1, 2, 3};
uniqueNumbers.add(3);
print(uniqueNumbers);
- Map:
var person = {"name": "张三", "age": 25};
print(person["name"]);