当前位置: 首页 > news >正文

查派网站建设页面跳转流程图

查派网站建设,页面跳转流程图,wordpress php页面跳转,电子签名在线生成器前言 上一篇博客主要介绍了MethodChannel的使用方式 Flutter与Native通信的方式#xff1a;MethodChannel 这篇博客接着讲另外两种通信方式 EventChannel和BasicMessageChannel EventChannel用于从native向flutter发送通知事件#xff0c;例如flutter通过其监听Android的重…前言 上一篇博客主要介绍了MethodChannel的使用方式 Flutter与Native通信的方式MethodChannel 这篇博客接着讲另外两种通信方式 EventChannel和BasicMessageChannel EventChannel用于从native向flutter发送通知事件例如flutter通过其监听Android的重力感应变化等。与MethodChannel不同EventChannel是native到flutter的单向调用调用是多播一对多的可以类比成Android的Brodcast。 BasicMessageChannel用于在flutter和native互相发送消息一方给另一方发送消息收到消息之后给出回复。它和MethodChannel的区别重在一个消息的回复 EventChannel Android端调用Flutter端 首先是Flutter端代码创建一个EventChannel并约定好字段 static const EventChannel _channel EventChannel(tofluttereventchannel);然后写好被调用的方法 void _enableEventReceiver() {//延时3s先让 Android 端的 EventChannel 进行初始化 , 然后在 Flutter 端注册 EventChannel 监听//这样才能确保连接成功Future.delayed(const Duration(milliseconds: 5000), () {_streamSubscription _channel.receiveBroadcastStream().listen((dynamic event) {print(收到消息 event: $event);setState(() {mMessage event;});}, onError: (dynamic error) {print(出现错误 error: ${error.message});setState(() {errmMessage error.message;});});});}_enableEventReceiver方法可以放到Widget的initState()中初始化 在dispose()中调用以下取消监听的方法 void _disableEventReceiver() {if (_streamSubscription ! null) {print(flutter断开连接);//断开连接这里也会触发android端的onCancel方法_streamSubscription?.cancel();_streamSubscription null;}}然后来到Android端定义两个对象 一个是EventChannel一个是EventSink private lateinit var channel: EventChannelvar eventSink: EventChannel.EventSink? null继续在configureFlutterEngine方法中做处理 channel EventChannel(flutterEngine.dartExecutor, tofluttereventchannel)channel.setStreamHandler(object : EventChannel.StreamHandler {override fun onListen(arguments: Any?, events: EventChannel.EventSink) {Log.d(MyFlutterActivity, 已建立连接)eventSink events}override fun onCancel(arguments: Any?) {Log.d(MyFlutterActivity, 已断开连接)}})可以看到其实就是在建立连接后对EventSink对象进行赋值 当eventSink 赋值后就可以拿他进行消息的发送了 比如 override fun onResume() {super.onResume()//这里延时执行是为了模拟eventSink初始化后我们在业务里面进行消息的发送Handler().postDelayed({eventSink?.success(这是来自安卓的消息)//执行了endOfStream后再发送消息就无效了所以这行代码要放到endOfStream上面执行eventSink?.error(error code, 这是来自安卓的错误消息, error details)//结束通信这时候onCancel会被调用eventSink?.endOfStream()}, 6000)}这样EventChannel的使用就介绍完了 注意 在实际运行时可能会发现不起作用 归根结底是注册和调用顺序问题 所以最好在Flutter先延迟一下注册监听 让 Android 端的 EventChannel 先建立连接, 然后在 Flutter 端注册 EventChannel 监听 这样才能确保连接成功 所以用 Future.delayed 进行延时操作 具体可以参考这篇博客 Flutter 混合开发报错 MessageChannel MessageChannel重在回调后的消息回复 相对与其他Channel类型的创建MessageChannel的创建除了channel名以外还需要指定编码方式。 因为发送的消息会以二进制的形式进行处理所以要针对不同类型的数进行二进制编码 主要方式有 下面看具体使用 Flutter端 Flutter端首先定义BasicMessageChannel static const messageChannel BasicMessageChannel(tofluttemessagechannel, StringCodec());发送消息这样写 ///发送MessageChannel消息延时一下确保安卓端先注册了监听才能收到void _sendMessage() {Future.delayed(const Duration(milliseconds: 6000), () async {final String? result await messageChannel.send(来自flutter主动发送的消息);print(收到安卓端的返回值${result});});}可以看到发送后会拿到返回值result 注册回调也就是接受消息这样写 //注册MessageChannel消息监听messageChannel.setMessageHandler((message) async {print(收到安卓端的MessageChannel消息 $message);setState(() {forNativeMsg message ?? ;});return 来自flutter返回的消息;});//发送MessageChannel消息可以看到接收到后也会给到Android端一个返回值 利用BasicMessageChannel我们就很快的完成了消息的发送和接收 并且每一个操作都可以接受或者传送返回值 Android端 Android端其实和Flutter端几乎一样 首先是定义BasicMessageChannel //先注册MessageChannelval messageChannel BasicMessageChannel(flutterEngine.dartExecutor,tofluttemessagechannel,StringCodec.INSTANCE)发送消息 //发送消息Handler().postDelayed({messageChannel.send(来自安卓端主动发送的消息) { result -Log.d(MyFlutterActivity, 收到flutter端的返回值:$result)}}, 500)注册回调也就是接受消息 //先注册监听messageChannel.setMessageHandler { message, reply -Log.d(MyFlutterActivity, 收到flutter端的MessageChannel消息message)reply.reply(来自安卓端返回的消息)}注意 这里其实也要注意一个顺序问题 总结起来就是先注册后发送 先让被回调的那一端注册监听完成后 再去跨端调用也就是发送消息 总结 最后来总结一下三种方式的区别 通信方式双端通信指定编码注册顺序使用场景MethodChannel支持否不需要延时注册方法调用EventChannelNative单向调用Flutter否先建立连接再监听广播通知BasicMessageChannel支持是先注册再监听用于传递字符串和半结构化的消息 源码 源码地址 EventChannel和BasicMessageChannel 相关资料 这是一份全面 详细的Android Native与Flutter的通信方式 学习指南
http://www.pierceye.com/news/522058/

