flutter与原生交互具体实现

PlatformChannel包含BasicMessageChannel、MethodChannel和EventChannel,分别用于数据传递、方法调用和事件通知。本文介绍了如何使用这些通道进行Flutter与原生应用的交互,包括在特定时机发送消息、调用系统API和监听事件。详细代码实现可在提供的GitHub链接中查看。
摘要由CSDN通过智能技术生成

PlatformChannel功能简介

PlatformChannel分为BasicMessageChannel、MethodChannel以及EventChannel三种。其各自的主要用途如下:

  • BasicMessageChannel: 用于传递数据。Flutter与原生项目的资源是不共享的,可以通过BasicMessageChannel来获取Native项目的图标等资源。
  • MethodChannel: 传递方法调用。Flutter主动调用Native的方法,并获取相应的返回值。比如获取系统电量,发起Toast等调用系统API,可以通过这个来完成。
  • EventChannel: 传递事件。这里是Native将事件通知到Flutter。比如Flutter需要监听网络情况,这时候MethodChannel就无法胜任这个需求了。EventChannel可以将Flutter的一个监听交给Native,Native去做网络广播的监听,当收到广播后借助EventChannel调用Flutter注册的监听,完成对Flutter的事件通知。

其实可以看到,无论传方法还是传事件,其本质上都是数据的传递,不过上层包的一些逻辑不同而已。

具体实现

BasicMessageChannel

初始直接在Native端发送消息, flutter是收不到的, 因为还没有执行接收监听方法, 所以在Native端发送消息, 需要注意一下时机
flutter

 static const messageChannel = const BasicMessageChannel('samples.flutter.io/message', StandardMessageCodec());

 static const messageChannel2 = const BasicMessageChannel('samples.flutter.io/message2', StandardMessageCodec());

 Future<String> sendMessage() async {
    String reply = await messageChannel.send('发送给Native端的数据');
    print('reply: $reply');
    return reply;
  }

  void receiveMessage() {
    messageChannel2.setMessageHandler((message) async {
      print('message: $message');
      return '返回Native端的数据';
    });
  }
  
   @override
  void initState() {
    // TODO: implement initState
    super.initState();
    receiveMessage();
    sendMessage();

  }

ios

// 初始化定义
FlutterBasicMessageChannel* messageChannel = [FlutterBasicMessageChannel messageChannelWithName:@"samples.flutter.io/message" binaryMessenger:controller];

// 接收消息监听
[messageChannel setMessageHandler:^(id message, FlutterReply callback) {
    NSLog(message);
    callback(@"返回flutter端的数据");
}];




// 触发事件执行

FlutterViewController* controller = (FlutterViewController*)self.window.rootViewController;
FlutterBasicMessageChannel* messageChanne
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值