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

网站的服务有哪些网站建设与制作设计公司

网站的服务有哪些,网站建设与制作设计公司,设计师如何注册个人网站,做外贸网站义乌flutter开发实战-MethodChannel实现flutter与原生Android双向通信 最近开发中需要原生Android与flutter实现通信,这里使用的MethodChannel 一、MethodChannel MethodChannel:用于传递方法调用(method invocation)。 通道的客户端和宿主端通过传递给通…

flutter开发实战-MethodChannel实现flutter与原生Android双向通信

最近开发中需要原生Android与flutter实现通信,这里使用的MethodChannel

一、MethodChannel

MethodChannel:用于传递方法调用(method invocation)。
通道的客户端和宿主端通过传递给通道构造函数的通道名称进行连接

一个应用中所使用的所有通道名称必须是唯一的
使用唯一的域前缀为通道名称添加前缀,比如:samples.flutter.dev/battery

官网 https://flutter.cn/docs/development/platform-integration/platform-channels

https://blog.csdn.net/gloryFlow/article/details/132218837

二、在flutter端实现MethodChannel

我们需要创建一个名字为"samples.flutter.dev/test"的通道名称。
通过invokeNativeMethod与setMethodCallHandler来实现

  • invokeNativeMethod:调用Android端的代码
  • setMethodCallHandler:设置方法回调,用于接收Android端的参数

代码如下

import 'package:flutter/services.dart';//MethodChannel
const methodChannel = const MethodChannel('samples.flutter.dev/test');class FlutterMethodChannel {/** MethodChannel* 在方法通道上调用方法invokeMethod* methodName 方法名称* params 发送给原生的参数* return数据 原生发给Flutter的参数*/static Future<Map> invokeNativeMethod(String methodName,[Map? params]) async {var res;try {if (params == null) {res = await methodChannel.invokeMethod('$methodName');} else {res = await methodChannel.invokeMethod('$methodName', params);}} catch (e) {res = {'Failed': e.toString()};}return res;}/** MethodChannel* 接收methodHandler* methodName 方法名称* params 发送给原生的参数* return数据 原生发给Flutter的参数*/static void methodHandlerListener(Future<dynamic> Function(MethodCall call)? handler) {methodChannel.setMethodCallHandler(handler);}
}使用该MethodChannel,我们需要使用MethodChannel
使用代码如下void initState() {// TODO: implement initStatesuper.initState();setMethodHandle();}void setMethodHandle() {FlutterMethodChannel.methodHandlerListener((call) {print("methodHandlerListener call:${call.toString()}");if ("methodToFlutter" == call.method) {print("methodToFlutter arg:${call.arguments}");}return Future.value("message from flutter");});}Future<void> invokeNativeMethod() async {var result = await FlutterMethodChannel.invokeNativeMethod("methodTest", {"param":"params from flutter"});print("invokeNativeMethod result:${result.toString()}");}void testButtonTouched() {invokeNativeMethod();}void dispose() {// TODO: implement disposesuper.dispose();}

这里我们处理了方法methodToFlutter来接收Android端的传参数调用,同时处理后我们将结果"message from flutter"返回给Android端。
我们调用Android端的方法methodTest,并且传参,获取Android端传回的结果。

三、在Android端MainActivity

在Android的MainActivity中,同样我们实现了MethodChannel
设置setMethodCallHandler及调用Flutter的方法

代码如下

import android.util.Log;import android.text.TextUtils;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;import io.flutter.embedding.android.FlutterActivity;
import io.flutter.plugin.common.MethodChannel;import java.util.Timer;
import java.util.TimerTask;public class MainActivity extends FlutterActivity {private MethodChannel methodChannel;@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);getMethodChannel().setMethodCallHandler((call, result) -> {if (TextUtils.equals(call.method, "methodTest")) {result.success("message from Android");} else {result.error("1", "Illegal Argument Exception", "Unsupported Method - " + call.method);}});new Timer().schedule(new TimerTask() {@Overridepublic void run() {runOnUiThread(() -> {getMethodChannel().invokeMethod("methodToFlutter", "Params from Android");});}}, 10 * 1000);}private MethodChannel getMethodChannel() {if (methodChannel == null) {methodChannel = new MethodChannel(getFlutterEngine().getDartExecutor(), "samples.flutter.dev/test");}return methodChannel;}
}

我们在Android的MainActivity中通过调用方法methodToFlutter将参数传递给Flutter端。设置setMethodCallHandler根据方法methodTest处理接收来自flutter的参数,处理后并将结果返回给flutter。

注意:在MainActivity中调用Timer,需要在主线程中调用,可以使用runOnUiThread来处理。

四、小结

flutter开发实战-MethodChannel实现flutter与原生Android双向通信。实现MethodChannel在flutter端与Android端的MainActivity的实现相互通信功能。

学习记录,每天不停进步。

http://www.yayakq.cn/news/555690/

相关文章:

  • 精利手表网站湛江企业网站建设公司
  • 做的新网站能用多久泰国公共建设网站
  • 企业网站seo运营有赞分销
  • 线上推广计划免费网站seo
  • 公司做网站怎么赚钱吗刷seo快速排名
  • 广州网站建设360元查看网站开发
  • 十堰微网站建设电话wordpress标题去掉私密
  • 网站建设及应用实施方案9158个人空间登录
  • 创业 建网站免费域名的选择方法
  • 最早的软件开发模型深圳网站优化项目
  • 做网站创业流程图装修价格
  • 做网店好还是网站好企业+php网站建设
  • flash成品网站网页制作基础教程ps
  • 网站开发 站长统计网站排名 优帮云
  • 邢台哪儿专业做网站企业网站托管外包怎么做
  • h5手机网站怎么做筑楼人官方网
  • 网站的优势和劣势美容加盟的网站建设
  • 快递网站建设需求分析软件工程师报名官网
  • 广东品牌网站设计专家什么叫利用网站做蜘蛛池
  • 大量情侣网名网站微信公众号外包
  • 上海做网站待遇汕头网站排名推广
  • 中国做网站的网站电子政务网站开发
  • 企业站模板大全度娘网站桃花怎么做
  • 怎么做网站变更网站开发业务怎么开展
  • 大型网站建设公司淘宝建设网站的好处
  • 佛山中谦建设网站泰安吧
  • 台州做网站那家好免费网站成品
  • 网站会员后台管理系统动漫设计包括哪些内容
  • 本地企业网站建设服务平面ui设计是什么
  • 网站的背景图怎么做的高校网站如何建设论文