Flutter第一个应用 #
一、创建项目 #
1.1 使用命令行创建 #
bash
flutter create my_first_app
cd my_first_app
创建选项:
bash
flutter create --org com.example --platforms android,ios,web my_app
1.2 使用VS Code创建 #
- 打开命令面板(Cmd+Shift+P)
- 输入
Flutter: New Project - 选择项目类型
- 输入项目名称
- 选择保存位置
1.3 使用Android Studio创建 #
- 点击
New Flutter Project - 选择
Flutter - 配置项目信息
- 点击
Finish
二、项目结构 #
text
my_first_app/
├── android/ # Android原生项目
├── ios/ # iOS原生项目
├── web/ # Web项目
├── lib/ # Dart代码目录
│ └── main.dart # 应用入口
├── test/ # 测试代码
├── pubspec.yaml # 项目配置文件
└── README.md # 项目说明
三、入口文件分析 #
3.1 main.dart默认代码 #
dart
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
final String title;
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
void _incrementCounter() {
setState(() {
_counter++;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
const Text(
'You have pushed the button this many times:',
),
Text(
'$_counter',
style: Theme.of(context).textTheme.headlineMedium,
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter,
tooltip: 'Increment',
child: const Icon(Icons.add),
),
);
}
}
3.2 代码解析 #
| 部分 | 说明 |
|---|---|
main() |
应用入口函数 |
MyApp |
应用根Widget,无状态 |
MaterialApp |
Material风格应用容器 |
MyHomePage |
主页面Widget,有状态 |
Scaffold |
页面脚手架 |
setState() |
触发UI更新 |
四、运行应用 #
4.1 查看可用设备 #
bash
flutter devices
输出示例:
text
iPhone 15 Pro (simulator) • xxx • ios
sdk gphone64 arm64 (emulator) • emulator-5554 • android
Chrome (web) • chrome • web-javascript
4.2 运行应用 #
bash
flutter run
指定设备运行:
bash
flutter run -d chrome
flutter run -d iPhone
flutter run -d emulator-5554
4.3 运行模式 #
| 模式 | 命令 | 说明 |
|---|---|---|
| Debug | flutter run |
支持热重载,调试信息完整 |
| Profile | flutter run --profile |
性能分析模式 |
| Release | flutter run --release |
发布模式,性能最优 |
五、热重载体验 #
5.1 什么是热重载 #
热重载(Hot Reload)是Flutter的核心特性,修改代码后无需重启应用即可看到效果。
5.2 使用热重载 #
方式一:保存文件自动重载
在VS Code中保存文件(Cmd+S)自动触发热重载。
方式二:命令行触发
在运行终端按 r 键:
text
Performing hot reload...
Reloaded 1 of 123 libraries in 123ms.
5.3 热重载 vs 热重启 #
| 操作 | 快捷键 | 说明 |
|---|---|---|
| 热重载 | r |
保留应用状态,快速更新UI |
| 热重启 | R |
重启应用,状态重置 |
5.4 热重载限制 #
热重载无法更新的情况:
- 修改了全局变量初始值
- 修改了main()函数
- 修改了枚举类型
- 修改了泛型类型
此时需要热重启或完全重启应用。
六、修改应用 #
6.1 修改标题 #
dart
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: '我的第一个应用',
home: const MyHomePage(title: '欢迎学习Flutter'),
);
}
}
6.2 修改主题颜色 #
dart
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.blue),
useMaterial3: true,
),
6.3 修改计数器步长 #
dart
void _incrementCounter() {
setState(() {
_counter += 2;
});
}
6.4 添加新按钮 #
dart
floatingActionButton: Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
FloatingActionButton(
heroTag: 'decrement',
onPressed: () {
setState(() {
_counter--;
});
},
child: const Icon(Icons.remove),
),
const SizedBox(width: 10),
FloatingActionButton(
heroTag: 'increment',
onPressed: _incrementCounter,
child: const Icon(Icons.add),
),
],
),
七、调试技巧 #
7.1 使用print调试 #
dart
void _incrementCounter() {
print('Before: $_counter');
setState(() {
_counter++;
});
print('After: $_counter');
}
7.2 使用debugPrint #
dart
debugPrint('Counter value: $_counter');
7.3 使用断点 #
在VS Code中:
- 点击代码行号左侧设置断点
- 以调试模式运行(F5)
- 程序会在断点处暂停
7.4 使用DevTools #
bash
flutter pub global activate devtools
flutter pub global run devtools
或在运行时按 v 键打开DevTools。
八、常用VS Code快捷键 #
| 快捷键 | 功能 |
|---|---|
| Cmd+S | 保存并热重载 |
| F5 | 启动调试 |
| Shift+F5 | 停止调试 |
| Cmd+Shift+F5 | 热重启 |
| Cmd+Shift+P | 命令面板 |
| Cmd+. | 快速修复 |
九、构建发布版本 #
9.1 Android APK #
bash
flutter build apk
flutter build apk --release
flutter build apk --split-per-abi
输出位置:build/app/outputs/flutter-apk/
9.2 iOS IPA #
bash
flutter build ios
flutter build ipa
输出位置:build/ios/ipa/
9.3 Web #
bash
flutter build web
输出位置:build/web/
十、常见问题 #
10.1 热重载不生效 #
bash
flutter clean
flutter pub get
flutter run
10.2 模拟器无法启动 #
bash
flutter emulators
flutter emulators --launch <emulator_id>
10.3 设备未识别 #
bash
flutter devices
flutter config --android-sdk /path/to/sdk
十一、总结 #
11.1 核心要点 #
| 要点 | 说明 |
|---|---|
| 创建项目 | flutter create |
| 运行项目 | flutter run |
| 热重载 | 保存文件或按r键 |
| 调试 | print、断点、DevTools |
| 构建 | flutter build |
11.2 下一步 #
你已经成功运行了第一个Flutter应用!接下来让我们深入了解 项目结构。
最后更新:2026-03-28