flutter 原生PlatformView开发实现磁力气泡

最近终于有些时间能够好好整理自己过去的知识,swiftui项目,flutter项目,以前之前主uikit项目.学而时习之,也算对自己有益的行为.本篇就来开篇讲讲我flutter项目中一些功能的实现.

本篇简介

在写flutter包的过程中,需要写一个气泡选择的小功能,气泡漂浮并且聚集在屏幕中,当时需要的是带有磁力的气泡,这个效果在flutter中找了很久也没有示例,正好iOS中以前写过这个需求,所以决定做桥个桥使用原生的view来做展示.而且最后做出来的效果确实也不错,原生的磁力气泡操作展示cpu占用等等,非常的顺畅.

目标实现

  1. 插件包的开发
  2. 原生view实现
  3. flutter原生view使用

问题解决

插件包开发

这东西之前觉得很难,但是写多了之后,其实还是很简单的,对于iOS而已,flutter插件包开发,更看重的是对Pod.spec本地库的熟悉程度.

磁力功能实现

这里简短说下好了 磁力气泡功能是基于iOS原生框架SpriteKit实现的,因为具备物理体积碰撞,这东西想要靠自己手写逻辑代码实现,不知道得写到猴年马月去,所以iOS出了这一框架,网上确实有很多示例框架,大部分是游戏demo,其实这东西使用的人很少,做游戏的最后基本也抛弃了这个框架,所以大多数文章都是16,17年左右. 我是在网上找的一个示例魔改成项目的要求的,SpriteKit这东西我估计苹果也放弃了,到现在连多行文字都不支持,确实十分蛋疼.

flutter原生view开发

xcode创建FlutterPlatformView 注册到FlutterPluginRegistrar中

在flutter中使用 这里要注意的是,flutter的UIKitView在入参creationParams中我使用{'viewId': 22}获取到args为none,使用creationParams: 22作为参数,获取到的参数为nil,由于不清楚具体如何获取值,我最终采用的是methodChannel传递数据.如果有童鞋知道如何正确使用的话,也可以评论通知我一下.

flutter与xcode调试

这块儿之前确实头痛,flutter嵌入原生view,流程这样

  1. xcode的demo中先写好原生view
  2. flutter的package文件中创建插件
  3. as编辑插件的example,在lib中写flutter端的代码
  4. xcode编写podspec,做三方库接入,资源图片文件放置等等(这块儿可能会有坑,第一次弄可能会出问题)
  5. xcode中写原生封装成FlutterPlatformView的view
  6. 写channel做双端通信,在as中写flutter发送到原生
  7. 在xcode中做接受测试,测试成功后,做具体的数据传输
  8. 最后在具体项目中使用

我在开发时期是Xcode14.3,flutter版本是3.10.6,当时不支持as与xcode同步调试,所以必须来回切换编辑器操作,确实十分的痛苦,再加上写这篇文章的时候,我已经开发完swiftui的项目了,swiftui与uikit做桥跟flutter与原生view做桥接比起来,方便程度真的是一个天上一个地下.

不过后来版本升级到Xcode15.1,flutter3.16.0后,flutter支持同步调试了,这块儿应该稍稍能改善一下把

结尾

本来有点不想说,flutter项目确确实实花了我跟另外一名安卓同事很多很多精力去开发,前前后后花了两个多月时间,再加上我以前自己自学flutter的各种demo测试等等加起来有接近一年的时间.项目功能汇总也算是十分的全面了, 苹果支付,google支付,smartfoxIM接口通信,整个聊天功能(私聊,陌生人,文本照片送礼发送),设置,黑名单,账号一系列操作,苹果登录,google登录,facebook登录,google人脸验证,aws3插件上传,声网视频聊天接入,多语言及脚本等等,还有苹果上架审核,前前后后也沟通了三四次,功能修改了了好几次,上架花了两个星期,最后在审核通过后的第二天...

账号被封了(跟项目无关,账号的原因)

...

...

...

当时我的表情就是这样的😅😅😅,算是我这2023年最大的笑话了😂...

相关推荐
Flutter社区6 小时前
使用 Flutter 3.19 更高效地开发
flutter·dart
Forever不止如此9 小时前
【CustomPainter】绘制圆环
flutter·custompainter·圆环
wills77710 小时前
Flutter Error: Type ‘UnmodifiableUint8ListView‘ not found
flutter
AiFlutter1 天前
Flutter之Package教程
flutter
Mingyueyixi1 天前
Flutter Spacer引发的The ParentDataWidget Expanded(flex: 1) 惨案
前端·flutter
crasowas2 天前
Flutter问题记录 - 适配Xcode 16和iOS 18
flutter·ios·xcode
老田低代码3 天前
Dart自从引入null check后写Flutter App总有一种难受的感觉
前端·flutter
AiFlutter3 天前
Flutter Web首次加载时添加动画
前端·flutter
ZemanZhang5 天前
Flutter启动无法运行热重载
flutter