Flutter与iOS原生通信方式

简介: Flutter与iOS原生通信方式
+关注继续查看

三种主要通信方式

  • MethodChannel:与原生相互进行方法调用,用于方法调用(双向)
  • BasicMessageChannel:与原生相互发送消息,用于数据传输(双向)
  • EventChannel:原生发送消息,Flutter接收,用于数据流通信(单向)

具体实现

1. MethodChannel

使用方式以及交互流程,请查看截图中代码以及注释imageOC初始化相关代码

@interface ViewController ()<FlutterStreamHandler>
@property(strong, nonatomic) NSTimer *timer;
@property(strong, nonatomic) FlutterEngine *flutterEngine;
@property(strong, nonatomic) FlutterViewController *flutterVC;
@property(strong, nonatomic) FlutterBasicMessageChannel *basicMessageChannel;
@property(strong, nonatomic) FlutterEventChannel *eventChannel;
@property(copy, nonatomic) FlutterEventSink eventSink;
@end

OC懒加载相关代码

- (FlutterEngine *)flutterEngine {
    if (!_flutterEngine) {
        FlutterEngine *engine = [[FlutterEngine alloc] init];
        if (engine.run) {
            _flutterEngine = engine;
        }
    }
    return _flutterEngine;
}
- (FlutterViewController *)flutterVC {
    if (!_flutterVC) {
        _flutterVC = [[FlutterViewController alloc] initWithEngine:self.flutterEngine nibName:nil bundle:nil];
    }
    return _flutterVC;
}
- (FlutterBasicMessageChannel *)basicMessageChannel {
    if (!_basicMessageChannel) {
        //注册FlutterBasicMessageChannel - 并指定名称messageChannelName为basicMessageChannel
        _basicMessageChannel = [FlutterBasicMessageChannel messageChannelWithName:@"basicMessageChannel" binaryMessenger:self.flutterVC.binaryMessenger];
        
        //监听Flutter发来的消息 - Flutter调用OC回调监听
        [_basicMessageChannel setMessageHandler:^(id  _Nullable message, FlutterReply _Nonnull callback) {
            NSLog(@"OC收到Flutter的FlutterBasicMessageChannel - %@", message);
        }];
    }
    return _basicMessageChannel;
}
- (FlutterEventChannel *)eventChannel {
    if (!_eventChannel) {
        _eventChannel = [FlutterEventChannel eventChannelWithName:@"eventChannel" binaryMessenger:self.flutterVC.binaryMessenger];
        [_eventChannel setStreamHandler:self];
    }
    return _eventChannel;
}

2. BasicMessageChannel

使用方式以及交互流程,请查看截图中代码以及注释image3. EventChannel使用方式以及交互流程,请查看截图中代码以及注释image运行结果

flutter: 消息内容: OC通过EventChannel向Flutter发送消息(OC参数类型是id), Flutter收到消息数据类型: String

完整代码(github中Flt文件夹里面的内容):
https://github.com/gltwy/public

相关文章
|
3月前
|
Dart 开发工具 Android开发
Flutter与iOS原生混合开发
Flutter与iOS原生混合开发
224 2
|
5月前
|
开发框架 Dart 开发工具
使用Flutter开发一套可同时运行在Android和iOS平台的代码
Flutter是一种跨平台移动应用开发框架,它允许开发者使用单一代码库构建高性能、美观且可在多个平台上运行的应用程序。本文将介绍如何使用Flutter开发一套同时适用于Android和iOS平台的代码。
|
5月前
|
iOS开发 Perl
将Flutter引入到现有项目中(iOS+Flutter)
将Flutter引入到现有项目中(iOS+Flutter)
|
6月前
|
开发工具 iOS开发 git
Flutter APP关于IOS APP预发布流程
Flutter APP关于IOS APP预发布流程
141 0
|
开发工具 iOS开发
Flutter笔记 02:iOS调用多个flutter界面
Flutter笔记 02:iOS调用多个flutter界面
626 0
|
开发工具 Android开发 iOS开发
Flutter混合开发:在已有iOS项目中引入Flutter(下)
在android项目中添加flutter模块比较简单,因为毕竟都是google的,但是在ios中添加flutter模块有些麻烦了,我们首先参考的是官方文档 flutter.cn/docs/develo… 但是在实际过程中会遇到各种问题(当然我本身对ios开发不熟悉也造成了不小的困扰),这里结合官方的步骤和我的经验来说说整个接入过程和遇到的坑。 我的环境是Android Studio 4.0.1 + Xcode12.4 + flutter2.0.5 (mac是M1芯片,后面会提到它的影响)
844 0
|
开发工具 Android开发 Swift
Flutter混合开发:在已有iOS项目中引入Flutter(上)
在android项目中添加flutter模块比较简单,因为毕竟都是google的,但是在ios中添加flutter模块有些麻烦了,我们首先参考的是官方文档 flutter.cn/docs/develo… 但是在实际过程中会遇到各种问题(当然我本身对ios开发不熟悉也造成了不小的困扰),这里结合官方的步骤和我的经验来说说整个接入过程和遇到的坑。 我的环境是Android Studio 4.0.1 + Xcode12.4 + flutter2.0.5 (mac是M1芯片,后面会提到它的影响)
820 1
|
iOS开发 Perl
flutter和iOS原生混合开发流程
熟悉flutter开发的人都知道,flutter和移动端原生混合开发的方式有两种: 一种是以flutter项目为主,使用plugin插件的方式将原生部分集成到flutter项目中; 另一种则是把flutter部分作为一个模块嵌入到原生的项目中。 作为一名iOSer,今天来介绍一下flutter和iOS原生项目混合开发的流程。
flutter和iOS原生混合开发流程
|
Android开发 iOS开发 C++
Flutter中设置Android的应用名称和图标(android,ios,web)
在前面的几期给大家介绍了flutter的安装以及一些简单的配置,还运行了helloword 那么接下来就带领大家了解如何设置应用名称以及图标
214 0
|
编解码 安全 Linux
flutter 在windows和linux上运行IOS UI模拟器
之前发视频总是有人留言,我用的什么模拟器,今天给大家说一下 我一般用的是device_preview这个插件,这个插件的闲置是只能做UI上的模拟,并没有真正的运行环境。 近似您的应用程序在另一台设备上的外观和性能。
302 0
相关产品
云迁移中心
推荐文章
更多