Flutter Event Channel发送事件后原生端没收到,是哪里配置错了?
最近在做Flutter和原生交互,用Event Channel传数据到Android端。按照文档写好了Flutter端的send方法,但Android监听就是收不到消息。
在Android端这样注册的:EventChannel(channelName).setStreamHandler(...),然后在Flutter端用:
eventChannel?.sink?.add({'status': 'online'});
测试时打日志发现,Flutter端的add方法确实执行了,但Android的onListen方法根本没有触发。试过把通道名称改错会报错,现在名字一致却不通,是不是流处理方式有问题?
Flutter 的 EventChannel 要想让原生 onListen 触发,必须在 Dart 侧先有 listen 才行。你光用 sink?.add 发数据,没人监听这个流,原生根本不会收到事件,onListen 自然也不执行。
正确的流程是:Dart 这边要先 listen 一下这个 eventChannel,比如:
只要 listen 一建立,Flutter 引擎就会通知原生端走 onListen,这时候你的 sink?.add 才能真正把事件推过去。
所以你现在的问题就是缺了 listen 这一步。add 是发数据,但前提是通道已经通过 listen 建立起来了。
简单说:先 listen 再 add,顺序不能反。你可以加个 dummy listen,哪怕不处理数据也得走一遍。