我们在前面章回中介绍了通道的概念和作用,并且提到了通道有不同的类型,本章回将其中一种通道:EventChannel.该通道主要通过Stream实现通信功能,该通道
主要用于消息类通信功能,它只能通过原生平台向Flutter程序发送消息,属于单向通信,本章回中将详细介绍它的使用方法。
通道的使用方法在前面章节已经介绍过,不过比较抽象,我们在这里通过具体的示例代码来演示:
flutterEventChannel = EventChannel("www.acf.com/event");
var streamSubscription = flutterEventChannel.receiveBroadcastStream()
.listen((event) { debugPrint("data: ${event.toString()}");},
onError: (e) => debugPrint('error: ${e.toString()}'),
onDone: () => debugPrint('event done'),
cancelOnError: true);
}
class MainActivity: FlutterActivity() {
private val eventChannel = "www.acf.com/event"
//重写方法来设置chanel监听器,用来监听channel中的方法
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
super.configureFlutterEngine(flutterEngine)
//通过方法中的flutterEngine获取MethodChannel对象
val eventChannel = EventChannel(flutterEngine.dartExecutor.binaryMessenger,eventChannel)
// 设置监听器用来监听channel中的事件
var sHandler = StreamHandlerImpl()
eventChannel.setStreamHandler(sHandler)
}
}
class StreamHandlerImpl : EventChannel.StreamHandler {
override fun onListen(arguments: Any?, events: EventChannel.EventSink?) {
events?.success("native event")
}
override fun onCancel(arguments: Any?) {
TODO("Not yet implemented")
}
}
上面的代码中使用回调方法的events参数给Stream回复消息,Stream收到消息后可以获取到消息的内容。
上面步骤中的3和4是在Andoird平台上编写的,位于MainActivity.kt文件中。我们还需要在IOS平台上实现类似的代码,我在这里就不演示了,因为它们的思路相同。
本章回中介绍了EventChannel通道相关的知识,原生平台通过Stream给Flutter发送数据。这样便实现了通信功能。我在这里就不演示程序的运行结果了,建议大家
自己动手去实现。不过我分享一些编译时的经验。