HarmonyOS 鸿蒙Next中怎么获取到flutter加载完毕或者引擎启动后的状态

HarmonyOS 鸿蒙Next中怎么获取到flutter加载完毕或者引擎启动后的状态 需要在flutter应用启动后通知鸿蒙端做出事件,用通道通知的话必须得等flutter引擎加载,怎样在鸿蒙端获取到flutter引擎加载后的状态或者是flutter页面加载完毕的状态?

3 回复

您好,您可以尝试以下方法

在HarmonyOS项目EntryAbility.ets文件的configureFlutterEngine函数中获取。

import { FlutterAbility, FlutterEngine, Log } from '@ohos/flutter_ohos';
import { GeneratedPluginRegistrant } from '../plugins/GeneratedPluginRegistrant';

export default class EntryAbility extends FlutterAbility {
  configureFlutterEngine(flutterEngine: FlutterEngine) {
    super.configureFlutterEngine(flutterEngine)
    GeneratedPluginRegistrant.registerWith(flutterEngine)
    Log.i('EntryAbility', 'Flutter 引擎已连接');
    // 在此处做下一步业务操作
  }
}

更多关于HarmonyOS 鸿蒙Next中怎么获取到flutter加载完毕或者引擎启动后的状态的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在HarmonyOS Next中,可通过Flutter侧使用WidgetsBinding监听didChangeAppLifecycleState状态变化,当状态变为AppLifecycleState.resumed时表示Flutter页面已加载完成。同时,利用FlutterEngineaddEngineLifecycleListener方法监听onEngineWillDestroyonEngineDidDestroy回调,可判断引擎启动与销毁状态。鸿蒙侧通过Flutter插件机制与HarmonyOS生命周期事件结合,调用FlutterEnginegetLifecycleChannel方法发送状态消息,实现跨平台状态同步。

在HarmonyOS Next中,可以通过Flutter侧主动通知的方式获取引擎启动状态。具体实现如下:

  1. Flutter端:在main()函数或首页初始化完成后,通过MethodChannel向HarmonyOS端发送状态通知:
// Flutter端代码
import 'package:flutter/services.dart';

final MethodChannel _channel = MethodChannel('flutter_engine_channel');

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 模拟引擎加载完成
  Future.delayed(Duration.zero, () {
    _channel.invokeMethod('engineStarted');
  });
  
  runApp(MyApp());
}
  1. HarmonyOS端:注册MethodChannel监听器接收状态通知:
// HarmonyOS端代码
import { UIAbility, AbilityConstant, methodChannel, Want } from '@kit.AbilityKit';

const CHANNEL_NAME = 'flutter_engine_channel';

export default class EntryAbility extends UIAbility {
  onWindowStageCreate(windowStage: window.WindowStage) {
    // 注册MethodChannel
    methodChannel.on(this.context, {
      name: CHANNEL_NAME,
      methods: ['engineStarted']
    }, (method, data) => {
      if (method === 'engineStarted') {
        // 收到Flutter引擎启动完成通知
        console.info('Flutter engine started successfully');
        // 执行后续业务逻辑
      }
      return null;
    });
  }
}

这种方式通过Flutter主动回调确保状态同步的准确性,避免了轮询检查带来的性能损耗。注意保持两端定义的Channel名称一致即可实现可靠的状态通知。

回到顶部