HarmonyOS鸿蒙Next中flutter_native_splash有鸿蒙版的不?
HarmonyOS鸿蒙Next中flutter_native_splash有鸿蒙版的不? flutter_native_splash 这个有鸿蒙版的不?
目前没有直接适配鸿蒙的 flutter_native_splash 官方版本
flutter_native_splash 这款官方 / 社区主流的 Flutter 启动页插件暂未原生支持鸿蒙(HarmonyOS) —— 该插件的核心逻辑是为 Android/iOS 自动生成原生启动页配置(如 Android 的 drawable/values、iOS 的 LaunchScreen.storyboard),但未适配鸿蒙的原生工程结构和启动页配置规则。
不过鸿蒙(尤其是 OpenHarmony/HarmonyOS NEXT)对 Flutter 应用的支持是通过原生工程嵌套 Flutter 模块实现的,因此可以通过手动配置鸿蒙原生启动页的方式,达到和 flutter_native_splash 一致的效果,以下是具体实现方案:
核心思路
Flutter 鸿蒙应用的启动页本质是鸿蒙原生 Ability 的启动界面,只需在鸿蒙原生工程中配置闪屏页,即可替代 flutter_native_splash 的功能,步骤如下:
步骤 1:准备鸿蒙启动页资源
鸿蒙启动页图片需适配不同设备尺寸,建议准备以下规格(以竖屏为例):
| 设备类型 | 图片尺寸(宽 × 高,px) | 存放路径(鸿蒙工程) |
|---|---|---|
| 手机(通用) | 1080×2400 | entry/src/main/resources/base/media/ |
| 平板(通用) | 1920×1200 | entry/src/main/resources/tablet/media/ |
| 深色模式适配 | 对应尺寸的深色图 | entry/src/main/resources/base/dark/media/ |
注意:图片格式推荐
png/jpg,命名建议:splash_bg.png(避免中文 / 特殊字符)。
步骤 2:配置鸿蒙启动页布局
在鸿蒙原生工程中创建启动页布局文件,替代默认的空白启动界面:
- 进入 Flutter 项目的鸿蒙工程目录:
your_flutter_project/harmony/entry/src/main/resources/base/layout/; - 创建 / 修改
splash_layout.xml(无则新建):
<?xml version="1.0" encoding="utf-8"?>
<DirectionalLayout
xmlns:ohos="http://schemas.huawei.com/res/ohos"
ohos:width="match_parent"
ohos:height="match_parent"
ohos:orientation="vertical"
ohos:background_element="$media/splash_bg"> <!-- 引用启动页背景图 -->
<!-- 可选:添加应用logo/文字 -->
<Image
ohos:width="120vp"
ohos:height="120vp"
ohos:layout_alignment="center"
ohos:top_margin="200vp"
ohos:image_src="$media/app_logo"/>
<Text
ohos:width="match_content"
ohos:height="match_content"
ohos:layout_alignment="center"
ohos:top_margin="20vp"
ohos:text="你的应用名称"
ohos:text_size="30fp"
ohos:text_color="#FFFFFF"/>
</DirectionalLayout>
步骤 3:修改 Ability 配置,绑定启动页
- 打开鸿蒙工程的
entry/src/main/module.json5(或module.json); - 找到主 Ability(通常是
MainAbility)的配置,添加启动页相关配置:
{
"module": {
"abilities": [
{
"name": ".MainAbility",
"srcEntry": "./ets/MainAbility/MainAbility.ts",
"description": "$string:main_ability_desc",
"icon": "$media:icon",
"label": "$string:app_name",
"type": "page",
"launchType": "standard",
// 关键:配置启动页
"splashScreen": {
"backgroundColor": "#FFFFFF", // 启动页背景色(图片加载前的兜底)
"layout": "$layout:splash_layout", // 绑定步骤2的布局文件
"duration": 3000, // 启动页显示时长(ms),0则自动跟随Flutter初始化完成
"alwaysShowBeforeEnterHome": true // 确保启动页显示完成后再进入Flutter页面
},
"metadata": [
{
"name": "flutterEmbedding",
"value": "2"
}
]
}
]
}
}
步骤 4:适配 Flutter 初始化衔接
若希望启动页时长跟随 Flutter 初始化(而非固定时长),可将 duration 设为 0,并在鸿蒙原生 Ability 中监听 Flutter 初始化完成事件:
// entry/src/main/ets/MainAbility/MainAbility.ts
import Ability from '@ohos.application.Ability';
import window from '@ohos.window';
export default class MainAbility extends Ability {
onWindowStageCreate(windowStage: window.WindowStage) {
super.onWindowStageCreate(windowStage);
// 隐藏启动页,进入Flutter页面
windowStage.loadContent('pages/flutter_page', (err) => {
if (err) {
console.error('加载Flutter页面失败:', err);
}
});
}
}
补充说明
- 社区适配版插件:目前暂无成熟的「鸿蒙版 flutter_native_splash」插件,上述手动配置是主流方案,效果与插件一致;
- HarmonyOS NEXT 适配:若基于鸿蒙纯血版(NEXT)开发,配置逻辑一致,仅需注意资源目录需符合 NEXT 的规范(如
resources/rawfile替代部分旧目录); - 多主题适配:如需适配深浅色模式,可在
splash_layout.xml中通过ohos:element="$color/splash_bg"引用主题色,或在不同主题目录下放置对应图片; - 启动页优化:建议将启动页图片做压缩处理,避免因资源过大导致启动页卡顿。
综上,虽然 flutter_native_splash 无鸿蒙版,但通过手动配置鸿蒙原生启动页,完全可以实现相同的闪屏效果,且适配性更贴合鸿蒙系统特性。
目前没有
没有,
但可以通过鸿蒙原生能力实现同等效果。以下是完整解决方案:
鸿蒙启动页实现方案
原生启动页配置
在 module.json5中声明启动参数(必填项):
"abilities": [{
"name": "EntryAbility",
"srcEntry": "./ets/entryability/EntryAbility.ets",
"startWindowIcon": "$media:icon", // 启动图标
"startWindowBackground": "$color:primary" // 启动背景色
}]
FlutterPage 自定义闪屏
在 ArkTS 入口文件中添加过渡闪屏:
@Entry
@Component
struct Index {
private viewId: string = 'flutterView'
// 自定义闪屏构建器
@Builder
splashScreenViewShow() {
Stack() {
Image($r('app.media.splash_bg')) // 闪屏背景图
.width('100%')
.height('100%')
Text('Loading...')
.fontSize(24)
.fontColor(Color.White)
.align(Alignment.Center)
}
}
build() {
Column() {
FlutterPage({
viewId: this.viewId,
showSplashScreen: true, // 启用闪屏
splashScreenView: this.splashScreenViewShow // 绑定自定义视图
})
}
}
}
关键注意事项
平滑过渡技巧
- startWindowBackground颜色需与自定义闪屏背景一致
- 在 splashScreenViewShow中使用与原生启动页相同的主题元素
生命周期控制
通过 FlutterEngine的 onFlutterUiDisplayed事件隐藏闪屏:
FlutterPage({...})
.onFlutterUiDisplayed(() => {
// 此处关闭自定义闪屏
})
目前Flutter官方尚未发布专为HarmonyOS Next适配的flutter_native_splash鸿蒙版本。该插件主要支持Android和iOS平台。在HarmonyOS Next上运行Flutter应用时,启动屏需通过鸿蒙原生开发方式实现,可考虑使用鸿蒙的Splash Screen能力进行定制。
目前,HarmonyOS Next 官方尚未提供 flutter_native_splash 的鸿蒙专用版本。该插件主要针对 Android 和 iOS 平台进行启动屏适配。
若需要在 HarmonyOS Next 上实现类似启动屏效果,建议通过以下方式:
- 使用 Flutter 原生方式:在 Flutter 项目中通过
SplashScreen相关 Widget 自行实现启动页,确保其能兼容鸿蒙的渲染机制。 - 鸿蒙原生配置:若应用为鸿蒙原生开发,可在
resources/base/media中配置splash_screen图片资源,并在module.json5中设置启动页属性。 - 关注生态进展:随着 HarmonyOS Next 对 Flutter 支持的完善,后续可能会有适配鸿蒙的第三方插件出现,建议关注官方开发文档或社区更新。
当前阶段,跨平台方案仍需以 Flutter 兼容性为主,并针对鸿蒙系统进行启动屏的单独测试与调整。


