一篇看懂Android与Flutter之间的通信,吃一堑长一智

前面讲了Android与flutter通信的一些基础知识,下面就进入正题,来看Android如何与flutter进行通信。

Android与Flutter之间的通信共有四种实现方式。

  1. 由于在初始化flutter页面时会传递一个字符串——route,因此我们就可以拿route来做文章,传递自己想要传递的数据。该种方式仅支持单向数据传递且数据类型只能为字符串,无返回值。
  2. 通过EventChannel来实现,EventChannel仅支持数据单向传递,无返回值。
  3. 通过MethodChannel来实现,MethodChannel支持数据双向传递,有返回值。
  4. 通过BasicMessageChannel来实现,BasicMessageChannel支持数据双向传递,有返回值。

下面就来看一下这几种方式的使用。

3.1、初始化时传值

主要是利用了创建flutter页面传递的route来做文章,笔者认为该种方式属于取巧,但还是可以用来传递数据。它的使用很简单,代码如下。

首先来看Android代码。

//第三个参数可以换成我们想要字符串。
FlutterView flutterView = Flutter.createView(this, getLifecycle(), “route”);

在flutter中,我们只需要通过下面代码来获取值即可。

void main() => runApp(MyApp(
initParams: window.defaultRouteName,
));

class MyApp extends StatelessWidget {
final String initParams;//既是前面传递的值——route

MyApp({Key key, @required this.initParams}) : super(key: key);

@override
Widget build(BuildContext context) {…}
}

通过该种方式就可以在初始化flutter时,Android给flutter传递数据。由于runApp仅会调用一次,所以该种方式只能传递一次数据且数据只能是字符串。

使用window的相关API需要导入包dart:ui

3.2、EventChannel

EventChannel是一种native向flutter发送数据的单向通信方式,flutter无法返回任何数据给native。主要用于native向flutter发送手机电量变化、网络连接变化、陀螺仪、传感器等。它的使用方式如下。

首先来看Android代码。

public class EventChannelPlugin implements EventChannel.StreamHandler {

private static final String TAG = EventChannelPlugin.class.getSimpleName();
private EventChannel.EventSink eventSink;
private Activity activity;

st

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值