反思—从React Native到Flutter

Reflected确实确实可以在Android上运行,但与我们希望的样子相去甚远。 溢出失败,结果滚动元素丢失,阴影被奇怪地切除。 此外,动画的表现也令人难以忍受。

我们花了整整一个星期来修复Android体验-但是,我们仍然必须从Android应用程序中完全删除阴影和动画,以使其可用。 在接下来的6个月中,我们陷入了可怕的开发周期,即首先针对iOS进行构建,其次针对Android进行修复。 跨平台移动开发的希望之地是一种幻想。 我们对这一繁琐的过程深感沮丧。

信仰的飞跃

在2017年第三季度,Reflectly的人气稳步增长。 我们每天从数百名新用户发展到每天数千名新用户。 每个人都喜欢该应用程序-但是随着它的普及,我们对React Native的不满也随之而来。

最终,我们在2018年初决定完全放弃现有代码库并重写所有内容。 最大的问题是; 投资什么?

React Native完全无法重写,主要是因为过去的经验。 过去,我曾经遇到过Xamarin,但犹豫不决地使用曾经是专有技术的技术。 我们认为最安全的解决方案是构建两个新的本机应用程序,但是,只有几个工程师在团队中,这种选择似乎在合理的时间内过于艰巨且不可行。

我们扩大了搜索范围,在2018年1月2日左右偶然发现Flutter。当时Flutter仍处于Alpha状态,因此对于我们公司而言,这是一种冒险的下注。 毕竟,我们正在尝试构建比现有产品更好的产品。

在对Flutter进行了一段时间的试验之后,我和团队爱上了跨平台的一致性,近乎即时的有状态热重装,出色的工具和平台的高性能。 在对Flutter的源代码进行更深入的检查后,我很高兴找到易于阅读且文档齐全的代码。

我们最大的担忧是缺乏用于本地通知和应用内购买的平台软件包。 但是,使用平台方法渠道似乎可以解决这些问题。

我们非常喜欢Flutter,因此决定飞跃信念,并承诺在2个月内用Flutter重写整个Reflectly应用程序。

打造日记的未来

Flutter入门很容易。 我们很快设法将UI的基本视图组合在一起。 iOS和Android上呈现的内容之间出现差异的日子已经一去不复返了。 知道UI可以跨平台一致地呈现,这让我感到非常高兴。 不再浪费时间编写易于出错的平台特定代码。

权衡? 被迫产生更好的代码,而这些代码需要花费更长的时间来编写。

Flutter应用是使用Dart构建的。 与Java一样,但与Javascript不同,Dart 2是强类型化的并且是面向对象的。 与Java不同,Dart看起来更轻松,而且感觉更轻巧。 来自JavaScript,它确实需要时间来适应Dart中的类层次结构和静态类型。 话虽如此,我认为从长远来看,付出额外的努力是值得的—维护和重构我们的代码库从未如此简单和安全。