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创建 #

  1. 打开命令面板(Cmd+Shift+P)
  2. 输入 Flutter: New Project
  3. 选择项目类型
  4. 输入项目名称
  5. 选择保存位置

1.3 使用Android Studio创建 #

  1. 点击 New Flutter Project
  2. 选择 Flutter
  3. 配置项目信息
  4. 点击 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中:

  1. 点击代码行号左侧设置断点
  2. 以调试模式运行(F5)
  3. 程序会在断点处暂停

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