一套代码,覆盖所有屏幕

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 对比其他跨平台工具

FlutterReact NativeKotlin Multiplatform
Star 数176,846125,96652,834
Fork 数30,47925,1806,323
语言DartJavaScript/TypeScriptKotlin
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。