一套代码,覆盖所有屏幕
Flutter 是 Google 推出的 SDK,用一套 Dart 代码就能构建在移动端、Web 和桌面上运行的应用。它不去映射各平台的原生控件,自己用 Skia 和 Impeller 图形引擎绘制界面。正因如此,同一份代码从 iPhone 到 Windows 桌面都能保持一致的外观与行为。
它要解决的问题
分别维护一个 iOS 应用、一个 Android 应用、一套 Web 构建和一套桌面构建,意味着团队成倍增加、Bug 成倍滋生。Flutter 的主张是:一个团队写 Dart,就能把应用交付到所有平台,且性能接近原生。它的 UI 是编译出来的,不走桥接到 WebView 那一套。这笔交易是否划算,是你要做的决定,而它取决于一件事:Dart。
你能得到什么
- 一套 Dart 代码,覆盖 Android、iOS、Web、Windows、macOS、Linux 以及 Fuchsia。
- 海量的 Material 与 Cupertino 控件,由 Flutter 自行绘制,而非交给操作系统。
- 有状态热重载(hot reload),能在一秒内更新正在运行的应用。
- 采用 BSD-3-Clause 许可,由 Google 主导,并拥有庞大的外部贡献者社区。
安装
Flutter 以 SDK 形式发布,而不是通过包管理器安装。官方推荐的路径是 docs.flutter.dev 上的入门指南,它会配置好 flutter 命令行工具;首次运行时会自动拉取匹配的 Dart SDK。完成后即可:
flutter doctor
flutter create my_app
flutter run
第一个界面
import 'package:flutter/material.dart';
void main() => runApp(const MaterialApp(home: Hello()));
class Hello extends StatelessWidget {
const Hello({super.key});
@override
Widget build(BuildContext context) =>
const Scaffold(body: Center(child: Text('Hello, Flutter')));
}
何处出彩,何处吃力
对于想用一套代码覆盖移动端和桌面、又要保住自定义品牌外观的产品团队,Flutter 表现出色,热重载的开发循环也快得用着舒服。但当你需要深度贴合平台原生的 UI、或想在新系统控件上线当天就用上它们时,Flutter 就会吃力。原因还是那一条:它的界面是自己绘制的。采用它还意味着要押注 Dart。这是大多数团队尚不熟悉的语言。React Native 走的是另一条路,让你继续待在 JavaScript 里,渲染原生组件。
Flutter 对比其他跨平台工具
| Flutter | React Native | Kotlin Multiplatform | |
|---|---|---|---|
| Star 数 | 176,846 | 125,966 | 52,834 |
| Fork 数 | 30,479 | 25,180 | 6,323 |
| 语言 | Dart | JavaScript/TypeScript | Kotlin |
| UI | 自绘(Skia/Impeller) | 原生组件 | 各平台原生 |
数据取自 GitHub,截至 2026 年 6 月初。Kotlin Multiplatform 随主仓库 JetBrains/kotlin 一同发布,因此它的 Star 与 Fork 数覆盖的是整个 Kotlin 语言项目,而非 Multiplatform 本身。
Star 增长史
Flutter 的曲线是一段长时间的缓慢积累,随后迎来爆发。2015 年 3 月公开后,它不慌不忙地积累 Star,到 2017 年初也才约 3,500。随后 2018 年改变了斜率:Star 数从 2017 年底的约 7,000 一路冲到 2018 年底的近 39,000,这一年也正是 Flutter 发布 1.0 版本之时。此后便是一路稳健攀升,直到约 176,800(截至 2026-06)。上方图表绘出了基于 GitHub Star 数据的完整轨迹。
相关项目
若要在 Flutter 应用中做端侧机器学习推理,TensorFlow 的 TensorFlow Lite 是常见的搭档。如果你的应用在开发阶段需要调用语言模型,像 Ollama 这样的本地运行时可以在同一台机器上提供服务。
常见问题
Flutter 是免费和开源的吗? 是的,采用 BSD-3-Clause 许可。
Flutter 用什么语言? Dart。即便你已经会 JavaScript 或 Kotlin,仍需要学它。
一套 Flutter 代码能同时面向桌面和 Web 吗? 可以。同一份代码可面向移动端、Web、Windows、macOS 和 Linux。