BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

用Flutter开发一个完整的应用是怎样的体验?

| 作者 Nick Manning 关注 1 他的粉丝 ,译者 Daniel_Hu 关注 1 他的粉丝 发布于 2018年8月2日. 估计阅读时间: 12 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

更新:我将发布一个名为Practical Flutter的新Flutter课程。 请点击此处进行订阅,该课程将在18年7月下旬推出。

今天早上吃了两份早餐。 我需要足够的能量来完成这篇文章。 自上一篇文章以来已经有很多内容需要提及,下面开始。

很高兴现在可以正式恢复写关于Flutter的博客文章,因为我第一个完整的Flutter应用将在一两周内发布到iOS和Android商店! 在过去的几个月里,我停止了更新博客,因为空闲时间用来了写这个应用。

Flutter是自Ruby on Rails或Go以来最让我感到兴奋的技术。 经过多年的努力深入学习iOS应用开发,最终疏远了那么多Android好友,这让我感到害怕。 此外,当时的跨平台框架对我来说毫无吸引力。

就在两年前,meetup(译注:社交应用)展示了用跨平台移动框架编写的应用程序,我觉得这些框架太苛刻,不稳定,不友好的开发体验,难以使用,过于复杂,即便在一两年后也不会使用。

所以我刚刚完成了第一个Flutter应用程序,我觉得可以放心的将更多的时间投入到Flutter框架中。 编写Flutter应用程序一直是一个试金石,并且Flutter证明了自己。 Flutter完全能够胜任跨iOS和Android平台的开发。 我也喜欢写后端,我的妻子Irina是一个UX,这样的组合很强悍。

这将是一个很长的博客文章,因为有很多要涵盖:

  • 我将iOS应用程序移植到Flutter的经验
  • 关于Flutter的思考
  • 对Google团队的建议

我打算快速过滤一下我的想法,以便可以开始开始编写教程(以及更多应用程序!)。

1.将iOS应用程序移植到Flutter

自从我上个月关于Flutter的文章以来,我觉得下一步是要真正深入了解一下Flutter了。我非常喜欢拥有详尽例子的教程(例如Digital Ocean或Auth0的教程)。端到端,详细,高质量的例子让我对新技术感兴趣,因为我能够真正看到近乎生产的现成代码并且是以正确的方式来实现。所以我想做同样的Flutter教程。

因此,有了这些目标,重新编写已经在App Store上架的iOS应用是很好的选择。 Steady Calendar(主页,产品搜索),是我妻子Irina和我几年前在柏林生活时设计和开发的习惯追踪器。从那时起,它就成了一个产品,让我们迷上了设计,实施和发布产品的满足感,该产品通过采用健康的习惯帮助他人改善生活。

我基本上花了一两个月的时间将这个iOS应用移植到Flutter,这样我的Flutter教程才更有说服力。

未来一段时间我会出一系列教程来讲解app中已经实现的内容:

  • 一个“登录前”的导航页。
  • Facebook /电子邮件注册并登录。
  • 显示日历的网格视图,用户可以点按以突出显示他们完成目标的日期。
  • 跨平台表单。
  • 使用Scoped模型进行Redux风格的状态管理
  • 具有栈结构,定位元素,图像和按钮的自定义UI。
  • ListView。
  • 简单的多语言国际化UI。
  • 跨平台的导航栏。
  • 全球样式的小部件。
  • 集成测试。
  • 将应用程序提交到Apple App Store。
  • 将应用提交到Google Play商店。

2.关于Flutter的思考

虽然我已经写了超过17年的后端和网络应用程序,其中4年大量参与iOS开发,而在去年的工作中,甚至需要大量使用React Native。

