flutter和原生iOS,android通信分为一次性通信(一问一答)MethodChannel和持续通信(一次调用多次传值) EventChannel.
EventChannel通常应用于在flutter端进行监听, 当原生端有什么变化。比如随着时间推移数据产生了变化需要持续性的更新数据
一、flutter端注册和调用
1、引入
const platformEvent = EventChannel("flutterEventChannel");
2、注册监听
注册回调方法, 原生有回调会持续在此监听中获取值
platformEvent.receiveBroadcastStream("init").listen((event) {
// 比如event可能是一个json字符串
},
onError: (e){
},
onDone: () {
});
二、iOS端注册和回调
1、声明FlutterEventChannel
var eventChannel: FlutterEventChannel?
// 需要回调时使用
var enentSink:FlutterEventSink?
2、实现FlutterEventChannel
eventChannel = FlutterEventChannel(name: "flutterEventChannel", binaryMessenger: controller.binaryMessenger)
eventChannel?.setStreamHandler(self)
3、实现FlutterStreamHandler代理
func onListen(withArguments arguments: Any?, eventSink events: FlutterEventSink) -> FlutterError? {
enentSink = events
return nil;
}
func onCancel(withArguments arguments: Any?) -> FlutterError? {
enentSink = nil
return nil;
}
4、开始回调
在需要的地方把值传递给flutter
enentSink?("要传递的信息X")
三、android端注册和回调
1、声明EventSink
private EventChannel.EventSink eventSink;
2、注册和实现代理方法
new EventChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), "flutterEventChannel")
.setStreamHandler(
new EventChannel.StreamHandler() {
public void onListen(Object arguments, EventChannel.EventSink events) {
eventSink = events;
}
public void onCancel(Object arguments) {
eventSink = null;
}
}
);
3、在需要的地方进行回调传值给flutter
eventSink.success(inout);
四、相对于一次性传值, 持续性传值的使用还是比较少的
MethodChannel和EventChannel同时掌握后配合使用效果更佳
场景:
1、MethodChannel启动某个耗时操作
2、利用EventChannel来传输耗时操作的进度变化
最后
如果想要成为架构师或想突破20~30K薪资范畴,那就不要局限在编码,业务,要会选型、扩展,提升编程思维。此外,良好的职业规划也很重要,学习的习惯很重要,但是最重要的还是要能持之以恒,任何不能坚持落实的计划都是空谈。
如果你没有方向,这里给大家分享一套由阿里高级架构师编写的《Android八大模块进阶笔记》,帮大家将杂乱、零散、碎片化的知识进行体系化的整理,让大家系统而高效地掌握Android开发的各个知识点。
相对于我们平时看的碎片化内容,这份笔记的知识点更系统化,更容易理解和记忆,是严格按照知识体系编排的。
欢迎大家一键三连支持,若需要文中资料,直接扫描文末CSDN官方认证微信卡片免费领取↓↓↓(文末还有ChatGPT机器人小福利哦,大家千万不要错过)
PS:群里还设有ChatGPT机器人,可以解答大家在工作上或者是技术上的问题