HarmonyOS鸿蒙Next中flutter_native_splash有鸿蒙版的不?

HarmonyOS鸿蒙Next中flutter_native_splash有鸿蒙版的不? flutter_native_splash 这个有鸿蒙版的不?

8 回复

更多关于HarmonyOS鸿蒙Next中flutter_native_splash有鸿蒙版的不?的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


目前没有直接适配鸿蒙的 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:配置鸿蒙启动页布局

在鸿蒙原生工程中创建启动页布局文件,替代默认的空白启动界面:

  1. 进入 Flutter 项目的鸿蒙工程目录:your_flutter_project/harmony/entry/src/main/resources/base/layout/
  2. 创建 / 修改 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 配置,绑定启动页

  1. 打开鸿蒙工程的 entry/src/main/module.json5(或 module.json);
  2. 找到主 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);
      }
    });
  }
}

补充说明

  1. 社区适配版插件:目前暂无成熟的「鸿蒙版 flutter_native_splash」插件,上述手动配置是主流方案,效果与插件一致;
  2. HarmonyOS NEXT 适配:若基于鸿蒙纯血版(NEXT)开发,配置逻辑一致,仅需注意资源目录需符合 NEXT 的规范(如 resources/rawfile 替代部分旧目录);
  3. 多主题适配:如需适配深浅色模式,可在 splash_layout.xml 中通过 ohos:element="$color/splash_bg" 引用主题色,或在不同主题目录下放置对应图片;
  4. 启动页优化:建议将启动页图片做压缩处理,避免因资源过大导致启动页卡顿。

综上,虽然 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 上实现类似启动屏效果,建议通过以下方式:

  1. 使用 Flutter 原生方式:在 Flutter 项目中通过 SplashScreen 相关 Widget 自行实现启动页,确保其能兼容鸿蒙的渲染机制。
  2. 鸿蒙原生配置:若应用为鸿蒙原生开发,可在 resources/base/media 中配置 splash_screen 图片资源,并在 module.json5 中设置启动页属性。
  3. 关注生态进展:随着 HarmonyOS Next 对 Flutter 支持的完善,后续可能会有适配鸿蒙的第三方插件出现,建议关注官方开发文档或社区更新。

当前阶段,跨平台方案仍需以 Flutter 兼容性为主,并针对鸿蒙系统进行启动屏的单独测试与调整。

回到顶部