我目前正在学习 Flutter,特别是与设备本身进行通信。
目前我已经设置了一个 MethodChannel,我收到一个字符串列表作为结果,但现在我想将其更改为通过 EventChannel 在流上接收这些字符串。
我知道我仍然必须依靠 MethodChannel 来触发 android 端的方法,然后通过 EventChannel 将数据(在我的情况下为字符串)发送回颤振。但我真的不知道如何让 EventChannel 只发送几个流(它们之间可能会有一点延迟..),因为我发现的每个关于 EventChannel 的教程都比对我的帮助更令人困惑:(
这是我目前通过 EventChannel 获取内容的代码:
颤振插件:
static const EventChannel messageChannel = EventChannel('eventChannelStream');
Stream<String> get messageStream async* {
messageChannel.receiveBroadcastStream().map((message) {
return message;
});
}
android端的Kotlin代码:
class HelperPlugin : FlutterPlugin, MethodCallHandler, EventChannel.StreamHandler {
private lateinit var channel: MethodChannel
private var messageChannel: EventChannel? = null
private var eventSink: EventChannel.EventSink? = null
override fun onListen(arguments: Any?, eventSink: EventChannel.EventSink?) {
this.eventSink = eventSink
}
override fun onCancel(arguments: Any?) {
eventSink = null
messageChannel = null
}
override fun onAttachedToEngine(@NonNull flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) {
channel = MethodChannel(flutterPluginBinding.binaryMessenger, "methodChannel")
channel.setMethodCallHandler(this)
messageChannel = EventChannel(flutterPluginBinding.binaryMessenger, "eventChannelStream")
messageChannel?.setStreamHandler(this)
}
...
// Doing other stuff here
以及我想如何在 BLoC 中使用这些消息在事件之后将它们发送到 UI:
Stream<String> retrieveMessage(Stream<String> messageStream) async* {
await for (String message in messageStream) {
//await Future.delayed(const Duration(milliseconds: 1500));
yield message;
}
}