最后核验:2026-08-28
本篇结论
Flutter 的核心价值不是“所有平台完全写一次”,而是让界面、业务逻辑和数据层尽量共享,同时为平台能力保留清晰的适配出口。
本课程会先把 iOS 应用做好,再验证 Android,最后通过 Flutter-OH 接入 HarmonyOS NEXT/OpenHarmony。
学完你能做到
- 说清 Flutter、Dart、Flutter Engine 分别负责什么。
- 判断一段代码更可能属于共享层还是平台层。
- 理解为什么“能运行”不等于“像这个平台的应用”。
- 知道课程为什么选择 iOS 作为主讲平台。
01 Flutter 解决的是什么问题
假设你要做一个任务管理应用。使用原生技术时,通常需要分别维护:
- iOS 的 Swift/Objective-C 代码。
- Android 的 Kotlin/Java 代码。
- HarmonyOS NEXT 的 ArkTS 代码。
三个应用都要实现列表、编辑、搜索、数据保存和网络同步。真正重复的并不是语法,而是同一套产品逻辑被实现了三次。
Flutter 的做法是:用 Dart 描述界面和业务逻辑,由 Flutter 框架和引擎把它运行在不同平台上。
Dart 业务与界面
↓
Flutter Framework
↓
Flutter Engine
↓
iOS / Android / 适配后的 OpenHarmony
这让大量代码可以共享,但不会消灭平台差异。
02 哪些代码适合共享
通常适合共享的内容包括:
- 数据模型与校验规则。
- 排序、搜索和筛选逻辑。
- 网络请求与错误处理。
- 页面主体和大部分自定义组件。
- 状态管理。
- 单元测试。
例如,下面的标题校验不关心应用运行在哪个平台:
String? validateTitle(String value) {
final title = value.trim();
if (title.isEmpty) {
return '标题不能为空';
}
if (title.length > 60) {
return '标题不能超过 60 个字符';
}
return null;
}
这种代码应当只维护一份。
03 哪些差异不能假装不存在
以下内容经常需要平台适配:
- 页面返回手势和系统返回键。
- Tab、导航栏、弹窗和菜单样式。
- 权限申请与系统设置入口。
- 推送、通知、相机、相册和分享。
- 应用签名、构建产物和商店审核。
- 原生 SDK 或只支持单个平台的插件。
Flutter 会自动处理一部分平台行为。例如页面转场、滚动物理和文字编辑会根据 iOS、Android 做不同适配。但涉及信息架构和组件选择时,仍然需要开发者决定。
因此,本课程不会追求三个平台逐像素相同,而是追求:
业务一致,体验符合平台习惯,差异集中且可维护。
04 为什么以 iOS 为主平台
iOS 作为主线有三个实际好处:
- 工具链边界清晰。Flutter、Xcode、Simulator 和签名流程可以串成完整闭环。
- 平台体验要求具体。返回手势、安全区、动态字体和导航层级会迫使我们正确处理细节。
- 在 macOS 上可以继续配置 Android 和 DevEco Studio,覆盖三端开发环境。
主平台不等于独占平台。课程里的共享业务代码从一开始就不能依赖 iOS,平台差异也不会散落在各个页面里。
05 课程会如何推进
我们将共同完成 Spark:一个灵感与任务管理应用。
第一阶段只做 iOS:
- 跑通工具链。
- 建立页面和导航。
- 做出可交互的本地应用。
第二阶段再扩展:
- Android 的系统返回、Material 行为和权限。
- Flutter-OH 的工程结构、插件兼容和 HAP 构建。
这样做不是把跨平台拖到最后,而是先用一个稳定主线解释 Flutter,再在读者已经理解应用结构后处理真实差异。
常见问题
Flutter 会把界面转换成 UIKit 或 Android View 吗
不能把 Flutter 简单理解为“生成一套原生控件”。Flutter 通常由自己的框架和渲染引擎绘制界面,同时通过平台嵌入层接收输入、接入系统能力。需要原生视图时,也可以使用 Platform View 等机制进行集成。
会 Flutter 后是否完全不需要 Swift、Kotlin、ArkTS
普通页面和业务逻辑通常不需要。但接入尚无插件覆盖的原生能力、调试平台构建问题或编写插件时,至少要能阅读对应平台代码。
为什么不从三个 Hello World 同时开始
三个工具链同时出现会掩盖 Flutter 本身的学习主线。课程先用 iOS 建立反馈闭环,再在明确的阶段门引入 Android 和鸿蒙。
完成检查
- 我能解释 Flutter 共享的是代码和产品逻辑,而不是消灭平台差异。
- 我能举出两个适合共享的模块和两个需要平台适配的能力。
- 我知道 iOS 是课程主线,但最终验收包含 Android 和鸿蒙。