harmony_flutter_通信二

HarmonyOS next之Flutter与鸿蒙原生交互二

flutter 有三种基础的通道

  • MethodChannel:主要方式,调用原生方法并接收返回值,适合一次性调用。
  • EventChannel事件流/数据流的持续通信,如监听传感器数据。
  • BasicMessageChannel:传递 字符串或二进制信息,适合 双向通信快速连续传递简单数据

BasicMessageChannel(双向通道)

1.flutter端代码

  • 创建BasicMessageChannel通道
  • 调用平台创建方法接收回调参数
// 创建实例
final _basicChannel = const BasicMessageChannel(
      "flutter.ohos.example/base_test", StandardMessageCodec());
// 调用方法,获取平台侧的返回值
final String? reply = await _basicChannel.send('increment');

2.ohos端代码

  • 继承FlutterPlugin实现onAttachedToEngine方法
  • 创建BasicMessageChannel实例(名字需要与flutter端保持一致)
  • onMessage回调中监听回调方法
  • reply 回传参数
export default class TestPlugin implements FlutterPlugin {// 继承FlutterPlugin
  
  private basicChannel?: BasicMessageChannel<Any>;
  
  private counter = 0 ;
  
  onAttachedToEngine(binding: FlutterPluginBinding): void {
  	this.basicChannel = new BasicMessageChannel(binding.getBinaryMessenger(),"flutter.ohos.example/base_test", new StandardMessageCodec());
    this.basicChannel.setMessageHandler({
      onMessage(message: Any, reply: Reply<Any>) {
        Log.i(TAG, "收到Flutter端的信息,当前计数器值: $counter");
        // 处理来自 Flutter 的消息
             counter++
             reply.reply("计数器值: $counter")
      }
    })
  }
}

EventChannel(事件监听)

1.flutter端代码

  • 创建MethodChannel通道
  • 调用平台创建方法接收回调参数
// 创建实例
final _eventChannel = const EventChannel('flutter.ohos.example/event_test');
// 监听事件回调
_eventChannel.receiveBroadcastStream().listen((event) {
	  print("EventChannel event=$event")
    });

2.ohos端代码

  • 继承FlutterPlugin实现onAttachedToEngine方法
  • 创建EventChannel实例(名字需要与flutter端保持一致)
  • 设置eventSink
  • 使用eventSink 发送数据到flutter层
export default class TestPlugin implements FlutterPlugin {// 继承FlutterPlugin
  
  private eventChannel?: EventChannel;
  private eventSink?: EventSink;
  
  onAttachedToEngine(binding: FlutterPluginBinding): void {
  	this.eventChannel = new EventChannel(binding.getBinaryMessenger(), "flutter.ohos.example/event_test");
    this.eventChannel.setStreamHandler({
      onListen(args: Any, events: EventSink): void {
        that.eventSink = events;
      },
      onCancel(args: Any): void {
        that.eventSink = undefined;
      }
    });
  }
}

发送数据

// ...
// 使用 EventSink 发送数据后,dart断的事件监听回调会收到发送的数据。
that.eventSink?.success("eventSink message ");
### FlutterHarmonyOS集成教程 #### 创建项目结构 为了实现FlutterHarmonyOS的混合开发,首先需要准备一个支持多平台的Flutter项目。在命令行中执行如下操作来初始化一个新的Flutter项目: ```bash flutter create harmony_flutter_app cd harmony_flutter_app ``` 这会建立一个基础的Flutter应用程序框架。 #### 配置DevEco Studio 对于鸿蒙操作系统特有的功能调用和支持,推荐使用官方提供的[HUAWEI DevEco Studio](https://developer.harmonyos.com/cn/docs/documentation/doc-guides/studio_download-0000001053897246),该工具专门为鸿蒙生态定制化设计[^3]。安装完成后,在`File -> New -> Import Project...`导入之前创建好的Flutter项目文件夹路径下的`.idea`目录,以便于后续针对鸿蒙特性的优化调整工作。 #### 添加依赖项 编辑项目的`pubspec.yaml`文件,加入必要的包管理器声明以及任何可能需要用到的第三方库。特别是要确保包含了能够处理跨平台通信和服务访问的相关插件,比如用于网络请求、本地存储等功能模块的支持。 ```yaml dependencies: flutter: sdk: flutter # Add other dependencies here... dev_dependencies: flutter_test: sdk: flutter ``` 同时还需要修改`build.gradle`中的配置以适应鸿蒙环境的要求,具体可以参照文档说明完成相应设置[^1]。 #### 实现页面交互逻辑 编写Dart代码定义UI组件及其行为模式,利用StatefulWidget或Provider等状态管理模式保持界面更新同步。考虑到性能因素,建议尽可能减少不必要的重建次数,并合理规划异步任务调度机制。 ```dart import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Harmony & Flutter Demo', theme: ThemeData(primarySwatch: Colors.blue), home: Scaffold( appBar: AppBar(title: Text('Home Page')), body: Center(child: Text('Welcome to HarmonyOS with Flutter!')), ), ); } } ``` 以上是一个简单的例子展示如何构建初始视图层次结构;实际应用场景下还需进一步扩展和完善业务流程控制部分。 #### 测试与部署 最后一步是对整个解决方案进行全面测试验证其稳定性和兼容性表现良好之后再考虑正式上线发布事宜。借助模拟器或者真实设备来进行全方位的功能检测是非常重要的环节之一。此外也可以尝试接入一些自动化持续集成/交付(CI/CD)管道提高效率降低人为错误风险。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值