转载

掘金 AMA:听闲鱼客户端架构师--邬吉风聊 Flutter 和移动端开发那些事

第二十一期 AMA 掘金团队请来了闲鱼客户端架构师,《Fish-Redux》作者--邬吉风做了为期三天的 Ask Me Anything (AMA) 活动(活动已结束)。 我们在此精选了一些来自用户的提问及邬吉风的回答。

关于 邬吉风

阿里花名吉丰, 《Fish-Redux》作者。现任闲鱼客户端架构师,负责研发效能 & 高可用相关工作。

掘金 AMA:听闲鱼客户端架构师--邬吉风聊 Flutter 和移动端开发那些事

提问目录

  • 社区小伙伴精选提问--技术相关
    • 用 Flutter 的过程中遇到几点问题?
      1. 没找到普通意义上的文本行间距设置方式,基本上都是leadind和height等参数而不是两行之间间隔大小。
      2. 在Refresh控件刷新过程中,除了等待Future之外,貌似没有办法直接打断刷新状态。
      3. Flutter的热更新方案除了闲鱼提出的模板json外,对于ios还有其他可行方案吗?
      4. Flutter状态管理fish redux和google的provide优劣?
    • Dart会替代js吗? ─ @A小恐龙
    • 你们是如何解决TextField Widget 的光标高度问题的?
    • 对Provide状态管理怎么看?可以直接在fish_redux里面用吗? -@洺鱼
    • widget嵌套太不方便阅读了,有什么解决的办法?-@caiweijian
  • 非技术相关-- 技术观点
    • 如何让我能够在redux的世界里能够杀出一条血路? -@正楷
    • 关于移动端和大前端的未来?-@hanliuxin5
      1. 在目前大前端浪潮越刮越涌的情况下,原生开发的优势和劣势何在。
      2. 小公司如何更有效的开展大前端技术的布道。
      3. 对移动端开发未来的展望。
    • 关于 Flutter 的几个问题 -@Vadaski
      1. 客户端新手直接学习Flutter来入门可以吗
      2. Flutter目前生态中有没有硬伤的部分
      3. 您认为客户端开发的理想状态是什么。 问题比较多,嘿嘿。 期待吉丰老师答复。
    • 我是一名安卓研发,现在在考虑接下来学习rn还是flutter,能给个建议么? -@啃手指的大笨熊
    • 对使用flutter与其他语言混合开发比较感兴趣(比如用flutter构建用户界面,用rust/kotlin写业务逻辑),能否讲讲? -@VitalyR

社区小伙伴精选提问--技术相关

用 Flutter 的过程中遇到几点问题? -@恋猫de小郭

  1. 没找到普通意义上的文本行间距设置方式,基本上都是leadind和height等参数而不是两行之间间隔大小。
  2. 在Refresh控件刷新过程中,除了等待Future之外,貌似没有办法直接打断刷新状态。
  3. Flutter的热更新方案除了闲鱼提出的模板json外,对于ios还有其他可行方案吗?
  4. Flutter状态管理fish redux和google的provide优劣?
  1. flutter目前是没有line-space的选项,但是我们可以通过换算得到相同的结果。
  2. 自定义Refresh控件的原理和native基本相同,是可以完全控制的。Future是一个对异步的封装,在刷新过程中,使用Future是一种实现手段。
  3. Flutter的热更新方案除了闲鱼提出的模板json外,建议是跟随Google的官方方案。
  4. provide方案目前已经不再建议使用,它的替代者是 scoped_model。

抛开场景直接做比较是不合理的,scoped_model和fish-redux,在各自的场景下有各自的优势。

相对而言,fish-redux 更适合有一定复杂度的中大型的项目。它核心解决了状态集中管理和组件分治管理的关系,所以一方面我们能享受到Redux集中管理的巨大好处,另一方面我们也能享受到组件化分治的能力。同时对移动应用中最常见的ListView场景对了做了上层抽象,得到最佳的性能和最佳的分治模型。

Dart会替代js吗? ─ @A小恐龙

Dart会替代js吗?

