Flutter入门:从零开始构建跨平台应用

栈里有风
2025-12-14 16:48
阅读 707

大家好,我是掘金上的一名全栈工程师,也是985高校计算机专业的毕业生。最近几年,我一直在用 Flutter 开发跨平台 App,并在掘金写了大量入门教程。今天这篇《Flutter入门:从零开始构建跨平台应用》,就是专门为完全零基础的朋友准备的。

我当初学 Flutter 的时候,也是一头雾水:Dart 是什么?Widget 怎么嵌套?为什么不能像写网页那样直接改样式?所以,我特别理解新手的困惑。这篇文章会用最简单的方式,带你从安装到写出第一个 App,让你真正“跑起来”。


什么是 Flutter?它能做什么?

Flutter 是 Google 推出的 UI 工具包,用来开发跨平台的移动应用(iOS + Android)、桌面应用(Windows、macOS、Linux)甚至 Web 应用。

你可以把它想象成一个“魔法画笔”——只要写一次代码,就能在多个平台上画出几乎一模一样的界面。

💡 关键词解释

  • 产品:你最终做出的 App 就是一个“产品”。无论是电商、社交还是工具类 App,Flutter 都能帮你快速打造 MVP(最小可行产品)。
  • JavaScript:很多人会问:“为什么不直接用 React Native(基于 JS)?” 确实,JS 生态庞大,但 Flutter 使用 Dart 语言,性能更接近原生,UI 更流畅。而且 Dart 学起来比你想象中简单!
  • 综合:Flutter 是一个综合性框架,不仅包含 UI 渲染,还内置了状态管理、动画、网络请求等能力,开箱即用。

第一步:搭建开发环境

别担心,安装过程其实很傻瓜式。我们只需要三样东西:

工具 作用 安装方式
Flutter SDK 核心开发工具包 官网下载解压即可
Android Studio 或 VS Code 代码编辑器 推荐 VS Code(轻量)
模拟器或真机 运行测试 可用 Android 模拟器

安装步骤(以 Windows/macOS 为例):

  1. 访问 https://flutter.dev,下载 Flutter SDK(选择 stable 版本)
  2. 解压到任意文件夹,比如 C:\flutter~/development/flutter
  3. 配置环境变量:把 flutter/bin 路径加入系统 PATH
  4. 打开终端,运行:
    flutter doctor
    
    这个命令会检查你的环境缺什么(比如 Android SDK、Xcode 等),按提示安装即可。

避坑指南
我当初卡在 flutter doctor 报错 Android license 问题。解决方法是在终端运行:

flutter doctor --android-licenses

然后一路按 y 确认就行。


第二步:理解 Flutter 的核心概念

Flutter 的世界里,一切皆 Widget(小部件)

什么是 Widget?

Widget 就是 UI 元素。按钮、文字、图片、布局容器……全都是 Widget。它们可以像乐高积木一样层层嵌套

举个例子,下面这段代码会显示一行文字:

Text('Hello, Flutter!')

而要让这个文字居中显示,你需要把它包在一个 Center Widget 里:

Center(
  child: Text('Hello, Flutter!'),
)

📌 关键点

  • child 表示“子元素”(单个)
  • children 表示“多个子元素”(用列表)

常见 Widget 快速认识:

Widget 作用 示例
Text 显示文字 Text('你好')
Container 容器,可加宽高、颜色、边距 Container(color: Colors.blue, child: ...)
Column / Row 垂直/水平排列子元素 Column(children: [Text('A'), Text('B')])
ElevatedButton 按钮 ElevatedButton(onPressed: () {}, child: Text('点我'))

第三步:动手做一个“待办事项”小产品

现在,我们来做一个超简单的 Todo List(待办事项)App。目标:输入任务,点击按钮添加到列表。

1. 创建项目

在终端运行:

flutter create my_todo_app
cd my_todo_app

2. 修改 lib/main.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: '我的待办',
      theme: ThemeData(primarySwatch: Colors.blue),
      home: const TodoPage(),
    );
  }
}

class TodoPage extends StatefulWidget {
  const TodoPage({super.key});

  @override
  State<TodoPage> createState() => _TodoPageState();
}

class _TodoPageState extends State<TodoPage> {
  final List<String> todos = [];
  final TextEditingController _controller = TextEditingController();

  void _addTodo() {
    setState(() {
      todos.add(_controller.text);
      _controller.clear();
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('待办事项')),
      body: Column(
        children: [
          Padding(
            padding: const EdgeInsets.all(8.0),
            child: Row(
              children: [
                Expanded(
                  child: TextField(
                    controller: _controller,
                    decoration: const InputDecoration(hintText: '输入任务...'),
                  ),
                ),
                ElevatedButton(onPressed: _addTodo, child: const Text('添加')),
              ],
            ),
          ),
          Expanded(
            child: ListView.builder(
              itemCount: todos.length,
              itemBuilder: (context, index) {
                return ListTile(title: Text(todos[index]));
              },
            ),
          ),
        ],
      ),
    );
  }
}

3. 运行项目

在终端执行:

flutter run

选择模拟器或连接手机,稍等几秒,你的第一个 Flutter App 就跑起来了!

🔍 代码解析

  • StatefulWidget:用于需要“变化”的界面(比如添加新任务)
  • setState():告诉 Flutter “界面有更新,请重新绘制”
  • TextField + TextEditingController:获取用户输入
  • ListView.builder:高效渲染长列表

新手常见问题解答(FAQ)

❓ Q1:Dart 语言难学吗?需要先学 JavaScript 吗?

不需要! Dart 语法和 Java/C# 很像,也借鉴了 JS 的部分特性。你只要会基本的编程逻辑(变量、循环、函数),就能上手。而且 Flutter 的文档示例都是 Dart 写的,边看边学很快。

❓ Q2:为什么我的 App 在 iOS 上打不开?

确保你已安装 Xcode(macOS 必需),并在 ios/ 目录下运行 pod install。如果是首次运行 iOS 项目,可能需要等待较长时间下载依赖。

❓ Q3:热重载(Hot Reload)没生效?

检查是否修改了 main() 函数或 initState()。这些地方的改动需要重启(Hot Restart),而不是热重载。快捷键通常是 Ctrl + F5(VS Code)。


下一步学习建议

恭喜你完成了第一个 Flutter 应用!接下来,我建议你:

  1. 深入学习 Widget:尝试组合 StackGridViewCard 等布局
  2. 掌握状态管理:从 setState 过渡到 ProviderRiverpod
  3. 调用 API:用 http 包获取网络数据,打造真实产品
  4. 发布上线:学习如何打包 APK/IPA,提交到应用商店

🌟 综合能力提升
不要只盯着代码!多思考“产品”逻辑——用户为什么要用你的 App?界面是否直观?这正是 Flutter 的优势:快速迭代,验证想法。


结语

Flutter 不仅是一个技术框架,更是你实现创意的产品加速器。无论你是想转行移动开发,还是创业做 MVP,它都能帮你节省大量时间。

记住:每个大神,都曾是从 Hello World 开始的。你现在写的每一行代码,都在为未来的 App 铺路。

如果你觉得这篇教程有帮助,欢迎在评论区留言交流!我会持续更新更多 Flutter 实战内容。

加油,未来的 Flutter 开发者!🚀

评论 0

最热最新
暂无评论
匿名用户Lv.1
0
影响力
0
文章
0
粉丝