美文网首页
flutter和原生iOS,android通信EventChan

flutter和原生iOS,android通信EventChan

作者: 守护浪漫的小香樟 | 来源:发表于2024-05-19 09:49 被阅读0次

flutter和原生iOS,android通信分为一次性通信(一问一答)MethodChannel和持续通信(一次调用多次传值) EventChannel.
EventChannel通常应用于在flutter端进行监听, 当原生端有什么变化。比如随着时间推移数据产生了变化需要持续性的更新数据

一、flutter端注册和调用
1、引入

const platformEvent = EventChannel("flutterEventChannel");

2、注册监听
注册回调方法, 原生有回调会持续在此监听中获取值

platformEvent.receiveBroadcastStream("init").listen((event) {
       // 比如event可能是一个json字符串
      },
      onError: (e){
      },
      onDone: () {
  }); 

二、iOS端注册和回调
1、声明FlutterEventChannel

var eventChannel: FlutterEventChannel?
// 需要回调时使用
var enentSink:FlutterEventSink?

2、实现FlutterEventChannel

eventChannel = FlutterEventChannel(name: "flutterEventChannel", binaryMessenger: controller.binaryMessenger)
        eventChannel?.setStreamHandler(self)

3、实现FlutterStreamHandler代理

func onListen(withArguments arguments: Any?, eventSink events: @escaping FlutterEventSink) -> FlutterError? {
        enentSink = events
        return nil;
    }
    
    func onCancel(withArguments arguments: Any?) -> FlutterError? {
        enentSink = nil
        return nil;
    }

4、开始回调
在需要的地方把值传递给flutter

enentSink?("要传递的信息X")

三、android端注册和回调
1、声明EventSink

private EventChannel.EventSink eventSink;

2、注册和实现代理方法

new EventChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), "flutterEventChannel")
                .setStreamHandler(
                        new EventChannel.StreamHandler() {
                            @Override
                            public void onListen(Object arguments, EventChannel.EventSink events) {
                                eventSink = events;
                            }
                            @Override
                            public void onCancel(Object arguments) {
                                eventSink = null;
                            }
                        }
                );

3、在需要的地方进行回调传值给flutter

eventSink.success(inout);

四、相对于一次性传值, 持续性传值的使用还是比较少的
MethodChannel和EventChannel同时掌握后配合使用效果更佳
场景:
1、MethodChannel启动某个耗时操作, 2、利用EventChannel来传输耗时操作的进度变化

相关文章

网友评论

      本文标题:flutter和原生iOS,android通信EventChan

      本文链接:https://www.haomeiwen.com/subject/cgbgfjtx.html