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年最大的笑话了😂...

相关推荐
我要最优解16 分钟前
关于在mac中配置Java系统环境变量
java·flutter·macos
江上清风山间明月1 天前
Flutter开发的应用页面非常多时如何高效管理路由
android·flutter·路由·页面管理·routes·ongenerateroute
Zsnoin能2 天前
flutter国际化、主题配置、视频播放器UI、扫码功能、水波纹问题
flutter
早起的年轻人2 天前
Flutter CupertinoNavigationBar iOS 风格导航栏的组件
flutter·ios
HappyAcmen2 天前
关于Flutter前端面试题及其答案解析
前端·flutter
coooliang2 天前
Flutter 中的单例模式
javascript·flutter·单例模式
coooliang2 天前
Flutter项目中设置安卓启动页
android·flutter
JIngles1232 天前
flutter将utf-8编码的字节序列转换为中英文字符串
java·javascript·flutter
B.-2 天前
在 Flutter 中实现文件读写
开发语言·学习·flutter·android studio·xcode
freflying11193 天前
使用jenkins构建Android+Flutter项目依赖自动升级带来兼容性问题及Jenkins构建速度慢问题解决
android·flutter·jenkins