相关文章:

  • 鄂州市建设局网站佰牛网站建设
  • 织梦网站上传及安装步骤农畜产品销售平台的网站建设
  • 网站续费如何做分录做交互设计的网站
  • 国家网站备案查询系统安丘网站建设多少钱
  • 长沙公司网站设计鹤壁建设网站推广公司电话
  • 电子商务网站建设与管理实务电子商务网站的构建
  • 做网站的集团用什么自己做网站
  • 买网站空间网站模块图片
  • 上海建设网站公在微信上怎么开店
  • 哪家网站雅虎全球购做的好做一婚恋网站多少钱
  • 苏州企业网站公司都有哪些php开源企业网站系统
  • wordpress收录很慢自己的网站如何优化
  • 个人介绍网站源码1v1网站建设
  • 大宇网络做网站怎么样app制作器下载软件
  • 四川建行网站做网站公司职务
  • 广州定制网站设计图标设计免费 logo
  • 十大网站有哪些网站建设 模板
  • 网站流量一直下降中国十大品牌网
  • 同学录网站开发的背景域名注册网站免费
  • 旅游电子商务网站建设规划书温州网站建设策划方案
  • 国家住房建设部网站域名查询官方网站
  • app开发 网站开发统称宁波seo推广咨询
  • 专门做书单的网站网络营销策划方案的设计
  • 网站建设推广合同自己建设网站需要花多少钱
  • 深圳网站建设电话哈尔滨建设网站官网
  • 上海网站建设网页制作培训做网站做论坛赚钱吗
  • 为网站做电影花絮哈尔滨互联网公司
  • 哈尔滨微网站建设公司做网站被骗该咋样做
  • 做翻译 英文网站dede网站版权信息
  • 梅江区住房和城乡建设局官方网站品牌设计帮