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

在中国做采购在哪个网站找产品网页功能设计

在中国做采购在哪个网站找产品,网页功能设计,如何给网站做高质量外链,wordpress添加用户前言 上一篇博客主要介绍了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.zqtcl.cn/news/433236/

相关文章:

  • 安徽免费网站制作西安做行业平台网站的公司
  • 我想做服装网站怎么做网页设计优秀案例分析
  • 网站建设技术教程视频wordpress中文模版
  • 高端企业网站 程序纸牌网站建设
  • html制作网站推广最有效的办法
  • 做网站推广的工作内容凡客诚品创始人
  • 网站开发pc端和手机端外贸建设网站公司
  • 长沙哪家网站设计好上海成品网站
  • wordpress商城插件收费哪里可以做网站优化
  • 中国建设银行u盾下载假网站吗wordpress有没有付费
  • 海南哪家公司做网站开发一套管理系统多少钱
  • 做网站建设费用百姓网
  • 西安建设厅网站wpf做网站教程
  • 好的网页网站设计wordpress对外发邮件
  • 湖北网站建设贴吧信用宁波企业网查询
  • 佛山市官网网站建设多少钱网站建设与管理书籍
  • 网站建设佰金手指科杰二八佛山有那几家做网站
  • 网站建设刂搜金手指下拉贰伍wordpress 外链自动nofflow
  • 搭建一个网站多少钱手机软件开发用什么语言
  • 太原专业网站建设杭州网络推广专员
  • 广西专业建网站橙米网站建设
  • 百度做的网站能优化吗html网站系统
  • php素材网站源码免费下载网站维护的内容有哪些
  • 打鱼跟电子游戏网站怎么做佛山微网站开发哪家好
  • 知名的网站建设网站在工信部备案
  • 网站首页的快照更新慢爆wordpress密码
  • dw做网站背景图片设置铺平微博通 wordpress
  • 勉县网站建设电商网站要素
  • 重庆旅游seo整站优化网站制作的一般步骤是什么
  • 网站建设评估体系p2p网站建设框架