原文地址:dnmc.in/2021/06/11/…
原文作者:dnmc.in/
发布时间:2021年6月11日
在这篇文章中,我将向你指出我在开发Flutter应用程序时犯的几个错误,以及我不得不重写三次的原因,以最终对结果感到满意。请注意,这是我的个人经验,以及我对所用软件包和方法的个人看法。
两年前,我的一个朋友想出了一个应用程序的想法–一个针对利基市场的约会应用程序。当时Flutter的新闻铺天盖地,我也很想试试。我的背景是全栈式网络开发(PHP、JavaScript),我想扩展我的技能并尝试新的东西。所以我决定用Flutter做移动应用,用NodeJS做后端服务。
diadating.com/ 这是一个针对居住在国外的人的约会应用程序。
最初的尝试–Bloc-Pattern
在我为这个应用程序设计了屏幕之后,就到了业务逻辑的时候了。当时,Bloc模式非常流行,并被社区推荐。我试着去理解该模式的最佳实践,并在著名的BlocBase方法的基础上创建了我自己的 “架构”。不幸的是,我已经找不到原来的文章了。但基本的想法是,你创建一个BlocBase类,它扩展了ChangeNotifier并在notifyListeners()被调用时更新UI。这帮助我从一开始就把我的业务逻辑和UI分开,但由于这是我从头开始创建的,而且对Dart和flutter没有太多的了解,你可以想象,它是相当有问题的。
第一次重写–Provider包
在我花了几个月的时间完成最初的尝试后,我决定再次进行研究,看看社区中关于将商业逻辑与UI和状态管理分离的情况。块上的新孩子是provider,这甚至被Flutter的开发者自己推荐。
于是我开始阅读文档,并第一次重构我的应用程序。不用说,provider比我自创的架构更容易操作,更不容易出错。但是……
…当我的应用程序开始增加功能时,我很快发现自己陷入了一个模板代码的地狱。特别是Consumer()、StreamProvider()和FutureProvider()小工具到处都是。我讨厌这样的事实,当我从项目中休息一下,再回到项目中时,我不能很容易地回到代码中。
第二次重写–堆叠式结构和GetIt
同样,当我把我的应用程序从自带的架构重构为提供者时,我决定看看Flutter社区正在发生什么,并发现了stacked包。你可能已经猜到了,我试了一下,哇……我很快发现自己对更新整个UI的ViewModelBuilder.reactive()非常满意。对于部分用户界面的更新,我可以简单地使用MyWidget extends ViewModelWidget<FooModel>
,而不是使用Consumer() boilerplate-hell of provider。我对这个包非常满意,我可以完成大部分的工作,同时将我的业务逻辑与UI分开。使用GetIt包,我可以很容易地访问所有在应用程序使用过程中需要被初始化和修改的数据。
因此,随着我实现了越来越多的功能,如通知、覆盖、FCM等,我意识到另一个问题。我的pubspec.yaml
被包淹没了。而我也不喜欢这样。我不希望我的应用程序依赖多个软件包。我希望它尽可能的简化。
第三次也是最后一次重写–GetX
虽然我对堆叠的架构相当满意,但我对Flutter社区的情况感到好奇。我偶然发现了GetX包,在阅读文档时,它看起来很有前途。
与此同时,我有了另一个应用程序的想法(blitzcoin.biz ,你可以把你的东西卖给加密货币固化),我决定用GetX开始那个新鲜的新项目,因为这个新应用程序与我的约会应用程序有一些相似之处。在阅读文档时,我发现GetX包括GetIt和stacked已经提供的一切,而且还有更多。依赖注入、路由、可观察变量、蛇形条、覆盖……从字面上看,你需要的所有应用都可以轻松实现,尤其是没有模板。
我能够在几周内得到一个可以使用的应用程序。我想我现在可以称自己为Flutter高级开发者了 ? 我实际上花了两个月的时间来建立移动应用(用于Android和iOS)和使用NodeJs的服务器端代码。
最后,我回到了我的约会应用,用GetX重写了一切,我对它非常满意。
我希望你会发现这篇文章对你的下一个项目有帮助。
你在Flutter中常用的架构是什么。请在评论中告诉我。
通过www.DeepL.com/Translator(免费版)翻译