Flutter底层兼容,flutter嵌入原生组件
flutter与原生交互方法和底层原理分析
1.环境准备, 参考链接
成都创新互联-专业网站定制、快速模板网站建设、高性价比克东网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式克东网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖克东地区。费用合理售后完善,十多年实体公司更值得信赖。
2.添加国内环境配置: 参考链接
3.新建
name: String类型,代表Channel的名字,也是其唯一标识符。
messager:BinaryMessenger类型,代表消息信使,是消息的发送与接收的工具。
codec: MessageCodec类型或MethodCodec类型,代表消息的编解码器。
fluuter中的MessageCodec用于二进制格式数据与基础数据之间的编解码。BasicMessageChannel所使用的编解码器就是MessageCodec。
iOS中,名称为FlutterMessageCodec,是一个协议,定义了两个方法:encode接收一个类型为id的消息,将其编码为NSData类型,而decode接收NSData类型消息,将其解码为id类型数据。
MessageCodec有多种不同的实现:
与MessageCodec不同的是,MethodCodec用于MethodCall对象的编解码,一个MethodCall对象代表一次从Flutter端发起的方法调用。MethodCall有2个成员变量:String类型的method代表需要调用的方法名称,通用类型(Android中为Object,iOS中为id)的arguments代表需要调用的方法入参
由于处理的是方法调用,故相比于MessageCodec,MethodCodec多了对调用结果的处理。当方法调用成功时,使用encodeSuccessEnvelope将result编码为二进制数据,而当方法调用失败时,则使用encodeErrorEnvelope将error的code、message、detail编码为二进制数据
MethodCodec有两种实现:
Flutter Channel底层原理分析
百度网盘flutter 见46-Flutter Channel
Flutter 提供三种Channel用作Flutter与iOS原生平台之间的数据传递
1.FlutterBasicMessageChannel: 用作频繁与原生交互
2.FlutterMethodChannel:用来调用方法,双向通讯
3.FlutterEventChannel:数据流通讯
三种Channel,都有以下成员变量
1.name: Channel 的唯一标识
在Flutter应用中,通常存在多个Platform Channel,使用name区分不同的Channel
2.messenger: 消息信使(BinaryMessenger)
负责Flutter与原生之间的相互通讯
[methodChannel setMethodCallHandler:^(FlutterMethodCall * _Nonnull call, FlutterResult _Nonnull result) {
}];
setMethodCallHandler方法,MethodCallHandler放在FlutterBinaryMessageHandler中
创建一个FlutterMethodChannel,通过 setMethodCallHandler来进行消息处理,最终会为FlutterMethodChannel绑定一个FlutterBinaryMessageHandler,并以FlutterMethodChannel的name作为key,保存在一个Map结构中
先创建 FlutterEngine-FlutterViewController-FlutterMethodChannel,
调用setMethodCallHandler方法时,会进入FlutterEngine的setMessageHandlerOnChannel:binaryMessageHandle:中,在进入PlatformMessageRouter中进行储存
为什么说移动端的未来是Flutter?
Flutter是Google开发的新一代跨平台方案,Flutter可以实现写一份代码同时运行在iOS和Android设备上,并且提供很好的性能体验。Flutter使用Dart作为开发语言,这是一门简洁、强类型的编程语言。Flutter对于iOS和Android设备,提供了两套视觉库,可以针对不同的平台有不同的展示效果。
Flutter原本是为了解决Web开发中的一些问题,而开发的一套精简版Web框架,拥有独立的渲染引擎和开发语言,但后来逐渐演变为移动端开发框架。正是由于Dart当初的定位是为了替代JS成为Web框架,所以Dart的语法更接近于JS语法。例如定义对象构建方法,以及实例化对象的方式等。
在Google刚推出Flutter时,其发展很缓慢,终于在18年发布第一个Bate版之后迎来了爆发性增长,发布第一个Release版时增长速度更快。可以从Github上Star数据看出来这个增长的过程。在19年最新的Flutter 1.2版本中,已经开放Web支持的Beta版。
Flutter不仅仅提供了一套视觉库,在Flutter整体框架中包含各个层级阶段的库。例如实现一个游戏功能,上面一些游戏控件可以用上层视觉库,底层游戏可以直接基于Flutter的底层库进行开发,而不需要调用原生应用的底层库。Flutter的底层库是基于Open GL实现的,所以Open GL可以做的Flutter都可以。
Flutter开发 解决iOS编译不兼容Swift
在进行Flutter开发过程中,很容易出现iOS原生端编译不成功的问题,比如出现Undefined symbol:__swift_FORCE_LOAD_$_swfitCoreLocation
出现这种情况的时候,为没有导入swift头文件导致编译不成功,解决办法为:
1、新建选中Runner右键New File 选择Swift File
2、点击create的时候会出现选择Xcode - Create Bridging Header
3、随后会创建一个Runner-Bridging-Heading.h的文件
4、正常运行项目即可
一般此情况多出现在第一次运行iOS的情况,为导入过支持Swift后XCode没有进行兼容导致的问题。
网站栏目:Flutter底层兼容,flutter嵌入原生组件
URL网址:http://pwwzsj.com/article/dsgjjsc.html