最近在做的一个项目,项目的前期采用Weex开发。但是随着交互复杂度的增加,Weex一处开发多处多处运行的特征并没有很好的体现,相反很多时候我们还是需要做IOS和Android的适配。如今火热的Flutter相比Weex和Rn来说,给出了更好的跨平台解决方案。所以我们设计了一套基于Weex实现,底层跑在Flutter Engine上的框架。
创新互联公司是一家专注于做网站、网站制作与策划设计,苏尼特左网站建设哪家好?创新互联公司做网站,专注于网站建设十余年,网设计领域的专业建站公司;建站业务涵盖:苏尼特左等地区。苏尼特左做网站价格咨询:13518219792
底层的Runtime采用isolate engine,框架业务逻辑,Dom的解析逻辑和Render逻辑都跑在这里。
渲染引擎采用Flutter的Skia,彻底剥离了Android和IOS的差异性.
将Weex VirsualDom的解析都替换成Flutter Widget.
设计基于Weex2Dart的Brider,使JS和Dart可以相互调用
weex-demo的性能展示
release环境下采用AOT模式,性能会有质的飞跃。
Android-Release版本只有10m大小
相比Weex和Rn具有更好的性能,同时具有更好的跨平台性
相比Flutter,具有动态部署的能力(Flutter Release采用AoT模式并没有动态部署的能力,即使Debug版本也只是开发环境下才有动态化能力并没有可以实施项目的能力)
只需要会Weex开发或则Rn开发就可以,不需要额外学习Dart,已有的Weex项目可以无缝切换。
因为我们使用Flutter跨平台技术开发App时,会有很多公用组件,因为Flutter中一切皆为Widget,widget也比较细粒度,所以我们需要进行封装,用于一个项目或者公司不同项目中去~
那么今天写写如何发布package或者插件到Pub.dev上,扯扯谈O(∩_∩)O哈哈~
《Flutter的拨云见日》系列文章如下:
1、Flutter中指定字体(全局或者局部,自有字库或第三方)
2、Flutter发布Package(Pub.dev或私有Pub仓库)
首先,我们知道flutter有四种工程模式:Flutter Application、Flutter Module、Flutter Plugin和Flutter Package。
我们这里就主要讲Package 纯Dart插件的发布吧,都差不多。
创建工程后,就可以编写你的公共组件,或者公用字体库呀啥的, 都行。
在更改下你的pubspec.yaml文件,修改下你的versionCode,项目名称,项目描述,作者等
如果上传失败试试????的命令:
在执行该命令时,可能会中途调到网页,要求你登录google账号,登录授权,到时候登录账号并授权就可以了。
因为我们直接使用flutter packages pub publish是发布到Pub.dev上,并不是发布到私有仓库,该怎么办呢?
其实呢,也很简单!像versionCode,项目名,等都和发布Pub.dev是一样的。没啥区别。
有两种方式:
就是这么简单o( @ )o
相信大家引用Pub.dev上的第三方库都会了哈,到处都是这里不讲了
在使用flutter pub get就可以拉到私有仓库项目了
以上就差不多聊了聊package发布和获取的事儿了,都很明了,大家可以试试,挺简单的。
PS: 写文不易,觉得没有浪费你时间,请给个点赞~ ????
操作系统:macOS Big Sur
前置需求:
ok,开始搞jenkins
1、使用homebrew安装jenkins
Terminal运行命令brew install Jenkins
2、运行jenkins
Terminal运行命令jenkins,最终出现 Jenkins is fully up and running代表运行成功
3、初始化jenkins
在浏览器地址栏输入
然后首次安装启动就会出现新手引导,根据引导操作
自定义jenkins那里选择安装推荐的插件
PS:这里我很多插件都安装失败了,这个没关系,可以进去再自己安装或者不再安装貌似也没啥影响,继续向下操作即可
最后的实例配置那,默认即可,也可以设置一个地址
PS:如果要设置的话,就是自己的电脑ip地址+8080端口就行,配置完之后系统管理里报了一个反向代理设置有误,目前没发现这个报错有什么不好的影响,这个地址也可以以后在jenkins系统管理-系统配置里改的,这个主要是用来让别的同事来访问时要用的,自己用的话就不用设置,额外说一个,如果同事电脑挂了vpn,大概率是访问不了你设置的这个地址的,退掉vpn即可
4、安装插件
进来第一步就是安装插件了,这里要用到哪些我也是根据别人的博客找的,但是由于我主要是用shell命令,所以好像很多都没用上,但是安装了也不亏。。。
gitLab Plugin、gitLab Hook Plugin、Xcode integration、keychains and provisioning profiles Management,DingTalk等
PS:说下这个Upload Keychain or Provisioning Profile File插件,这个是用来管理iOS证书和配置文件的,但是吐血的是,无论如何都传不上去,搞到头秃,最后没办法,放弃治疗,好在还有别的办法,往下看
然后DingTalk这个是在构建成功后自动通知到钉钉群的插件,我这边用到了,下面也有介绍
5、iOS相关设置
系统管理-Manage Credentials
点击 Stores scoped to Jenkins下面的域-全局,然后就可以添加全局凭据了,这里要添加的是:
Upload Keychain or Provisioning Profile File插件用不了,配置文件在这里添加也是一样的
6、Android相关设置
系统管理-系统配置-全局属性-环境变量
Android SDK设置
系统管理-全局工具配置
JDK设置
Gradle设置
7、钉钉插件通知配置
在钉钉群的设置-智能群助手-添加自定义机器人
要复制一下webhook链接,下面要用,还有关键字设置,要钉钉和jenkins一致
在jenkins系统管理-系统配置中,设置钉钉,点击测试如果群聊能收到通知就可以
8、新建任务
这里是Android和iOS各建一个,选择freestyle即可,两边别的都一样,就是shell命令不一样,下面会贴
点开新建的任务,点击配置
①描述和钉钉
②git信息
git这里是自己项目的git地址和之前全局配置的git账号密码,也可以再这里添加新的账号密码
③构建触发器和构建环境都不用选
④构建
选择执行shell,然后填写shell命令(iOS和Android我都贴上了,可以自己参考和修改)
里面的一些关键密码和文件名等,我改成了文字描述或者***,都填自己的
此shell支持的一些功能:清空指定文件夹,替换指定文件,替换指定文件的指定内容,导出安装包,上传蒲公英,安装包重命名(version+build+时间),安装包上传svn
Android apk打包shell
⑤构建后操作也不用做,保存
9、点击立即构建
如果构建失败可以点击当次构建,然后点击查看控制台输出,查看具体报错进行修改,一般来说只要androidStudio和xcode能够编译成功的话,这边问题都不大,一般都是一些小问题要改,如果构建成功,就会通知到钉钉群了
相对于iOS开发,Flutter的布局更具有灵活性,每个页面设计都不一样,相同页面可选择的布局方式也不一样,如果单纯的说应该如何去布局,我觉得不现实,大家可以参考下 Flutter官方的布局教程 。接下来,笔者,通过项目中的一个页面,来一步一步的拆解布局的流程。整个过程,基本上按照拆解、组件封装、具体布局这三步来的。
根据设计图,可以看出整体可以分成两部分,上面一部分是系统介绍模块,下面一部分是真正的登录内容,因为涉及到叠加,因此考虑用Stack;
系统介绍模块部分:整体也是涉及到叠加,考虑用Stack,分为四部分。最底部渐变色背景用一个contanier,无须指定位置,全视图扩展;载放logo图标在上一层,用Image。最后两个Text同级放在最上层。Image,Text各用Positioned包裹去指定位置。
登录内容模块是最外层是一个Contanier容器,去控制背景色和圆角。然后是一个Column元素,逐行排列。
第一行为Image,
第二行为Text,
第三行可以看成一个小Column,分两块进行布局
第四行可以看成一个小Column,分两块进行布局
第五行可以看作一个TextButton,
第六行可以看作一个Row,分三块进行布局
通过上面这样一步一步的分析后,基本上对大致的布局有了一个了解,最外层的控件大致选对(只要能实现的话,就是复杂度以及效率的问题),然后一步一步的拆解每一行的元素,如果有重复的或者觉得可以封装出来的部分,则进行下一步。
每一行的拆解,大致也是按照这个思路来进行,因此笔者在这里就不做讲解了。
在做到第三第四行的时候,发现这两个很相似,而且设计到一些交互逻辑,笔者就想对第三第四行的这种展示进行封装,觉得今后的布局可能会用到,因此在这一步,可以先把这一块儿抽离出一个控件。利用TextField来实现这种输入操作,具体的实现笔者不再详细的描述了。
经过这一步,整体的规划设计图已经有了,各个组件也都有了,接下来的工作就是组装了。
具体布局设计到一些细节的地方,例如整体Column的居中对齐(crossAxisAlignment)、间隔(Padding或Container包裹,笔者更喜欢用SizedBox占位)、居左居右居中(Align)、点击事件(GestureDetector)以及圆角(BorderRadius)等一些特殊情况。
像第六行row是放在底部的,就可以在第六行前面增加一个Spacer()去填充空白区域。
对文字颜色大小等,可以用TextStyle直接设置。
对于输入框的删除按钮,可以用Offstage这种Flutter特有的控制显示隐藏的控件。
在原生开发中, Android 使用 Gradle 来管理依赖, iOS 用 Cocoapods 来管理依赖,Node 中通过 npm来管理依赖。 Flutter 使用配置文件 pubspec.yaml (位于项目根目录)来管理第三方依赖包。
Pub 是Google官方的Dart Packages仓库,类似于node中的npm仓库,android中的jcenter,我们可以在上面查找我们需要的包和插件,也可以向pub发布我们的包和插件。
Pub工具 包含管理Package、部署Package和部署命令行应用的命令。
如果使用的是Flutter SDK,不要直接使用pub命令。而是使用flutter pub命令,如下:
命令pub get/upgrade/outdated 属于管理Package的依赖关系
用于检索当前 Package 所依赖的其它 Package。如果 pubspec.lock 文件已经存在,则根据该文件中保存的依赖项版本获取对应的依赖项。如有必要,将会创建或更新该文件。
更新 package 依赖
当你添加一个 package 后首次运行 flutter pub get, Flutter 将会保存在 pubspec.lock lockfile 中找到的具体 package 版本。这将确保当你或者团队中其他开发者运行 flutter pub get 后能得到相同版本的 package。
如果你想升级到 package 的最新版本,比如使用 package 的最新特性,请运行 flutter pub upgrade 。这将检索你在 pubspec.yaml 文件中指定的版本约束所允许的最高可用版本。
案例
在flutter项目中导入hive包,在pubspec.yaml文件中添加配置:
执行flutter pub get,可以在 pubspec.lock 中看到 hive 版本是2.1.0,这是因为目前hive的最新版本是2.1.0,配置“^”表示向最新版本兼容,具体可查看Package版本管理( ),所以再执行flutter pub upgrade 可以看到版本还是2.1.0,这个时候会发现pub get和 pub upgrade 效果一样。
但是未来如果 hive 发布了2.2.0版本,这个时候使用flutter pub get在pubspec.lock中看到hive版本依旧是2.1.0,而执行flutter pub upgrade 后在pubspec.lock中看到hive版本就是2.2.0。
现在先在flutter 项目的pubspec.yaml文件添加配置,指定hive版本是2.0.5,如下:
这个时候执行flutter pub get后,可以在pubspec.lock的文件中看到hive版本是2.0.5,如果这个时候更改配置为 hive: ^2.0.5,再执行flutter pub get就会发现在pubspec.lock的文件中看到hive版本还是2.0.5,这个时候可以执行flutter pub outdated查看依赖的每个 package,如下图,
可以看到,Upgrable项hive版本号为2.1.0,执行flutter pub upgrade 后可以看到在pubspec.lock的文件中看到hive版本是2.1.0
在pubspec.yaml文件添加配置:
lxx_package_demo信息如下图:
执行flutter pub get后在pubspec.lock中看到flutter_log版本是0.0.1
现在修改lxx_package_demo版本号为0.0.2,再执行flutter pub get
会发现版本会及时更新为0.0.2,这个时候执行flutter pub get/upgrade效果一样
参考文档: