原生调用:
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 = 消息到了" );
});