现在位置: 首页 > Flutter 教程 > 正文

第一个 Flutter 应用

本节将介绍如何使用 Flutter CLI 创建新的 Flutter 项目,运行应用,并理解最基础的代码结构。


使用 Flutter CLI 创建项目

Flutter CLI 是 Flutter 的命令行工具,用于创建、管理和构建 Flutter 项目。

创建新项目

在终端中运行以下命令创建一个新的 Flutter 项目:

$ flutter create my_first_app

其中 my_first_app 是你的项目名称。Flutter 会根据这个名称创建对应的文件夹和文件。

项目名称必须使用小写字母和下划线,不能包含空格或特殊字符。

命令参数

flutter create 命令支持多种参数:

参数说明示例
--org指定组织标识符(反向域名格式)--org com.example
--platforms指定支持的平台--platforms ios,android
--empty使用最小模板创建项目--empty
$ flutter create hello_world
Creating project "hello_world"...
  .gitignore                    2026-04-01 10:30:22
  .metadata                     2026-04-01 10:30:22
  analysis_options.yaml         2026-04-01 10:01:15
  pubspec.yaml                  2026-04-01 10:30:22
  README.md                     2026-04-01 10:30:22
  lib/
    main.dart                    2026-04-01 10:30:22
  test/
    widget_test.dart             2026-04-01 10:22:34
  android/
  ios/
  web/
  ...
Running "flutter pub get"...                     13.2s
Running "flutter analyze"...                     3.2s

运行 Flutter 应用

启动开发服务器

项目创建完成后,进入项目目录并运行应用:

$ cd hello_world
$ flutter run

首次运行可能会花费一些时间,因为 Flutter 需要编译 Dart 代码并启动应用。

指定运行设备

如果你的电脑连接了多个设备(或模拟器),可以使用 -d 参数指定运行设备:

设备命令
Android 模拟器flutter run -d android
iOS 模拟器flutter run -d iphone
Chrome 浏览器flutter run -d chrome
Windows 桌面flutter run -d windows

查看可用设备

运行以下命令查看所有可用的运行设备:

$ flutter devices

输出示例:

2 connected devices:
Chrome (web)      • chrome           • web-javascript • Chrome  • web
Windows (windows) • windows          • windows        • x64    • Windows 10.0.0

热重载功能

Flutter 最强大的功能之一是热重载(Hot Reload)。当你正在运行应用时:

  1. 修改代码并保存
  2. 在终端中按 r
  3. 应用会重新加载,你能看到最新的更改

热重载非常快,通常只需要一两秒钟。这极大地提高了开发效率,让你可以实时预览界面效果。

热重载不会丢失应用状态,这意味着你可以在不重启应用的情况下快速迭代 UI 设计。


main.dart 文件解析

每个 Flutter 项目都有一个入口文件 lib/main.dart。让我们看看默认生成的内容:

实例:main.dart 代码

// lib/main.dart
// Flutter 应用的入口文件

// 引入 Material Design 组件库
import 'package:flutter/material.dart';

// 应用入口函数
void main() {
  // runApp 是 Flutter 的启动函数
  // 它接收一个 Widget 作为根 widget
  runApp(const MyApp());
}

// 根 Widget(无状态组件)
class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    // MaterialApp 是 Material Design 风格的根组件
    return MaterialApp(
      // 设置应用标题
      title: 'Flutter Demo',
      // 设置主题颜色
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        // 使用 Material 3
        useMaterial3: true,
      ),
      // 应用的主页面
      home: const MyHomePage(title: 'Flutter 首页'),
    );
  }
}

// 有状态组件(可以有内部状态)
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 通知 Flutter 状态已更改,需要重新构建 UI
    setState(() {
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    // Scaffold 是 Material Design 的页面脚手架
    return Scaffold(
      // AppBar 是顶部应用栏
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        // 显示页面标题
        title: Text(widget.title),
      ),
      // 页面主体内容
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            const Text('你点击了按钮多少次:'),
            // 显示计数器值
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headlineMedium,
            ),
          ],
        ),
      ),
      // 悬浮按钮
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: '增加',
        child: const Icon(Icons.add),
      ),
    );
  }
}

代码结构说明

部分说明
import 语句引入所需的包,这里引入了 Material Design 组件库
main 函数Dart 程序的入口点,调用 runApp 启动应用
runApp 函数Flutter 的启动函数,接收根 Widget 作为参数
StatelessWidget无状态组件,UI 不随时间变化
StatefulWidget有状态组件,UI 可以响应数据变化
build 方法每个 Widget 必须实现的方法,用于构建 UI