
适合谁看会 Flutter但不熟 HarmonyOS Stage 模型的人看到 Ability 概念就有点混乱的人想理解壳工程为什么这样组织的人问题背景Flutter 开发者更熟悉的是页面路由Widget 生命周期而鸿蒙 Stage 模型引入的是另一套系统层概念AbilityWantExtensionAbilityWindowStage如果不先理解它们的角色很多壳工程文件就会看起来像“额外负担”。但实际上它们解决的是 Flutter 自己并不直接负责的系统入口问题。项目中的真实场景食界探味当前正好能把 Stage 模型里最关键的几种角色都对出来EntryAbility.ets承接主启动InsightIntentExecutorImpl.ets承接系统意图入口DailyRecommendFormAbility.ets承接卡片能力Index.ets承接 Flutter 页面容器这意味着我们不需要抽象讨论 Stage 模型而是可以直接回到真实文件理解它。核心实现先给一个最重要的判断Stage 模型下Flutter 页面只负责应用内体验系统怎么把用户、参数和上下文送进来要先靠 Ability 体系承接。只要先记住这句话后面很多概念就不会再混。一、什么是 Ability如果用 Flutter 开发者更容易接受的方式来类比Ability 不是 Widget也不是页面组件。它更像鸿蒙系统里承接应用能力和入口的单位。在食界探味里EntryAbility.ets就是最典型的主 Ability。它负责的不是渲染某个业务页面而是配置 Flutter 引擎注册插件接住系统传进来的参数处理应用被再次唤起时的新入口请求所以你可以把 Ability 理解成系统入口承接者生命周期协调者Flutter 运行环境的上层宿主二、什么是 Want在普通 Flutter App 里我们更常见的是页面参数路由参数深链接参数但在鸿蒙 Stage 模型里系统和 Ability 之间更常用的是Want。在食界探味的EntryAbility.ets里可以直接看到onCreate(want, launchParam)onNewWant(want, launchParam)这里的want.parameters里会带上像pageIddishId这说明Want本质上是系统把外部入口信息送进应用的载体。它不是普通页面参数而是更靠近系统入口协议的一层东西。三、为什么onCreate和onNewWant都很重要这是很多 Flutter 开发者第一次读 Ability 代码时最容易忽略的地方。在食界探味里onCreate用来接应用首次启动时带进来的参数onNewWant用来接应用运行过程中再次到来的入口请求比如在onNewWant里代码会判断当前有没有pageIdIntentNavigationPlugin实例是否已经可用如果可用就直接导航如果还没 ready就先缓存成 pending navigation这和普通 Flutter 路由最大的不同就在于路由不是总从页面内部发生的系统可能随时把新入口送进来。这正是 Stage 模型存在感最强的地方。四、WindowStage说明什么在EntryAbility.ets里onWindowStageCreate(windowStage)这段逻辑也很值得注意。它做的是获取主窗口设置全屏布局关闭系统栏显示这说明 Ability 除了处理入口还会和窗口、界面容器这些系统层概念打交道。而这些内容在普通 Flutter 业务层里通常并不会出现。所以从工程上看Stage 模型下的壳工程并不只是“启动 Flutter”它还负责管理 Flutter 所在的系统窗口环境。五、什么是 ExtensionAbility如果 Ability 负责主入口那 ExtensionAbility 更像“扩展入口”。在食界探味里最典型的就是DailyRecommendFormAbility.ets它继承的是FormExtensionAbility负责的是卡片场景下的生命周期例如onAddFormonUpdateFormonRemoveFormonFormEvent这说明卡片不是普通页面也不是普通 Flutter 页面变体。它是 Stage 模型下另一种由系统调度的扩展能力入口。六、为什么InsightIntentExecutorImpl.ets也应该放进 Stage 模型里理解很多人第一次看InsightIntentExecutorImpl.ets会把它误解成“一个普通导航工具类”。但从职责上看它更像系统入口承接者。它主要做的事情包括判断系统传来的 intent 名称校验pageId和dishId把系统入口转成 Flutter 可消费的导航数据在 Flutter 还没 ready 时先存 pending navigation这说明它不是页面层逻辑而是典型的 Stage 模型入口层逻辑。七、Index.ets为什么也属于壳工程理解的一部分Index.ets的代码不多但它帮助我们补齐了一个关键认知Ability 承接系统入口Index.ets承接页面容器FlutterPage真正把 Flutter 视图挂进来所以 Stage 模型下的 Flutter 鸿蒙壳工程并不是一个文件解决所有问题而是至少分成Ability 层容器页面层插件层扩展能力层关键代码位置app/ohos/entry/src/main/ets/entryability/EntryAbility.etsapp/ohos/entry/src/main/ets/entryability/InsightIntentExecutorImpl.etsapp/ohos/entry/src/main/ets/formability/DailyRecommendFormAbility.etsapp/ohos/entry/src/main/ets/pages/Index.etsapp/ohos/entry/src/main/module.json5鸿蒙侧实现从鸿蒙侧看Stage 模型至少带来了三类非常明确的入口角色主 AbilityEntryAbility系统意图入口InsightIntentExecutorImpl卡片扩展入口DailyRecommendFormAbility这三者共同说明HarmonyOS 项目的入口不是单点而是一组由系统调度的能力入口。Flutter 侧实现从 Flutter 侧看最重要的不是去模仿这些概念而是认清分工Flutter 路由负责应用内导航Flutter 页面负责业务和展示系统入口、外部参数、窗口和扩展能力先由 Stage 模型承接只有这样Flutter 页面层才不会被系统入口细节污染。常见坑把 Ability 误当成普通页面概念只从 Flutter 页面角度理解整个壳工程看到Want就把它等同于普通路由参数没意识到onNewWant处理的是“应用运行中再次进入”的入口问题把卡片能力误看成普通 Flutter 页面的一种缩略版可复用模板Stage 模型下的最小理解顺序 1. Ability 是系统入口单位 2. Want 是系统传参载体 3. ExtensionAbility 是扩展入口 4. Flutter 路由只是应用内承接层食界探味里的对应关系 EntryAbility → 主启动入口 InsightIntentExecutorImpl → 系统意图入口 DailyRecommendFormAbility → 卡片入口 Index.ets → Flutter 页面容器本篇总结Stage 模型下的 Flutter 鸿蒙壳工程不是简单的“Flutter 外面包一层 ArkTS”。它更准确的理解方式应该是Ability 体系先承接系统入口容器页面把 Flutter 挂进系统页面里扩展能力继续承接卡片和意图等系统场景只要先把这套入口分工理解清楚后面再看插件、Intent、卡片和权限处理时就不会总把它们误判成普通页面逻辑了。