我认为dart不会完全替代js,但是会作为一种对js的补充存在。同时dart语法上有非常多的对js的继承,对js的同学在语法上算是友好的。

你们是如何解决TextField Widget 的光标高度问题的? -@掘金社区首席装逼CTO

你们是如何解决TextField Widget 的光标高度问题的? flutter环境Flutter (Channel beta, v1.3.8, on Mac OS X 10.14.3 18D109, locale zh-Hans-CN) 左边是咸鱼,右边是我做的

掘金 AMA:听闲鱼客户端架构师--邬吉风聊 Flutter 和移动端开发那些事

你截图里的闲鱼页面是用的native的输入法,不过我们目前已经在将它变成flutter的实现了(内部对flutter的patch)。

而你的右截图是flutter的实现,其实是一个flutter的bug,它将空格符的高度作为光标的高度和所有textfield文本内容的高度,这导致了一系列的问题。

github.com/flutter/flu… github.com/flutter/flu…

好消息是flutter团队正在处理这个问题,相信不久后,这个问题将得到彻底解决。

对Provide状态管理怎么看?可以直接在fish_redux里面用吗? -@洺鱼

对Provide状态管理怎么看?可以直接在fish_redux里面用吗

Provide状态管理目前已经不再推荐了,它可以在fish_redux内使用,但并不推荐这样做。fish_redux更加强调的是单一数据源驱动。 当然如果有更加具体的case的话,欢迎去https://github.com/alibaba/fish-redux/issues 给我们issue。

widget嵌套太不方便阅读了,有什么解决的办法?-@caiweijian

widget嵌套太不方便阅读了,有什么解决的办法

可以通过IDE的重构能力,拆分成若干小的函数,一定程度上会让可读性提高。

非技术相关-- 技术观点

如何让我能够在redux的世界里能够杀出一条血路? -@正楷

你好,我也是redux爱好者,不过基于对redux的不满重新写了一个flux架构的实现:react-control-center, counter实例: stackblitz.com/edit/cc-cou… , cc-antd-pro: github.com/fantasticso… , 我自己认为这样的方式是最接近react的方式去管理react状态,但是苦于redux生态已经做大做强,不知道你cc有何看法,或者建议,让我能够在redux的世界里能够杀出一条血路。

redux爱好者和强烈的不满似乎是个矛盾体。 我简单看了你给的链接,看上去是个不错的设计。 开源本身是成就你我,普惠众人,没有那么强的对立性,建议是拥抱redux社区,做出更好的作品。

关于移动端和大前端的未来?-@hanliuxin5

  1. 在目前大前端浪潮越刮越涌的情况下,原生开发的优势和劣势何在。
  2. 小公司如何更有效的开展大前端技术的布道。
  3. 对移动端开发未来的展望。

在当下,原生开发的优势依然存在,但从软件架构分层看,它更加适合往下层发展。 而对于广大的软件开发者而言,日常最多的往往是上层的具体业务需求,受效率和成本的驱动,将越来越趋向统一的跨端解决方案。

大前端是一种解决方案,flutter也是,它们有各自适合的场景,在这个基础上,我相信它们都会成为下一代的主流的跨平台解决方案。

而在这个过程中,小公司反而是更加容易拥抱变化,成为这个技术领域的先驱。

