Flutter Event Channel发送事件后原生端没收到,是哪里配置错了?

Zz柚溪 阅读 30

最近在做Flutter和原生交互,用Event Channel传数据到Android端。按照文档写好了Flutter端的send方法,但Android监听就是收不到消息。

在Android端这样注册的:EventChannel(channelName).setStreamHandler(...),然后在Flutter端用:


eventChannel?.sink?.add({'status': 'online'});

测试时打日志发现,Flutter端的add方法确实执行了,但Android的onListen方法根本没有触发。试过把通道名称改错会报错,现在名字一致却不通,是不是流处理方式有问题?

我来解答 赞 5 收藏
二维码
手机扫码查看
1 条解答
夏侯家轩
你这问题我之前踩过,Event Channel 跟 Method Channel 不一样,不是调 add 就行的。关键是你没触发流的监听。

Flutter 的 EventChannel 要想让原生 onListen 触发,必须在 Dart 侧先有 listen 才行。你光用 sink?.add 发数据,没人监听这个流,原生根本不会收到事件,onListen 自然也不执行。

正确的流程是:Dart 这边要先 listen 一下这个 eventChannel,比如:

eventChannel.receiveBroadcastStream().listen((data) {
// 处理接收的数据,哪怕空实现也得 listen
});


只要 listen 一建立,Flutter 引擎就会通知原生端走 onListen,这时候你的 sink?.add 才能真正把事件推过去。

所以你现在的问题就是缺了 listen 这一步。add 是发数据,但前提是通道已经通过 listen 建立起来了。

简单说:先 listen 再 add,顺序不能反。你可以加个 dummy listen,哪怕不处理数据也得走一遍。
点赞 4
2026-02-10 09:07