折腾两天,Flutter 环境终于绿了!顺便写了个第一个App

4 阅读2分钟

1. 前言

最近开始系统地学习 Flutter,目标是能独立开发跨平台 App。按照官方文档和网上一些指南,把开发环境搭建好了。这一篇主要记录环境验证的过程,以及创建第一个 Flutter 应用并成功运行的步骤。

2. 环境确认 – flutter doctor 全绿 ✅

在终端(或 VS Code / Android Studio 的终端)执行:

flutter doctor

我的输出结果(节选):

Flutter assets will be downloaded from https://storage.flutter-io.cn. Make sure you trust this source!
Doctor summary (to see all details, run flutter doctor -v):
[√] Flutter (Channel stable, 3.35.5, on Microsoft Windows [版本 10.0.26200.8655], locale zh-CN)
[√] Windows Version (Windows 11 or higher, 25H2, 2009)
[√] Android toolchain - develop for Android devices (Android SDK version 36.1.0)
[√] Chrome - develop for the web
[√] Visual Studio - develop Windows apps (Visual Studio Community 2026 18.6.2)
[√] Android Studio (version 2026.1.1)
[√] Connected device (3 available)
[√] Network resourcesNo issues found!

所有项都是 [✓],说明环境基本没问题。如果有红叉或感叹号,根据提示去安装对应组件即可(比如 Android SDK、Xcode 命令行工具、Chrome 等)。

3. 创建一个新项目

用下面命令创建第一个项目:

flutter create my_first_app

这个过程会生成一个完整的 Flutter 工程,自带一个计数器示例。

4. 运行到不同平台

运行在 Chrome(Web)

cd my_first_app
flutter run -d chrome

运行在 Android 模拟器(前提是已启动模拟器):

flutter run -d emulator-5554

运行在 iOS 模拟器(macOS)

flutter run -d "iPhone 15"

第一次运行会稍微慢一点(编译 + 下载依赖),耐心等待,成功后会自动打开浏览器或模拟器,看到一个经典的计数器应用:

  • 中间显示一个数字(初始为 0)
  • 点击右下角的 + 按钮,数字会增加

5. 简单改一下代码 – 变成“Hello World”

打开 lib/main.dart,找到 home: MyHomePage(title: 'Flutter Demo Home Page'),把标题改成自己的。
更简单点:修改 _MyHomePageState 中的 build 方法,把原本复杂的 Column 替换为一个 Center 加 Text

修改后的核心代码(删减版):

@override
Widget build(BuildContext context) {
  return Scaffold(
    appBar: AppBar(
      title: Text('我的第一篇Flutter'),
    ),
    body: Center(
      child: Text(
        'Hello, Flutter!',
        style: TextStyle(fontSize: 32),
      ),
    ),
  );
}

保存文件,热重载(r 键)立即看到界面变化。

6. 踩到的一个小坑

运行 flutter run 提示 No connected devices

解决方法:

  • 确保模拟器已启动,或手机已通过 USB 连接并开启调试模式。
  • 如果是 Web 端,加上 -d chrome
  • 执行 flutter devices 查看可用设备列表。

另一个坑:第一次编译 Web 时可能会卡在 Running Gradle task,这是正常的,第一次会下载很多依赖,建议开代理或耐心等待。

7. 下一步计划

  • 学习 Dart 语言核心语法(已经有点基础)
  • 搞懂 StatelessWidget vs StatefulWidget
  • 尝试写一个简单的布局:Row + Column + Container