如何从Kotlin原生代码向Flutter发送流式数据?
解决Kotlin中EventChannel的StreamHandler类型不匹配问题
我用Method Channel实现了Flutter和原生的通信,但它只能单次发送数据,没法满足流式传输的需求。于是尝试改用EventChannel,结果遇到了类型不匹配错误:Type mismatch: inferred type is but EventChannel.StreamHandler! was expected,错误出现在object : StreamHandler()这一行。
我的代码如下:
EventChannel(flutterEngine.dartExecutor.binaryMessenger, STREAM ) .setStreamHandler( object : StreamHandler() { override fun onListen(args: Any?, events: EventChannel.EventSink) { Log.w(TAG_NAME, "Adding listener") } override fun onCancel(args: Any?) { Log.w(TAG_NAME, "Cancelling listener") } } )
另外我导入了import java.util.logging.StreamHandler这个类。
解决方案
问题出在你导入了错误的StreamHandler类——你用的是Java日志模块里的java.util.logging.StreamHandler,但EventChannel要求的是它自身内部定义的EventChannel.StreamHandler接口。
只需要把匿名类的实现改成EventChannel.StreamHandler即可,修正后的代码:
EventChannel(flutterEngine.dartExecutor.binaryMessenger, STREAM ) .setStreamHandler( object : EventChannel.StreamHandler { override fun onListen(args: Any?, events: EventChannel.EventSink) { Log.w(TAG_NAME, "Adding listener") } override fun onCancel(args: Any?) { Log.w(TAG_NAME, "Cancelling listener") } } )
同时记得删除错误的import java.util.logging.StreamHandler语句,这样就能解决类型不匹配的问题,正常实现流式数据传输了。
内容的提问来源于stack exchange,提问作者Shehzad Raheem
相关产品推荐
相关产品推荐

