Flutter 初探

2019-01-11 21:41:34 +08:00
 pjhubs

原文地址:PJ 的 iOS 开发日常

环境配置

根据 flutter 中文官网上所引导的步骤进行配置,中途可以根据 flutter doctor 命令进行检查相关依赖是否配置完成。

设备

遇到的问题

初体验

Flutter 官方上说的优势之一为“热重载”,新建 flutter 测试项目分别运行在 iOS 和 Andriod 两台测试设备上,iOS 的热重载只要每次 cmd + s 即可,但 Andriod 需要执行两次(非必现),看第一次打印出来的信息提示已经完成 hot reload,但设备上什么都没出现,必须执行第二次 cmd + s 操作后,才能看到真正的 hot reload 的效果。

flutter 官网上对于“热重载”是这么描述的:

通过将更新后的源代码文件注入正在运行的 Dart 虚拟机( VM )中来实现热重载。在虚拟机使用新的的字段和函数更新类后,Flutter 框架会自动重新构建 widget 树,以便您快速查看更改的效果。

所以对于在 meizu 15 上需要执行两次保存操作才能触发“热重载”后的效果展示,我的推测是,在第一次执行保存操作时要么没有把新更新后的代码注入进 Dart 虚拟机中,要么就是注入了但未触发重新自动构建 widget 树。

渲染

Flutter 的一大特点,基于 Skia 框架直接进行 UI 的绘制,在 iOS 和 Android 上都脱离了系统 UI 库,先不讨论具体性能如何,但这种做法相当于至少在 UI 渲染这一层 Google 已经在 iOS 和 Android 两个平台上自己都控制了,可能会受限一些系统 API,但也可以做一些原生不支持的事情。

差异点

void main() => runApp(new MyApp());

// 我的推测:上下两者相等,论简洁性,确实是好看一丢丢
void main() { runApp(new MyApp()) }

一些简单操作

总结

经过这次对 Flutter 的初体验,对其惊叹的地方有:

目前来看不满意的地方只有一个: 在 iOS 上的长列表滑动卡顿十分严重!!!在快速滑动下,估计只有两三帧,而且每一个 ListTitle Widget 上只放了一个 Text Widget 啊!太辣眼睛了......视频在此,对 Flutter 抱有所谓“高性能”的同学可以死心了。

2415 次点击
所在节点    问与答
8 条回复
jedrek
2019-01-11 22:12:16 +08:00
未遇到过这样的卡顿, 把代码放出来才有说服力
pjhubs
2019-01-11 22:51:24 +08:00
@jedrek 这代码就是 flutterclub 上的事例,请自行移步
lynan
2019-01-12 08:38:36 +08:00
调试模式和打包出来的运行效果差别很大的。
嘤嘤嘤
wly19960911
2019-01-12 09:14:23 +08:00
debug 模式和 release 的 aot 编译效果不一样的,debug 需要加上很多包,而且你 hotreload 怎么办。
gitopen
2019-01-12 10:51:25 +08:00
打包出来就好多了。debug 模式比较卡
pjhubs
2019-01-12 12:32:16 +08:00
@gitopen 我说的差异是 Android 和 iOS 在同一环境下的情况
pjhubs
2019-01-12 12:33:22 +08:00
@wly19960911 嗯,明白了
ihainan
2019-02-14 18:54:05 +08:00
我之前也感觉 Flutter 列表的滚动不如 native …一直找不出原因就弃坑了,今天没事又搜了搜,看到近期的一个 issue: https://github.com/flutter/flutter/issues/22314。

只能说刚起步,坑还是太多。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/526207

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX