第二百六十回

文章目录

  • 知识回顾
  • 示例代码
  • 经验总结

我们在上一章回中介绍了通道相关的内容,本章回中将介绍其中的一种通道:MethodChannnel.闲话休提,让我们一起Talk Flutter吧。

在这里插入图片描述

知识回顾

我们在上一章回中介绍了通道的概念和作用,并且提到了通道有不同的类型,本章回将其中一种通道:MethodChannel.该通道主要通过方法实现通信功能,我们可以通
过方法的参数在通道上传递数据,该通道支持双向通信,就是说Flutte既可以使用通道给原生平台发送数据,也可以使用通道接收原生平台发来的数据。

示例代码

通道的使用方法在前面章节已经介绍过,不过比较抽象,我们在这里通过具体的示例代码来演示:

  1. 在Flutter中创建通道,使用构造方法就可以创建通道,方法的参数最好使用域名/功能名这样的形式,因为在原生代码中会通过该名称获取该通道;
  flutterMethodChannel = MethodChannel("www.acf.com/battery");
  1. 监听通道中的方法或者事件.这里使用通道的invokeMethod()方法监听通道中名叫getBattery的方法,它可以获取到方法的的返回值。此外,我们还通过方法的
    参数给原生平台发送数据,名叫data的参数表示具体的数据。
    result = await flutterMethodChannel.invokeMethod("getBattery",data);
  1. 在原生平台的代码中获取通道;这里继承了FlutterActivity类并且重写类中的configureFlutterEngine()方法,在该方法中获取通道;
class MainActivity: FlutterActivity() {private val channel = "www.acf.com/battery"//重写方法来设置chanel监听器,用来监听channel中的方法override fun configureFlutterEngine(flutterEngine: FlutterEngine) {super.configureFlutterEngine(flutterEngine)val methodChannel = MethodChannel(flutterEngine.dartExecutor.binaryMessenger,channel)// 设置监听器用来监听channel中的方法,就是flutter代码中的invokeMethod()方法调用的方法methodChannel.setMethodCallHandler { call, result ->//判断是否是获取电量的方法,不是则返回错误,返回内容通过监听器中的result参数返回if(call.method == "getBattery") {//从arguments参数中获取数据var data = call.argumentsLog.d(TAG, "configureFlutterEngine: arguments: "+data.toString())val battery = getBattery()if(battery == -1) {result.error("300","unKnowError",null)}else {result.success(battery)}}else {result.notImplemented()}}}
}
  1. 给通道设置监听器,在监听器中实现原生平台上特有的功能;设置监听器通过setMethodCallHandler()方法实现,详细可以参考上面的代码片段。该方法包含的参
    数call可以识别通道名称,以及从中获取通道中发送来的数据。result参数主要用来给channel回复数据以及错误信息。电量信息是原生平台提供的功能,下面是它的
    示例代码。我们将其封装成了独立的方法,把该方法的返回值添加到通道中可以给Flutter平台回复电量信息数据。
    private fun getBattery(): Int {var res = 0if(Build.VERSION.SDK_INT >= VERSION_CODES.LOLLIPOP) {val batteryManager = getSystemService(Context.BATTERY_SERVICE) as BatteryManagerres = batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY)}else {val intent = ContextWrapper(applicationContext).registerReceiver(null, IntentFilter(Intent.ACTION_BATTERY_CHANGED))}return res;}

我们在这里使用的示例代码主要参考了官方文档中给的示例,同时结合了自己的分析。上面步骤中的3和4是在Andoird平台上编写的,位于MainActivity.kt文件中。
我们还需要在IOS平台上实现类似的代码,我在这里就不演示了,因为它们的思路相同。

经验总结

本章回中介绍的MethodChannel通道类似方法,Flutter通过方法的参数给原生平台发送数据。原生平台通过方法的返回值给Flutter发送数据。这样便实现了双向通
信功能。我在这里就不演示程序的运行结果了,建议大家自己动手去实现。不过我分享一些编译时的经验。

  • 编写channel中的代码时需要使用xCode打开flutter的项目;
  • 编写channel中的代码时最后使用androidStudio重新打开andorid项目,这样会自动生成android项目文件,而不要在原来的flutter项目中编辑android代码。
  • 运行时IOS原生代码需要使用xCode编译运行,Android原生代码需要在flutter项目中编译运行才有效果。
    看官们,与"如何使用MethodChannel"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/341114.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GEE查看MODIS的NDVI、EVI产品并生成逐日/逐月NDVI曲线

目录 MOD13Q1MOD09GA计算逐日/逐月NDVI生成曲线参考博文 MOD13Q1 MOD13Q1有两个产品:NDVI和EVI,每16天为全球提供,分辨率为250M 通过查看时间,该NDVI产品是16天一景 MOD09GA 提供逐日的表面反射率产品,分辨率为500m…

计算机网络 物理层

文章目录 物理层物理层的基本概念数据通信的基础知识数据通信系统的模型有关信道的几个基本概念信道的极限容量 物理层下面的传输媒体导引型传输媒体非引导型传输媒体 信道复用技术波分复用码的复用 宽带接入技术ADSL 技术光纤同轴混合网 (HFC 网)FTTx 技术 物理层 …

SpringMVC的四种跳转方式

默认的跳转是请求转发,直接跳转到jsp页面展示,还可以使用框架提供的关键字redirect:,进行一个重定向操作,包括重定向页面和重定向action,使用框架提供的关键字forward:,进行服务器内部转发操作,…

【电商API接口】jd.item_search按关键字搜索京东商品返回值和参数说明

item_search-按关键字搜索商品 [查看演示] API测试工具 注册开通 jd.item_search 公共参数 请求地址: 申请调用KEY测试 名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)secretString是调用密钥api_nameString是API接口名称&#xff08…

vue3中使用ace-builds,并设置自定义代码提示(Echarts 配置项),添加代码格式化功能

首先安装 ace-builds “ace-builds”: “^1.24.0” 代码中 import { keywords } from /editor/data/option-keywords 是自定义的代码提示配置文件 自定义代码提示文件内容如下图: 其实还可以添加一个代码格式化插件。 import beautify from js-beautify; “js-bea…

概率论与数理统计-第6章 参数估计

6.1 点估计问题概述 一、点估计的概念 二、评价估计量的标准 无偏性 定义1:设^ θ(X1,…,Xn)是未知参数θ的估计量,若E(^ θ)θ,则称^θ为θ的无偏估计量定理1:设X1,…,Xn,为取自总体X的样本,总体X的均值为μ,方差为…

【Python学习】Python学习14-函数

目录 【Python学习】Python学习14-函数 前言自定义函数创建语法自定义函数与调用参数传递参考 文章所属专区 Python学习 前言 本章节主要说明Python的函数。函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。 函数能提高应…

Maintaining Performance with Less Data(待补)

文章目录 AbstractIntroductionPrevious WorkIncreasing data useReducing data useVariable data useContribution MethodsDatasetsHardwarePerformance MetricsNetwork Architecture ExperimentationBenchmarkData stepobserve Data IncrementData Cut DiscussionConclusion …

制造企业实施WMS仓储管理系统后的变革与挑战

随着市场竞争的日益激烈,制造型企业对于提高生产效率和降低运营成本的需求愈发迫切。在这一背景下,WMS仓储管理系统解决方案逐渐成为制造业企业的必备工具。然而,实施WMS仓储管理系统不仅意味着企业将迎来一系列的变革,还将面临一…

数据采集卡:16通道16位250KHz AD,支持单点采集,程控增益

概述 USB-XM1603是一款性价比极高的多功能通用A/D板,经过精心设计,采用USB2.0总线支持热插拔,即插即用,无需地址跳线。适合测量变送器输出、直流电压等场合的测量应用。USB-XM1603具有16路单端16位程控增益模拟输入、4路16位模拟…

工单系统:助力传统服务行业实现数字化转型的关键要素

数字化转型的浪潮冲击着传统服务业,对其造成了巨大的影响。其中,工单系统以其多样和强大的功能性,成为传统服务行业必备的数字工具。今天,小编就来大家来聊聊工单系统对传统服务行业有哪些影响?希望对于还未投入使用的…

【Spring Cloud】Sentinel流量限流和熔断降级的讲解

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的专栏《Spring Cloud》。🎯🎯 &am…