关于 Flutter 的几个问题 -@Vadaski

  1. 客户端新手直接学习Flutter来入门可以吗,对于新手来讲学习Flutter难点有哪些呢,在了解Flutter之后如果想要进一步拓展,下一步的技术学习方向定哪些会比较好呢。
  • 现在Fish Redux的学习成本相对还比较高,未来有没有计划对这个进行优化呢,例如详细教程等。
  1. Flutter目前生态中有没有硬伤的部分,前两天在图文混排上遇到了坑,文字自动填充图片右边和下面空间这样的排版,暂时还没有踩过去,闲鱼有相关解决方案么。还有其他哪些不太好踩的坑需要注意呢。
  2. 目前看到有在用TensorFlow自动生成UI代码,三端一体化,组件化,确实很有吸引力,您认为客户端开发的理想状态是什么。 问题比较多,嘿嘿。 期待吉丰老师答复。
  1. Flutter,就上层应用开发而言,对于新同学是非常友好的一个框架。我建议在有实践的场景学以致用,是比较有效的学习方式。选择技术方向也是类似,只有在对的场景才有用。
  2. Fish Redux 是通过大量实践检验的项目,但在文档方面仅仅是满足最基础的要求,后面我们会对文档整理和细化,也非常欢迎更多的社区同学加入进来,一起让它变得更好,让它慢慢演进成一个有影响力的flutter应用框架。
  3. 从闲鱼的实践来看,flutter的问题已经很少了,目前在键盘、输入法相关场景下,flutter比native稍差些。图文混排可以自定义,一般是将图片转化为一个宽度为0字符,然后给它设置宽高。
  4. Ui2code也是闲鱼技术团队在做的一个技术项目,我自己也曾参与其中, 我相信它是未来终端技术的一部分,并且在不远的将来,就会变为一种通用的能力。

我是一名安卓研发,现在在考虑接下来学习rn还是flutter,能给个建议么? -@啃手指的大笨熊

现在闲鱼ios版本也使用了flutter么?选用flutter而不是rn的考虑是什么?混合开发的情况下,为了部分页面而引入flutter的sdk,导致安装包大小变大,会不会得不偿失? 我是一名安卓研发,现在在考虑接下来学习rn还是flutter,能给个建议么?

是的,目前闲鱼的Flutter是运行在两个平台上的。 引入Flutter,在Android端大致增加了6M大小,并不是特别大,是可接受的范围。

RN和Flutter之间的比较,应该有非常多的文章。以我浅见看,RN是一种中间妥协方案,它会被浏览器技术的进步而取代,而Flutter是更加面向未来的一种彻底的跨平台渲染框架。

对使用flutter与其他语言混合开发比较感兴趣(比如用flutter构建用户界面,用rust/kotlin写业务逻辑),能否讲讲? -@VitalyR

对使用flutter与其他语言混合开发比较感兴趣(比如用flutter构建用户界面,用rust/kotlin写业务逻辑),能否讲讲?想这样做是因为不太喜欢dart的语法,以及希望用rust可以提高性能。

选择任何技术都有它对应的场景,抛开具体场景谈技术是不合适的。

比如使用rust来编写业务逻辑,它适合什么场景,解决了什么问题?

如果比较性能,dart 代码AOT下会被编译成机器码,它的性能不可能会比rust低。

如果是语法问题的话,我建议是更加开发的姿态去接受新鲜技术的挑战。

我自己过去对dart也会存在疑问,但是随着深入使用,会渐渐喜欢上dart。它使用友好,产物小,性能高,同时拥有AOT和JIT,支持毫秒级的hot-reload等等特性,这样你也能更加深入的理解为什么Google选择dart作为flutter的开发语言,它几乎就是最佳的终端语言选择。

福利篇-闲鱼招人

闲鱼作为阿里巴巴在闲置流通领域的战略产品,是业内第一的闲置交易社区。

闲鱼技术团队推行打破技术栈分工限制(Android/iOS/HTML5/Server 编程模型和语言的统一), 以及计算机视觉技术在移动终端上的前沿实践工作。致力于利用先进技术推动业务发展。 特别的是,我们在 Flutter 和 Tensorflow Lite 等新技术的研发及应用处于行业领先位置,加入我们,一起用技术让生活变得更加美好!

闲鱼团队现面向各大高校诚招 客户端/服务端Java/前端/测试 实习生,base杭州阿里巴巴西溪园区 特别的我们非常欢迎有算法经验的工程同学加入我们的团队,一起完成深度学习在UI识别、商品内容理解、视频图片分类和质量检测等领域的应用落地,让算法的价值普惠闲鱼亿级用户。 欢迎各位投递简历,详询tino.wjf@alibaba-inc.com

由于篇幅原因,本期只摘录了部分问题,邬吉风 也回答了很多其他的技术、非技术问题,欢迎去他的 AMA 下面交流技术哟,传送门。

原文  https://juejin.im/post/5cb728e35188253fec545f0a
正文到此结束
Loading...