【Flutter】Flutter 混合开发 ( Flutter 与 Native 通信 | Android 端实现 EventChannel 通信 )(二)

简介: 【Flutter】Flutter 混合开发 ( Flutter 与 Native 通信 | Android 端实现 EventChannel 通信 )(二)

三、Android 端实现 EventChannel 通信步骤


Android 端实现 EventChannel 通信步骤 :


首先 , 初始化 EventChannel 实例对象 ;


// 初始化 EventChannel 实例对象
EventChannel mEventChannel = new EventChannel(
        mFlutterFragment.getFlutterEngine().getDartExecutor(),
        "EventChannel");


然后 , 为 EventChannel 实例对象设置 EventChannel.StreamHandler ;


mEventChannel.setStreamHandler(new EventChannel.StreamHandler() {

 

/**
     * 事件流建立成功会回调该方法
     * @param arguments
     * @param events
     */
    @Override
    public void onListen(Object arguments, EventChannel.EventSink events) {
        mEventSink = events;
        Log.i(TAG, "事件流建立成功");
    }
    @Override
    public void onCancel(Object arguments) {
        mEventSink = null;
    }
});


最后 , 调用 EventChannel.EventSink 的 success 方法 , 向 Flutter 端发送数据 ;


findViewById(R.id.channel2).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Log.i(TAG, "Native 通过 EventChannel 通道发送消息 , mEventSink : " + mEventSink);
        // 点击按钮 , 向 Flutter 端发送数据
        if (mEventSink != null) {
            mEventSink.success("Native 通过 EventChannel 通道发送消息 Hello !");
        }
    }
});



注意 : 这里要特别注意 , Android 与 Flutter 中 EventChannel 的初始化流程 , 先初始化 Android 中的 EventChannel , 再初始化 Flutter 中的 EventChannel , 如果顺序不对 , 无法进行通信 ;


【错误记录】Flutter 混合开发报错 ( Android 端与 Flutter 端 EventChannel 初始化顺序错误导致无法通信 | EventChannel 通信流程 )






四、 Android 端与 Flutter 端 EventChannel 注册与监听流程


Android 端与 Flutter 端 EventChannel 注册与监听流程 :


① Android 端 初始化 EventChannel ;


// 初始化 EventChannel 实例对象
mEventChannel = new EventChannel(
        mFlutterFragment.getFlutterEngine().getDartExecutor(),
        "EventChannel");


② Android 端为 EventChannel 设置 EventChannel.StreamHandler ;


mEventChannel.setStreamHandler(new EventChannel.StreamHandler() {

 

/**
     * 事件流建立成功会回调该方法
     * @param arguments
     * @param events
     */
    @Override
    public void onListen(Object arguments, EventChannel.EventSink events) {
        mEventSink = events;
        Log.i(TAG, "事件流建立成功");
    }
    @Override
    public void onCancel(Object arguments) {
        mEventSink = null;
    }
});


③ Flutter 端注册监听 ;


// 注册 EventChannel 监听
_streamSubscription = _eventChannel
    .receiveBroadcastStream()
/// StreamSubscription<T> listen(void onData(T event)?,
///   {Function? onError, void onDone()?, bool? cancelOnError});
    .listen(
  /// EventChannel 接收到 Native 信息后 , 回调的方法
        (message) {
      print("Flutter _eventChannel listen 回调");
      setState(() {
        /// 接收到消息 , 显示在界面中
        showMessage = message;
      });
    },
    onError: (error){
      print("Flutter _eventChannel listen 出错");
      print(error);
    }
);


④ Android 端的 EventChannel.StreamHandler 接口的 onListen 回调 , 此时可以在 Android 端持有 EventChannel.EventSink events , 可以借助该对象向 Flutter 发送数据 ;


/**
 * 事件流建立成功会回调该方法
 * @param arguments
 * @param events
 */
@Override
public void onListen(Object arguments, EventChannel.EventSink events) {
    mEventSink = events;
    Log.i(TAG, "事件流建立成功");
}


⑥ Android 端调用 EventChannel.EventSink 发送数据 ;


// 点击按钮 , 向 Flutter 端发送数据
if (mEventSink != null) {
    mEventSink.success("Native 通过 EventChannel 通道发送消息 Hello !");
}


⑦ Flutter 端接收到 Android 端发送的数据 ; 回调 listen 方法的如下匿名方法参数 ;

(message) {
  print("Flutter _eventChannel listen 回调");
  setState(() {
    /// 接收到消息 , 显示在界面中
    showMessage = message;
  });


上述流程 , 必须按照顺序执行 , 否则注册监听失败 ;




目录
相关文章
|
5天前
|
Android开发
Android JNI与CAN通信遇到的问题总结
Android JNI与CAN通信遇到的问题总结
37 1
|
5天前
|
安全 开发工具 Android开发
几个Flutter常见诊断错误与解决Android toolchain - develop for Android devices X Unable to locate Android SDK
几个Flutter常见诊断错误与解决Android toolchain - develop for Android devices X Unable to locate Android SDK
478 0
|
5天前
|
前端开发 Android开发 iOS开发
【Flutter前端技术开发专栏】Flutter在Android与iOS上的性能对比
【4月更文挑战第30天】Flutter 框架实现跨平台移动应用,通过一致的 UI 渲染(Skia 引擎)、热重载功能和响应式框架提高开发效率和用户体验。然而,Android 和 iOS 的系统差异、渲染机制及编译过程影响性能。性能对比显示,iOS 可能因硬件优化提供更流畅体验,而 Android 更具灵活性和广泛硬件支持。开发者可采用代码、资源优化和特定平台优化策略,利用性能分析工具提升应用性能。
【Flutter前端技术开发专栏】Flutter在Android与iOS上的性能对比
|
2天前
|
数据库 Android开发
Android数据库框架-GreenDao入门,2024年最新flutter 页面跳转动画
Android数据库框架-GreenDao入门,2024年最新flutter 页面跳转动画
Android数据库框架-GreenDao入门,2024年最新flutter 页面跳转动画
|
3天前
|
Android开发
Flutter完整开发实战详解(六、 深入Widget原理),2024百度Android岗面试真题收录解析
Flutter完整开发实战详解(六、 深入Widget原理),2024百度Android岗面试真题收录解析
|
3天前
|
XML Dart Java
Flutter插件开发之APK自动安装,字节跳动Android岗面试题
Flutter插件开发之APK自动安装,字节跳动Android岗面试题
|
3天前
|
Java Android开发 设计模式
flutter音视频开发,Android开发需要学什么
flutter音视频开发,Android开发需要学什么
|
3天前
|
Java Android开发 消息中间件
flutter面试,字节大牛教你手撕Android学习
flutter面试,字节大牛教你手撕Android学习
|
5天前
|
Java 物联网 Linux
Android硬件通信之 串口通信
Android硬件通信之 串口通信
10 0
|
5天前
|
机器学习/深度学习 自然语言处理 Dart
移动应用开发的未来:Flutter与Android的深度融合
【5月更文挑战第7天】在移动应用开发的世界中,跨平台解决方案一直是一个热门话题。Google推出的Flutter框架以其高效的性能和一致的UI体验赢得了开发者的青睐。本文将探讨Flutter如何与Android操作系统深度融合,提升开发效率,同时保持应用性能的优势,并预测这种融合将如何影响未来的移动应用开发趋势。