189 8069 5689

flutter工作流程,简书 flutter

2021-12-23 flutter module源码方式集成流程分析

官方文档

创新互联专注为客户提供全方位的互联网综合服务,包含不限于成都网站设计、成都做网站、赵县网络推广、成都小程序开发、赵县网络营销、赵县企业策划、赵县品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联为所有大学生创业者提供赵县建站搭建服务,24小时服务热线:18980820575,官方网址:www.cdcxhl.com

将 Flutter module 集成到 iOS 项目

(1)这时候还没有App.framework , podspec文件是有了

(2)有engine,Flutter.framework。

(3)有插件列表 podspec FlutterPluginRegistrant.podspec,这时没有symlinks/plugins目录软链接

(4)导出当前的环境变量 flutter_export_environment.sh

flutter-plugins-dependencies

执行 podHelper.rb 脚本

做2件事情:

/Volumes/huc/opt/fvm/versions/2.2.0/packages/flutter_tools/bin/xcode_backend.sh build

多了.symlinks 和App.framework,重新拷贝了Flutter.xcframework

Pods-HouseCommercialCube-frameworks.sh

执行 xcode_backend.sh

做3件事情:

AppFrameworkInfo.plist

assets_path 这个后面也没有人用啊!

放到.ios下面

.ios/Flutter/engine/Flutter.xcframework

编译前, 把这个下面添加一个空文件, engine被覆盖了,那么那个空文件就没了?

对比了一下大小。 release

debug 版本的Flutter.xcframework 255M

ios-release 1.03 GB

一开始是1.03G, run之后, 变成了255M

说明确实拷贝到这里了

.ios下面App.framework 没有变

App.framework 61Mb

Flutter.framework 35Mb

"${PODS_ROOT}/Target Support Files/Pods-HouseCommercialCube/Pods-HouseCommercialCube-frameworks.sh"

Flutter开发--如何布局?

相对于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特有的控制显示隐藏的控件。

[Flutter] Golden File Test 的原理

测试的重要性就不在这里赘述了,本篇重点想聊一下Flutter的Widget测试(其他框架称为组件测试)中的Golden File test。

那么什么是Golden File Test呢?

Golden File Testing are like unit tests, except the expected output is stored in a separate file. -- Max Grigorev at ZuriHac

如果有前端经验的童鞋可以理解Flutter的Golden File Testing相当于Jest的快照测试。Flutter将期望的结果存储在图片文件(Golden Image)中。

Widget测试的目标是验证小部件的UI如预期那样的外观和交互。所以Golden File Testing 不等价Widget测试,但通过它可以很方便的测试Widget的UI是否如预期的外观一致。

Golden File Test怎么写,官方有很多例子,这里就不细讲。

和快照测试类似,工作流程如下:

在整个工作流程中,有3个关键点:

那我们接下来一个一个的看这三个问题。

生成和更新基线,Flutter提供了命令行:

flutter test --update-goldens

只跑某个测试文件可以指定文件路径:

flutter test --update-goldens path_to_test_file

不实用 --update-goldens 参数,会直接生成新的图片

通过它,可以在运行测试的同时,生成/更新图片。

理解以下内容,需要对Flutter 渲染流程及相关的概念有了解,此处赘述,如果不了解请移步

architectural-overview

element

render object

isRepaintBoundary , layer

scene

当测试在执行断言的过程:

根据需要,可以继承 LocalFileComparator 并复写的 compare 和 update 方法得到你想要的对比器,并通过 flutter_test_config.dart 指定对比器。

了解Flutter Golden File Test的原理,可以帮组我们更好的去思考什么时候需要使用它。


分享文章:flutter工作流程,简书 flutter
标题路径:http://cdxtjz.cn/article/hodjse.html

其他资讯