从零创建你的第一个 Flutter 应用(一)

27 阅读5分钟

一、我们要做什么?

在官方教程中,最终要构建一个叫做「Birdle」的小游戏应用(类似于大家熟悉的 Wordle 猜词游戏)。不过今天这一课的重点不是完成整个游戏,而是迈出第一步:创建一个能运行的 Flutter 项目,并理解它的基本结构

二、创建新项目

2.1 打开终端

在 VS Code 中,按 Ctrl + `(键盘左上角的反引号键)打开终端。终端就是一个可以输入命令的窗口,你可以把它想象成"跟电脑对话的聊天框"。

2.2 运行创建命令

在终端中输入以下命令:

flutter create birdle --empty

这行命令做了什么呢?

  • flutter create:告诉 Flutter "我要创建一个新项目"。
  • birdle:项目的名字,你可以换成任何你喜欢的名字(注意:只能用小写字母和下划线,比如 my_app)。
  • --empty:使用最简洁的模板,生成的代码最少,最适合学习。

命令执行完毕后,Flutter 会自动帮你创建好整个项目的文件夹结构。

2.3 进入项目目录

cd birdle

这行命令的意思是"进入 birdle 这个文件夹"。后续所有操作都需要在项目目录下执行。

三、看懂你的第一份 Flutter 代码

用 VS Code 打开项目中的 lib/main.dart 文件。这是整个应用的入口文件,所有 Flutter 应用都从这里开始运行。

别被代码吓到,我们一段一段来看。

3.1 导入和入口函数

import 'package:flutter/material.dart';

void main() {
  runApp(const MainApp());
}

这几行代码的含义:

  • import:导入 Flutter 的 Material 组件库。你可以理解为"从工具箱里取出工具"。Material 是 Google 设计的一套 UI 风格,提供了大量现成的按钮、文字、布局等组件。
  • main() 函数:这是每个 Dart 程序的起点,就像一本书的第一页。程序启动后,电脑会第一时间找到这个函数并执行它。
  • runApp() :Flutter 提供的方法,作用是"把一个组件渲染到屏幕上"。它接收一个 Widget(组件)作为参数,这个组件就是整个应用的"根"。

3.2 MainApp 组件

class MainApp extends StatelessWidget {
  const MainApp({super.key});

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      home: Scaffold(
        body: Center(
          child: Text('Hello World!'),
        ),
      ),
    );
  }
}

这段代码定义了一个叫 MainApp 的组件。让我们逐层拆解:

  • StatelessWidget:无状态组件。意思是这个组件一旦构建好,内容就不会变化。后面你还会学到 StatefulWidget(有状态组件),它可以响应用户操作而更新界面。
  • build() 方法:每个组件都必须有的方法,它告诉 Flutter "这个组件长什么样"。
  • MaterialApp:应用的最外层包装,提供了 Material Design 风格的基础配置。
  • Scaffold:脚手架,提供了页面的基本布局结构(比如顶部导航栏、底部栏、内容区域等)。
  • Center:让子组件居中显示。
  • Text('Hello World!') :显示一段文字。

3.3 理解 Widget 树

如果把这些组件的嵌套关系画出来,就像一棵倒着的树:

MainApp
  └── MaterialApp
        └── Scaffold
              └── Center
                    └── Text('Hello World!')

这就是 Flutter 中非常核心的概念——Widget 树(组件树)。在 Flutter 的世界里,一切皆 Widget。按钮是 Widget,文字是 Widget,布局也是 Widget。你的工作就是像搭积木一样,把这些 Widget 组合起来,构建出漂亮的界面。

四、运行你的应用

4.1 启动应用

在终端中输入:

flutter run -d chrome

这行命令的意思是"用 Chrome 浏览器运行这个 Flutter 应用"。第一次运行可能需要一点时间来编译,请耐心等待。

运行成功后,Chrome 浏览器会自动打开,你将看到屏幕中央显示着"Hello World!"。

💡 小贴士: 如果你想用其他方式运行,也可以在 VS Code 中直接按 F5,或者点击右上角的运行按钮。

4.2 可能遇到的问题

如果运行失败,可以先检查以下几点:

  • 确认你已经进入了项目目录(cd birdle)。
  • 确认 Flutter 已正确安装(运行 flutter doctor 检查)。
  • 确认 Chrome 浏览器已安装。

五、体验热重载(Hot Reload)

这是 Flutter 最受开发者欢迎的功能。传统开发中,改一行代码就要重新编译整个项目,等上几十秒甚至几分钟。Flutter 的热重载能在一秒内把修改反映到屏幕上,而且不会丢失当前的应用状态。

5.1 动手试试

  1. 保持应用运行状态,打开 lib/main.dart
  2. 找到 Text('Hello World!') 这一行。
  3. Hello World! 改成任意你想要的文字,比如 你好,Flutter!
  4. 在运行应用的终端中按下 r 键。

看!屏幕上的文字瞬间就变了,不需要重新启动应用。

5.2 为什么热重载这么重要?

想象一下,你正在调试一个需要先登录、再进入某个页面才能看到的界面。如果没有热重载,每次改代码都要从头走一遍登录流程。有了热重载,你只需按一下 r,修改后的界面就立刻呈现,之前的登录状态完全保留。这大大提升了开发效率。

六、本节知识点小结

经过这一课,你已经掌握了以下内容:

创建项目: 使用 flutter create 命令加上 --empty 参数,可以快速生成一个最简洁的 Flutter 项目结构。

理解代码结构: Flutter 应用从 main() 函数开始,通过 runApp() 将根组件渲染到屏幕上。每个组件都有一个 build() 方法来描述界面。

Widget 树: Flutter 的界面是由一层层嵌套的 Widget 组成的树状结构。你的任务就是组合这些 Widget 来构建 UI。

运行和热重载: 使用 flutter run 启动应用,按 r 触发热重载,可以在不到一秒内看到代码修改的效果。

七、下一步学习

恭喜你成功创建并运行了第一个 Flutter 应用!接下来,官方教程会带你学习 Widget 基础(Widget Fundamentals),深入了解更多类型的组件以及它们的用法。

我们下篇文章见!

参考资料:Flutter 官方教程 - Create an App