[译] 我与 Flutter 的一年,Android开发框架

本文作者分享了一年来使用Flutter进行移动应用开发的心得体会。Dart语言简单易学,热重载功能强大,但架构和状态管理尚不成熟。Flutter在跨平台设计和复杂布局实现上有优势,但也存在过多的widget和需要自行封装库的问题。作者建议关注GraphQL和gRPC作为后端集成方案,并指出Flutter的文档和端到端应用示例仍有提升空间。
摘要由CSDN通过智能技术生成

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cRijVDUD-1630589007571)(https://user-gold-cdn.xitu.io/2019/2/6/168c32805b92dcfe?imageView2/0/w/1280/h/960/ignore-error/1)]

这是 Flutter 美好的一年。

大概刚好一年前,我写了一篇名为「为什么 Flutter 2018 年即将起飞」的文章。虽然 Flutter 几乎经过整个 2018 年的测试阶段才达成现在的 1.0 版本,但是它的社区和产品已经在这个过程中得到了飞速的成长,现在 Flutter 已经进入 GitHub 仓库 star 排名前 20。而这篇文章,介绍的是我一年来使用 Flutter 的经验,以及我在此过程中发现的 Flutter 的优缺点

过去一年我用 Flutter 做了什么:

  • 使用 Flutter 重写了一个之前就已经上架 App Store 的 iOS 应用
  • 发布免费 Flutter 速成课,录制超过 5 小时的教学视频。
  • 使用 Flutter 开发了一些尚未发布的小应用。

在我列出我的想法之前,先介绍一下我的技术背景,就移动开发来说我是 iOS 开发。另外,去年我在日常工作中也大量使用了 React Native。我不打算将 Flutter 与这些技术进行比较,但这些移动开发经验确实会影响我对 Flutter 的印象。

然后,以下就是我使用 Flutter 一年来学到的:

1. Dart 简单易学,愉快使用

相比去年我在 React Native 开发中广泛使用的 TypeScriptFlow,Dart 更容易学习,语法更简单。我能够高效开发应用,必不可少的是可靠的编译器,它有明确的,定义良好的错误消息,极少的意外隐藏运行时错误。如果有足够多的人希望了解相关内容,我会写一篇更详细的例子比较。我要说的是,即使是编写中等规模的应用程序,开发人员也应该考虑强类型语言,因为这为高速开发和编写可靠代码节省了大量时间。

2. 有时候仍然需要「自己动手」

涉及新技术的另一个常见情况是:需要「自己动手」写一个库对接第三方服务。例如,要使用 Mixpanel 分析我的应用程序(因为他们大方地给出了免费套餐,并且 UI 简单,清晰),我不得不自己动手封装一个库:pure_mixpanel,这不难,而且很有意思。

我使用 scoped_model 获得了不错的实践,因为它很好的去掉了流的使用,使用方法很像 React 刚更新的 Context API。你可以干净利落地将业务逻辑和渲染逻辑完美地分开,并且非常容易上手。

3. 架构和状态管理模式仍未成熟

Flutter 是一项新技术,因此在实践、架构模式和状态管理等方面仍然难以获得足够的意见。有些人遵循「BLoC」(business logic component)模式。因为我认为它有点过于的复杂,所以仍未确定使用它。还有 RxDartRedux for Flutter,这两个我还没用过,因为它们似乎也太麻烦了。另一方面,Android 或 React 工程师似乎有不少成功实践,可能是因为他们已经习惯这种模式。

我认为整个生态系统将在 2019 年成熟,因为越来越多的人正在编写更复杂的 Flutter 应用程序。

4. 热重载是个重点

关于这一点其实没什么好说的,Flutter 这个特性的重要程度,足以在本文增加这一节。Flutter 热重载很快,而且更可靠。对于其他技术的热重载,我真不敢这么说(告诉自己我没有黑其他技术)。

5. 跨平台设计不容易

Material Design 很美好,可以让我们快速起步。显然对于某些类型的 web app 以及 Android 应用来说是个不错的选择,但是将它呈现给 iOS 用户并不是一个好主意,除非它是谷歌应用或其他非常简单的应用。iOS 用户习惯使用 CocoaTouch 风格的 UX。

「一次编写随处运行」、定制的自定义设计、引入设计常见的设计元素(例如,标签栏)等情况越来越普遍。尽管 Flutter 确实提供了大量 iOS 风格的 widget,但为了使代码易于维护,大多数人会使用封装定制后的 Flutter 的 Material Design 库,这是很容易实现的。

我将撰写另一篇关于这个主题的文章,但我的建议是坚持使用 Material Design,可以在某些方面,试着让那些 iOS 用户觉得不那么「安卓」。以表单为例,使用 Material Design 样式的表单字段对两种类型的用户都是足够熟悉的。

6. 在 Flutter 中实现复杂布局很简单

我习惯使用 React、CSS Grid、Flexbox 等库来实现布局。Flutter 的布局方法从这些库中借鉴了许多。如果你已经熟悉这些基于 Web 的布局概念,那么学习 Flutter 布局将会非常简单。即使不懂 Web 布局,它仍然很简单。如果你想感受一下 Flutter 的布局方法,可以观看此视频

此外,从代码可读性的角度来看,Dart 和 Flutter 中的 UI 逻辑非常出色。总的来说,比起 JSX 我个人更喜欢这种布局方式。它让我想起了 Swift 和 iOS 中简单的布局逻辑(如果你是以编程方式实现布局的话)。

7. 仍然需要更多关注端到端应用示例

虽然有大量可靠的文档,教程,社区以及与其他 Flutter 使用者的帮助,但是这些都太着重于 widget 了。Flutter 刚出来时这确实很必要。但最终,越来越多的人不仅仅是实现纯 UI 和动画,而是开始编写更多更完善的应用程序,我认为 Flutter 的网站上应该突出介绍更多的端到端教程。这也是我自己开设课程网站的主要原因。

我学习编写 Flutter 应用并不局限于仅仅使用控件。我发现有许多更高级的 Dart 功能非常有用,你必须挖掘它们。我提到的架构模式也值得挖掘。最后,集成 Web 服务和其他 Dart 最佳实践集成仍需要更多文档和教程。

8. 下一个项目我将使用 GraphQL 或 gRPC

我总是争取更少的模版代码。虽然某些工具在一些简单项目中解决了我的问题,但我想我的下一个项目我会使用 GraphQLgRPC。我认为对这两者的投入都是值得的。关于 gRPC,我不推荐将它用于较小的项目,但对于中大型项目,一旦你使用它,就会爱上它。gRPC 在我的一个 Swift 项目行之有效,已经投入生产环境运行好几年了。

9. 在两个平台提交应用程序都很简单

你需要一定时间习惯为每个平台(特别是 Google Play 商店和 iTunes Connect)提交应用程序所需的工具和步骤,但这非常简单。我会说为 iOS 提交应用程序肯定更符合学习曲线。

10. Flutter 有太多的 widget

在 Flutter 应用开发过程我认为有必要学习的那些控件中,实际被我用到的大概只有 20%。例如 Center widget,为什么需要一个具备使子控件居中这样单一功能的控件?虽然它使新手很容易上手,但是在实现复杂的布局时,widget 会产生太多嵌套的Dart代码。相反,我会回到基本的 Container 布局,因为这相比起来更灵活。

我的建议先关注于简单,基本的 widget,真正需要时再学习其他 widget。

11. 我正在从 Firebase 转移(推送通知除外)

Firebase 似乎是一款出色的产品。它让我想起了当年的 Parse。Firebase 对这些情况是比较好的选择:简单的项目,或者你将要把项目移交到没有足够后端技术人员的客户时。

但事实上,大多数产品已经有现成的后端,或者技术团队编写自己的后端。不管大型公司或者甚至是初创企业都是如此。

对于独立开发者或小团体,如果你的流量激增,每月 Firebase 账单会发生什么变化?这就是我避免使用 Firebase 的主要原因,如果我的应用真的如梦想一般被用户疯传,Firebase 找我要钱怎么办?

请注意,我的职业是编写后端系统,所以这仅仅是我的个人看法。如果你是初级开发人员,想要将简单的后端交付给客户,或者你只是不想编写后端 API,我仍然推荐使用 Firebase。

12. Flutter 的文档越来越完善

Widget 和 class 文档现在有越来越多的示例(例如)。这是对比其他缺乏适当示例的库是巨大的优势,更不用说编写良好的文档了。

最后

对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们!

最后,我再重复一次,如果你想成为一个优秀的 Android 开发人员,请集中精力,对基础和重要的事情做深度研究

对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。整理的这些架构技术希望对Android开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。

为了大家能够顺利进阶中高级、架构师,我特地为大家准备了一套高手学习的源码和框架视频等精品Android架构师教程,保证你学了以后保证薪资上升一个台阶。

CodeChina开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》

以下是今天给大家分享的一些独家干货:

dn.net/m0_60958482/android_p7)**

以下是今天给大家分享的一些独家干货:

[外链图片转存中…(img-oVcRhj6g-1630589007572)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值