【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开发
安卓与iOS开发中的跨平台解决方案:Flutter入门
【9月更文挑战第30天】在移动应用开发的广阔舞台上,安卓和iOS两大操作系统各自占据半壁江山。开发者们常常面临着选择:是专注于单一平台深耕细作,还是寻找一种能够横跨两大系统的开发方案?Flutter,作为一种新兴的跨平台UI工具包,正以其现代、响应式的特点赢得开发者的青睐。本文将带你一探究竟,从Flutter的基础概念到实战应用,深入浅出地介绍这一技术的魅力所在。
22 7
|
15天前
|
开发框架 搜索推荐 开发工具
打造个性化安卓应用:从零开始的Flutter之旅
【8月更文挑战第51天】本文是一篇面向初学者的Flutter入门教程,旨在通过简单易懂的语言和实际代码示例,引导读者步入跨平台移动应用开发的世界。文章首先介绍了Flutter的基本概念和优势,然后逐步展示了如何搭建开发环境、创建第一个Flutter应用,并实现了一个简单的待办事项列表。最后,文章探讨了Flutter在实现高性能和美观界面方面的潜力,鼓励读者发挥创意,探索更多可能。
66 15
|
8天前
|
Dart 开发工具 Android开发
在 Android 系统上搭建 Flutter 环境的具体步骤是什么?
在 Android 系统上搭建 Flutter 环境的具体步骤是什么?
|
19天前
|
开发框架 Dart 前端开发
Android 跨平台方案对比之Flutter 和 React Native
本文对比了 Flutter 和 React Native 这两个跨平台移动应用开发框架。Flutter 使用 Dart 语言,提供接近原生的性能和丰富的组件库;React Native 则基于 JavaScript,具备庞大的社区支持和灵活性。两者各有优势,选择时需考虑团队技能和项目需求。
107 8
|
26天前
|
安全 Android开发 开发者
探索安卓开发的未来:Kotlin的崛起与Flutter的挑战
在移动开发的广阔天地中,安卓平台始终占据着举足轻重的地位。随着技术的不断进步和开发者需求的多样化,Kotlin和Flutter成为了改变游戏规则的新玩家。本文将深入探讨Kotlin如何以其现代化的特性赢得开发者的青睐,以及Flutter凭借跨平台的能力如何挑战传统的安卓开发模式。通过实际案例分析,我们将揭示这两种技术如何塑造未来的安卓应用开发。
52 6
|
2月前
|
搜索推荐 IDE 开发工具
打造个性化安卓应用:从零开始的Flutter之旅
在数字时代的浪潮中,拥有一款个性化且高效的移动应用已成为许多创业者和企业的梦想。本文将引导你使用Flutter框架,从零基础开始构建一个安卓应用,不仅涉及界面设计、功能实现,还包括性能优化的关键技巧。通过简洁易懂的语言和实用的代码示例,我们将一起探索如何让你的应用在众多竞争者中脱颖而出。 【8月更文挑战第31天】
|
2月前
|
存储 开发工具 Android开发
打造你的专属安卓应用:从零开始的Flutter之旅
【8月更文挑战第31天】在数字时代的浪潮中,拥有一款属于自己的应用不仅是梦想的启航,也是技术实力的展现。本文将引导你使用Flutter框架,轻松步入安卓应用的开发世界。无论你是编程新手还是希望拓展技能边界的开发者,跟随这篇指南,你将学会如何搭建开发环境、设计用户界面,并实现基本功能。让我们一起探索代码的力量,开启一段创造之旅吧!
|
2月前
|
开发框架 Dart 搜索推荐
打造个性化安卓应用:从零开始的Flutter之旅
【8月更文挑战第31天】在数字化浪潮中,拥有一款个性化的移动应用是许多人的梦想。本文将引导你使用Flutter框架,快速入门安卓应用开发。我们会一起探索Flutter的基础概念,并通过一个简单的计数器应用示例,展示如何实现交互式界面。无论你是编程新手还是希望扩展技能边界的开发者,这篇文章都将为你开启一扇新窗,让你看到用代码创造美丽事物的无限可能。
|
2月前
|
存储 搜索推荐 Android开发
打造个性化安卓应用:从零开始的Flutter之旅
【8月更文挑战第31天】 在数字时代的浪潮中,移动应用成为连接用户与服务的桥梁。本文将引导你使用Flutter框架,从无到有构建一个具有独特风格的安卓应用,让你在编程的海洋里扬帆起航,探索个性化应用的秘密花园。我们将一步步揭开Flutter的神秘面纱,通过实例代码带你领略它的魅力所在。准备好了吗?让我们一起开启这段激动人心的旅程!
|
Dart Android开发
flutter开发中的几个小技巧
我的tabBar有一个StatelessWidget小部件,其中包含2个statefulWidgets。事实是,当单击管理器以查看我的所有选项卡时(默认情况下在我的第一个选项卡上登陆),tab1小部件生成器一直被调用。
147 0
下一篇
无影云桌面