flutter:EventChannel 原生发送通知给flutter端

原生调用:

 EventChannelManager.onBackPressed();
package com.example.flutterdemo;

import java.util.HashMap;
import java.util.Map;

import io.flutter.plugin.common.BinaryMessenger;
import io.flutter.plugin.common.EventChannel;

/**
 * Created by malei on 5/14/21
 * Describe:
 */
public class EventChannelManager {
    private static EventChannelManager sharedInstance;
    private static String CHANNEL_NAME = "com.malei.comic/nativeEvent";
    private EventChannel channel;
    private EventChannel.EventSink eventSink;

    public static void init(BinaryMessenger messenger) {
        if (sharedInstance == null) {
            sharedInstance = new EventChannelManager();
            sharedInstance.initChannels(messenger);
        }
    }

    private void initChannels(BinaryMessenger messenger) {
        channel = new EventChannel(messenger, CHANNEL_NAME);
        channel.setStreamHandler(new EventChannel.StreamHandler() {
            @Override
            public void onListen(Object o, EventChannel.EventSink eventSink) {
                EventChannelManager.this.eventSink = eventSink;
            }

            @Override
            public void onCancel(Object o) {
                EventChannelManager.this.eventSink = null;
            }
        });
    }

    public static void sendEvent(Map<Object, Object> event) {
        assert (sharedInstance != null);
        if (sharedInstance.eventSink != null) {
            sharedInstance.eventSink.success(event);
        }
    }

    public static void onBackPressed() {
        HashMap<Object, Object> map = new HashMap<>();
        map.put("eventName", "BackPressed");
        sendEvent(map);
    }

}

App中初始化

FlutterEngine flutterEngine = FlutterBoost.instance().engineProvider();
BinaryMessenger messenger = flutterEngine.getDartExecutor();

EventChannelManager.init(messenger);

flutter端接收消息:


import 'package:event_bus/event_bus.dart';
import 'package:flutter/services.dart';

///原生发送的消息
class EventBusHelper extends EventBus {
  static EventBusHelper _instance = null;
  static EventChannel _platformEvent = null;// EventChannel('com.iqiyi.comic/nativeEvent');

  static EventBusHelper getInstance() {
    if (_instance == null) {
      _instance = EventBusHelper();
      _platformEvent = EventChannel('com.malei.comic/nativeEvent');
      _platformEvent.receiveBroadcastStream().listen(_instance._onNativeEvent);
    }
    return _instance;
  }

  void _onNativeEvent(Object event) {
    if (event == null) {
      return;
    }
    Map map = event as Map;
    String eventName = map['eventName'];
    if (eventName == 'BackPressed') {
      print("MALEI = xxxxx");
      fire("event");
    } else if (eventName == 'readerPayResult') {
      
    }
  }
}

使用了eventBus做了消息总线

event_bus: ^1.1.1

最后再flutter页面,添加eventbus监听就可以了:

 _backPressedSubscription = EventBusHelper.getInstance().on<Object>().listen((event) {
      print("MALEI = 消息到了" );
    });

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值