作者| 尼克·曼宁
译者| 薛敏登
在这篇文章中,我将分享我使用Flutter 的经验以及我一路上发现的Flutter 的所有优点和缺点。
在过去的一年里,我如何使用Flutter?
使用Flutter 重写在App Store 上发布的iOS 应用。我们开发了免费的Flutter 速成课程,并录制了超过5 个小时的教学视频内容。我将使用Flutter开发一些尚未发布的小应用程序。以下是我在过去一年中使用Flutter 学到的知识:
1、Dart 易学易用
Dart 比TypeScript 或Flow 更容易学习并且语法更简单。开发速度更快,因为编译器提供了清晰的错误消息以及更少的隐藏和意外运行时错误。在开发中型应用程序时,开发人员应该采用强类型语言,这极大地有助于加快开发速度并编写可靠的代码。
2、偶尔还要“自己动手”
当您采用新技术时,您可能需要创建“您自己的”库以与第三方服务集成。例如,要将Mixpanel 集成到您的应用程序中(因为它提供免费层选项和非常简单清晰的UI),您需要开发自己的库pure_mixpanel (https://pub.dartlang.org/packages/pure_mixpanel)。这没什么大不了的,实际上很有趣。
我个人使用scoped_model取得了很大的成功。这为需要使用流的地方提供了一个很好的抽象,并且工作方式与React 的新Context API 非常相似。它提供了业务逻辑和渲染逻辑清晰完整的分离,并且非常容易学习。
3、架构和状态管理模式还不够成熟
首先,Flutter是一项新技术,因此在实际应用、可靠的架构模式和状态管理工具方面仍然需要发展。有些遵循“BLoC”(或“业务逻辑组件”,https://www.youtube.com/watch?v=fahC3ky_zW0)模式。在我看来,这有点太复杂了,而且有些复杂性是不必要的。
还有RxDart (https://github.com/ReactiveX/rxdart) 和Redux for Flutter (https://pub.dartlang.org/packages/flutter_redux),但我还没有使用它们,因为它们看起来太复杂了。然而,Android 或React 开发人员可能拥有大量成功使用它们的经验,并且可能会习惯使用它们。
我认为随着越来越多的人开发越来越复杂的Flutter 应用程序,整个生态系统将在2019 年进一步成熟。
4、热重载仍然很重要
这个没什么好说的,但是Flutter的这个特性非常重要,所以这里需要单独讨论一下。更快、更可靠。
5、跨平台设计很难
Material Design 非常棒,对于Android 应用程序以及某些类型的Web 应用程序来说是明智的选择。然而,除非它是Google 应用程序或非常简单的应用程序,否则对于已经习惯了CocoaTouch 式UX 的iOS 用户来说这不是一个好主意。
当基于相同的代码库为两个平台开发应用程序时,越来越多的人正在使用某种定制的定制设计并引入通用的设计元素(例如选项卡栏)。 Flutter 也提供了许多iOS 风格的widget,但为了减少代码维护成本,大多数人选择定制Flutter 的Material Design 库,这非常容易实现。
我很想就这个主题写一篇单独的文章,但我的建议是坚持使用Material Design,这样对于iOS 用户来说就不会感觉太“Android 化”。例如,表单使用Material Design 样式来装饰表单字段,使两种类型的用户都对它们足够熟悉。
6、使用 Flutter 实现复杂的布局其实容易
我习惯于使用React、CSS Grid 和Flexbox 等库来实现布局。 Flutter 的布局方法从这些工具中汲取了很多灵感。如果您已经熟悉这些基于Web 的布局概念,那么学习Flutter 布局就非常容易了。即使没有经验的用户也可以轻松学习。如果您想知道那是什么感觉,请观看此视频。
https://fluttercrashcourse.com/lessons/container-layout-column-row
另外,Dart和Flutter的UI逻辑在代码可读性方面非常好。一般来说,我更喜欢自己实现布局而不是使用JSX 等。它让我想起以编程方式实现Swift 和iOS 中的布局逻辑是多么简单。
7、将会有更多端到端的应用示例
现在有很多关于Flutter 的文档、教程和社区,但我认为人们过于关注小部件。这并不奇怪。 Flutter 还很年轻。但最终,越来越多的人使用Flutter 来开发更完整的应用程序,而不仅仅是纯粹的UI 和动画。我认为Flutter 网站上将会有更多端到端的示例教程。
您学习了如何使用Flutter 开发整个应用程序,而不仅仅是小部件。我发现许多Dart 高级功能非常有用。我提到的架构模式也值得进一步研究。最后,与Web 服务和其他Dart 最佳实践的集成需要更多文档和教程。
8、我的下一个项目将使用 GraphQL 或 gRPC
我总是想使用更少的样板代码。有一些工具(https://flutter.io/docs/development/data-and-backend/json)可以帮助您解决此问题,但对于您的下一个项目,请使用GraphQL 或gRPC。我认为这两种技术都值得投资。至于gRPC,我不推荐在小型项目中使用,但对于中型或大型项目,一旦使用就很难回头。 gRPC 在我用Swift 开发的项目之一中运行良好,并且已经在生产中运行了几年。
9、提交应用程序都非常简单
尽管学习为每个平台(尤其是Google Play Store 和iTunes Connect)提交应用程序所需的工具和步骤需要时间,但实际上非常简单。
10、Flutter 提供了太多的小部件
我曾经学过所有我认为需要学习的小部件,但最终只能使用其中的大约20%。例如,中心小部件(https://docs.flutter.io/flutter/widgets/Center-class.html)。
为什么要使用单独的widget 来居中元素?对于初学者来说很容易上手,但是当用于实现更复杂的布局时,嵌套的Dart 代码就变得可能过剩。相反,选择基本容器布局(https://docs.flutter.io/flutter/widgets/Container-class.html)。这是因为它非常灵活。
我的建议是专注于基本的简单小部件,仅在您确实需要时才了解其他小部件。
11、放弃 Firebase(只用来实现推送通知)
Firebase 似乎是一个很棒的产品。让我想起了旧的Parse (https://parseplatform.org/)。对于简单的项目或后来需要将项目移交给没有足够专业知识的开发人员的客户来说,这似乎是一个不错的选择。
事实上,大多数公司已经拥有自己的后端,并且一些技术团队选择开发自己的后端。大公司和初创公司倾向于这样做。
如果你是一名独立开发者,如果你的流量激增,你能负担得起Firebase 的月费吗?事实上,这是我避免使用Firebase 的主要原因。如果我遇到了病毒式的“梦想问题”并且Firebase 根据使用情况向我收费,我该怎么办?
我有这种偏见是因为我以开发后端系统为生。如果您是初级开发人员,并且您开发的后端最终将移交给客户,或者即使您不开发后端API,我们强烈建议您考虑Firebase。
12、Flutter 的文档越来越好了
Widget 和类文档包括更多数量的示例。
https://docs.flutter.io/flutter/widgets/Container-class.html
与其他缺乏文档的库相比,这是Flutter 的一个优势,更不用说编写良好的文档了。
除了文档之外,去年我们还得到了Stack Overflow 上许多热情且知识渊博的人员的帮助。
13、我被 iOS 和 Flutter 的开发体验宠坏了
我从事iOS 开发已经很多年了,所以我对iOS 开发者体验有点宠坏了。它不仅改进了文档和支持,还改进了iOS 生态系统的整体质量,从库到Xcode,再到CocoaTouch SDK 的配置方式。
Flutter 提供了类似的体验。它非常简单,但也融合了ListView 等React Native 组件的简单性。所以,总而言之,成熟工具的配合,让学习和使用Flutter变得非常顺利。
14、无法回到“单平台”移动开发
视频游戏开发人员可能不会考虑仅为一个平台开发代码库。感谢React Native 和Flutter,“非视频游戏”开发者现在也可以做同样的事情。
例如,在空闲时间,我和我的妻子(一名用户体验设计师)一起开发应用程序。自从我们将iOS 应用程序转换为Flutter 以来,我们的用户数量增加了一倍,现在可以在两个平台上运行它,所以我们不能再回到一个平台了。
15、最后的想法
经过一年的努力,我开始开发我的下一个Flutter 应用程序。我真的很感谢花时间学习Fluttert。对于企业来说,现在可以选择开发多平台应用程序,对于开发人员来说,它使用起来很有趣。当你将这一事实与谷歌在Fuschia OS 上对Flutter 的投资结合起来时,仅这些事实就表明谷歌非常重视这项技术。
英文原文:
https://hackernoon.com/one-year-with-flutter-my-experience-5bfe64acc96f
原创文章,作者:小条,如若转载,请注明出处:https://www.sudun.com/ask/82956.html