加入收藏 | 设为首页 | 会员中心 | 我要投稿 辽源站长网 (https://www.0437zz.com/)- 云专线、云连接、智能数据、边缘计算、数据安全!
当前位置: 首页 > 站长资讯 > 评论 > 正文

一篇看懂Android与Flutter之间的通信

发布时间:2019-06-26 13:33:07 所属栏目:评论 来源:Android高级架构师
导读:Flutter作为一种跨平台解决方案,经常会作为一个模块嵌入到原生Android与iOS应用中,Flutter与Android原生端的通信必不可少。所以本文就来讲述一下Android如何与flutter进行通信。 1、架构概述 消息通过平台通道在native(host)与flutter(client)之间传递,

首先来看Android端的代码实现。

  1. public class MethodChannelPlugin implements MethodChannel.MethodCallHandler { 
  2.  private Activity activity; 
  3.  private MethodChannel channel; 
  4.  public static MethodChannelPlugin registerWith(FlutterView flutterView) { 
  5.  MethodChannel channel = new MethodChannel(flutterView, "MethodChannelPlugin"); 
  6.  MethodChannelPlugin methodChannelPlugin = new MethodChannelPlugin((Activity) flutterView.getContext(), channel); 
  7.  channel.setMethodCallHandler(methodChannelPlugin); 
  8.  return methodChannelPlugin; 
  9.  } 
  10.  private MethodChannelPlugin(Activity activity, MethodChannel channel) { 
  11.  this.activity = activity; 
  12.  this.channel = channel; 
  13.  } 
  14.  //调用flutter端方法,无返回值 
  15.  public void invokeMethod(String method, Object o) { 
  16.  channel.invokeMethod(method, o); 
  17.  } 
  18.  //调用flutter端方法,有返回值 
  19.  public void invokeMethod(String method, Object o, MethodChannel.Result result) { 
  20.  channel.invokeMethod(method, o, result); 
  21.  } 
  22.  @Override 
  23.  public void onMethodCall(MethodCall methodCall, MethodChannel.Result result) { 
  24.  switch (methodCall.method) { 
  25.  case "send"://返回的方法名 
  26.  //给flutter端的返回值 
  27.  result.success("MethodChannelPlugin收到:" + methodCall.arguments); 
  28.  Toast.makeText(activity, methodCall.arguments + "", Toast.LENGTH_SHORT).show(); 
  29.  if (activity instanceof FlutterAppActivity) { 
  30.  ((FlutterAppActivity) activity).showContent(methodCall.arguments); 
  31.  } 
  32.  break; 
  33.  default: 
  34.  result.notImplemented(); 
  35.  break; 
  36.  } 
  37.  } 

笔者对Android端代码做了一个简单的封装,还是很好理解的。下面就来看flutter代码实现。

  1. class _MyHomePageState extends State<MyHomePage> { 
  2.  MethodChannel _methodChannel = MethodChannel("MethodChannelPlugin"); 
  3.  @override 
  4.  void initState() { 
  5.  _methodChannel.setMethodCallHandler((handler) => Future<String>(() { 
  6.  print("_methodChannel:${handler}"); 
  7.  //监听native发送的方法名及参数 
  8.  switch (handler.method) { 
  9.  case "send": 
  10.  _send(handler.arguments);//handler.arguments表示native传递的方法参数 
  11.  break; 
  12.  } 
  13.  })); 
  14.  super.initState(); 
  15.  } 
  16.  //native调用的flutter方法 
  17.  void _send(arg) { 
  18.  setState(() { 
  19.  _content = arg; 
  20.  }); 
  21.  } 
  22.  String _resultContent = ""; 
  23.  //flutter调用native的相应方法 
  24.  void _sendToNative() { 
  25.  Future<String> future = 
  26.  _methodChannel.invokeMethod("send", _controller.text); 
  27.  future.then((message) { 
  28.  setState(() { 
  29.  //message是native返回的数据 
  30.  _resultContent = "返回值:" + message; 
  31.  }); 
  32.  }); 
  33.  } 
  34.  @override 
  35.  Widget build(BuildContext context) {...} 

上面就是通过MethodChannel来进行通信的代码实现。还是比较简单的。在Android端使用只需要调用MethodChannelPlugin的invokeMethod方法即可。在flutter端使用只需要参考_sendToNative方法的实现即可。

3.4、BasicMessageChannel

(编辑:辽源站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读