Flutter与Native通信(二)EventChannel

更新时间:2023-07-05 18:17:27 阅读: 评论:0

Flutter与Native通信(⼆)EventChannel
flutter可以native之间可以通过Platform Channels APIs进⾏通信,API主要有以下三种:
安席:⽤于传递⽅法调⽤(method invocation)
:⽤于事件流的发送(event streams)
:⽤于传递字符串和半结构化的消息
其中EventChannel⽤于从native向flutter发送通知事件,例如flutter通过其监听Android的重⼒感应变化等。与MethodChannel不同,EventChannel是native到flutter的单向调⽤,调⽤是多播(⼀对多)的,可以类⽐成Android的Brodcast。
1. EventChannel的基本流程
我们照例先看⼀下API使⽤的基本流程:
1. [native]EventChannel#tStreamHandler注册Handler实现
2. [native]EventChannel初始化结束后,在StreamHandler#onLister回调中获取EventSink引⽤并保存
3. [flutter]EventChannel#receiveBroadcastStream注册listener,建⽴监听
4. [native]使⽤EventSink#sucess发送通知事件
5. [flutter]接受到事件通知
6. [native]通知结束时调⽤endOfStream结束
2.代码实现
flutter端
世界经济形势创建EventChannel,注册“包名/标识符”的channel名
通过StreamSubscription#listen注册listener,其中cancelOnError参数表⽰遇到错误时是否⾃动结束监听
class _MyHomePageState extends State<MyHomePage> {月饼糖浆
static const EventChannel _channel = const EventChannel('ample.eventchannel/interop');
StreamSubscription _streamSubscription;
String _platformMessage;
void _enableEventReceiver() {葡萄干孕妇能吃吗
_streamSubscription = _iveBroadcastStream().listen(
(dynamic event) {
print('Received event: $event');
tState(() {
_platformMessage = event;
});
},
onError: (dynamic error) {
print('Received error: ${ssage}');
},
cancelOnError: true);
太阳简笔画图片}
void _disableEventReceiver() {
if (_streamSubscription != null) {
笛子独奏_streamSubscription.cancel();
_streamSubscription = null;
}
}
@override
initState() {
super.initState();
_enableEventReceiver();
}
@override
void dispo() {
super.dispo();
_disableEventReceiver();
}
调⽤StreamSubscriptoin#cancel时,监听被取消。
native(android)端
android需要完成以下功能
通过EventChannel#tStreamHandler注册Handler实现
初始化完成后,获取eventSink引⽤并保存
eventSink发送事件通知
通知结束时调⽤event#endOfStream,此时onCancel会被调⽤
必要时,可通过evnetSink#error发送错误通知,flutter的StreamSubscription#onError会收到通知
class MainActivity: FlutterActivity() {对酒歌
private lateinit var channel: EventChannel
var eventSink: EventSink? = null
override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
channel = EventChannel(flutterEngine.dartExecutor.binaryMesnger, "ample.eventchannel/interop")        channel.tStreamHandler(
object : StreamHandler {
override fun onListen(arguments: Any?, events: EventSink) {
eventSink = events
Log.d("Android", "EventChannel onListen called")
Handler().postDelayed({
eventSink?.success("Android")
//eventSink?.endOfStream()
//eventSink?.error("error code", "error message","error details")
}, 500)
}
override fun onCancel(arguments: Any?) {
Log.w("Android", "EventChannel onCancel called")
}
})
初中物理电学公式}
}

本文发布于:2023-07-05 18:17:27,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1080280.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:通知   注册   发送
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图