下面是学习Flutter明显的优势:

  1. 开发人员的经验,来自社区的强有力的支持。 因为对Flutter的热情,从Stack Overflow,Google Groups到博客文章的所有内容都是高质量的。 Google工程师竭尽所能,积极参与回答Google Group上的问题,这让Google Group成为一个很棒的社区。 在与来自不同背景的工程师合作时,他们非常有耐心和专业,这对很多其他公司来说很难说了。 这里还有一个活跃的社区,成员们非常活跃,并提供非常周到的答案。 文档很详尽。 这些库非常稳定,并且Flutter是基于Dart,这种语言已经存在多年,学习非常简单,因为它更加成熟并且经过了时间的考验。 总之,Flutter能给你提供很棒的开发体验。
  2. 正如预期的那样,使用Dart编写的第三方库的可用性较低。然而,至少在我的经验中,这些都无关紧要。我需要使用的95%的功能都是可用的,只有一个例外,即一些集成了流行分析工具的三方库,但没有一个简单的HTTP包装器可以处理。
  3. Material Design小部件是Flutter框架的重要组成部分,非常适合用于专业的跨平台应用程序,用于与iOS用户区分开来。我不能向我的iOS用户呈现Material Design小部件,因为这会让我的应用看起来与他们不同。 Flutter确实提供了自己的一套iOS小部件,但这些小部件还不够全面。幸运的是,在我写的Steady应用程序中,大多数用户界面是自定义的。但对于表单类的小部件来说,这很有挑战性。总的来说,Flutter的文档,示例和overallFlutter SDK主要是围绕Material Design进行的,这很好,但是对于像我这样的iOS开发人员来说需要更多的平衡。
  4. 在Flutter中开发自定义UI非常简单。在有过CocoaTouch / iOS开发背景后,我对UI有很高的标准。在深入了解Flutter代码和自己编写自定义UI的经验后,Google团队确实做到了自定义UI的简化。当然,有一些小部件我认为有些矫枉过正,会使得学习曲线更复杂(即中心小部件),但这无关紧要。在编写了一个真正的应用程序之后,我很快就会开始看到他们可能会定期使用的最关键小部件的模式(将在未来的教程中介绍)。
  5. 作为iOS用户,花几个月时间重新编写我的原生iOS应用程序Steady Calendar,并且第一次在Android设备上运行起来真的很让人兴奋。我想这与其他跨移动平台框架总是让我退却有关。如果你花费几个月的业余时间,开发一些东西,并意识到你可以在两个主要平台上运行它,那么你会感到很震惊。尽管对于大多数人来说这无关痛痒,但无论如何我需要分享它!
  6. 编写跨平台应用程序会给你带来更多设计方面的挑战,但这与Flutter本身没有任何关系,而是与多平台开发有关。 当你计划一个Flutter应用程序时,请确保有一个好的设计师和一个很好的自定义UI模拟库或已经准备好了Flutter应用的开发,以便你有条不紊的使用Material Design或Cupertino小部件。 在前一种情况下,这不是一个Flutter问题,而是编写跨平台应用程序的挑战,你需要确保UI设计是基于使用约定的Android用户和iOS用户。 
  7. 学习使用Dart是件很快乐的事。 我喜欢使用类似TypeScript或Flow的稳定性和可靠性。 为了把它放到上下文中,我有一点React背景,并且在过去的几个月里一直在为我的日常工作努力学习React Native。 我已经用Objective-C和Swift工作了很多年。 Dart是一股清流,因为它不会过于复杂,并且拥有强大的核心库和包。 老实说,我认为即使是高中新生也可以使用Dart进行基本编程。 我经常听到关于又要学习新语言的抱怨,但对于Dart来说,仅需要一两个小时,最多一天就能掌握。
  8. Flutter足够震撼。 尽管Flutter还不完美,但在我看来,学习曲线,易用性,可用工具使其成为比我过去使用的任何其他移动框架更好的平台。

Google应该做什么

  1. Google团队的朋友们应继续在其Google网上论坛中提供周到,友好且反应迅速的支持。 这是一个很大的优点,更好的支持,更易上手也是框架脱颖而出的原因。 支持和培养社区分为的团队很容易讨人喜欢,并且拥有良好,积极的态度,这至关重要。
  2. 从社区成员那里获取调查,看看哪些小部件可能根本没用。 对于不那么有用的小部件,只需从文档教程中删除它们或完全弃用它们。 例如,'Center'小部件适用于Hello程序,World容器,除此之外,我不知道还有什么其他用处。 为什么“容器”这种更普遍的东西不具备做同样事情的属性? 这是一个非常简单的例子,但我认为这是Go之所以如此成功的部分原因,因为它的核心库是十分精简的。
  3. 投入更多精力在iOS用户上。针对Android用户, Material Design非常适合进行快速迭代。 但我绝不会在iOS应用中使用Material Design。尽管如此,至今需要了解大量三方库功能才能进行iOS开发,让我觉得学习Flutter仍然比swift更友好,更简单。 如果Flutter能有更多iOS风格的小部件,我想很多iOS用户都会喜欢学习Flutter。
  4. 推出更多功能特性的视频。 我希望看到更多这样的教程:https://flutter.io/get-started/codelab/,还有展示与后端集成的“端到端”教程。
  5. 主题应用应该少关注Material Design。 同样,如果我正在编写iOS应用程序,我不想使用'MaterialApp'小部件。 主题似乎与此紧密相关,它应该更通用。
  6. 降低Firebase在文档中的出现频率,减少Firebase的相关推送。 我意识到Firebase对于快速上手非常有用,有助于新手更容易上手,但是很多人的后端已经开发完成,或者不会考虑使用Firebase。 所以我认为更多地强调如何使用简单的Web服务和JSON会有所帮助。为此 我不得不阅读很多关于此的第三方教程,因为我认为文档不够现实。 未来我可能会出一篇更详细的文章来进行说明。

到目前为止,我对Flutter整体感到非常满意。

接下来,我将考虑重新编写另一款已上架的iOS应用,www.brewswap.co该应用更复杂(Tinder风格的照片滑动,实时聊天等)。

到目前为止,这些是我能想到的主要内容。 像任何框架一样,有很多不足和学习曲线问题,但总的来说,Flutter是我觉得我真的可以投资的东西,最重要的是,非常喜欢使用。

请继续关注一些最初的Flutter教程,我希望能够为任何考虑投入到Flutter学习中的人提供一些见解。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT