作者丨GaryChang
译者丨王强
编辑丨张之栋、王文婧
Flutter及其库/包生态系统是否已经准备好构建企业级应用程序了呢?本文将从架构、开发环境、用户界面、访问硬件功能、安全性等需求角度入手,探讨使用Flutter开发一款企业级应用程序的可行性。
上一次我关注Flutter时它才刚刚发布了测试版,彼时它已经展现出很大的潜力,但尚有许多原生功能必须通过Flutter和原生平台的混合实现来达成。这就需要为Flutter编写Dart,为Android编写Java/Kotlin,并为iOS编写ObjectiveC/Swift。
快进到今天,一年过去了,现在已经有4000多个可用于Flutter应用的库。Medium、YouTube、StackOverflow充斥着——甚至可以说是溢出了——有关如何使用Flutter实现各种目标的文章。很多地方有专门针对Flutter的电子邮件列表。FlutterSDK是GitHub上增长第二快的项目。所有这些都表明了Flutter有一个蓬勃发展的社区,他们渴望分享、成长和改善Flutter。
综上所述,我认为现在是时候来研究特定的需求了,那就是探究Flutter及其库/包生态系统是否已经准备好构建企业级应用程序。
这些需求来自于我研究的企业级Android应用中需要特别关注的领域。不能满足其中某些需求的话,Flutter对这些应用来说就只会是走过场而已。
我的目的是为每种需求找到至少一个Flutter解决方案,以表明Flutter现在已准备好构建企业级应用,同时几乎不需要混合编码。除此之外,你可能还有其他需求,因此你的答案可能有所不同。
我的需求分为以下几个方面:
架构
开发环境
用户界面
访问硬件功能
安全性
杂项
对于每种需求,我都提供了链接作为进一步探讨的起点。由于涉及的领域如此之多,因此本文仅包含了简短的摘要。我假定读者已经熟悉Flutter的基本功能。接下来,我们开始吧!
架构
企业级应用的架构应该将关注点清晰地分成多个层次,以实现:
众多开发人员、团队同时开发代码库。
有丰富文档的设计模式,从而更容易理解一系列应用功能。
这样一来就可以全面提升众多团队的生产力,即便这些团队的技能水平参差不齐也不是问题。
Flutter为Web资源、本地存储、Sqlite数据库以及使用库插件访问硬件提供了简单而安全的途径。
状态管理是Flutter应用架构的核心。谷歌最近推荐使用的Provider框架容易理解,也容易用它来构建。还可以使用其他状态管理方法,如Redux、BLoC、InheritedWidget和setState等,它们可以在合理范围内共存。
依赖注入是一种设计模式,旨在使代码单元尽可能独立和可复用,这也使代码更容易进行单元测试。GetIt定位器是一种易用的DI库,可与状态管理框架(如Provider)搭配,分离多个应用层。
如果Dart的streams和async包不足以满足你的异步编程需求,那么还有ReactiveX可用,后者是一种流行的、基于可观察事件流的异步编程风格。RxDart与Flutter和状态管理框架集成得很好。
Flutter的后台处理允许在应用中执行计算密集型工作,同时保持UI响应能力。Dart的隔离(isolate)是在后台线程上执行工作的(略为复杂的)基础,而计算包装器函数简化了最常见用例的隔离工作。根据你对后台处理需求的复杂程度,可能需要采用原生平台功能,而不仅仅是纯粹的Dart实现。这方面的详细信息请参考下方链接:https://flutter.dev/docs/development/packages-and-plugins/background-processes
JSON序列化/反序列化对于多数企业级应用中常见的任何RESTful客户端都是必不可少的。
导航和返回栈管理是一项基本要求,但可能还有特定的需求,以在支持底部导航的应用中跨多个选项卡维护多个返回栈,这在iOS用户体验中很常见。
Flutter的深度链接可从网站或推送通知中提供导航,以跳转到应用内的特定区域。
即使应用处于后台或停止状态,也可以使用少量键/值数据的本地存储来持久存储数据。
SQLite可用于处理大量结构化数据。
Flutter还提供了基于应用权限的,对每个平台文件系统的读/写权限。
企业级的推送通知通常需要后端集成,例如通知用户其信用卡已逾期的场景。Firebase消息传递就是这样一种解决方案。如果本地通知是基于日程表之类可以在设备上完整触发的数据,可以使用这个库:
https://pub.dev/packages/flutter_local_notifications
开发环境
开发人员选择FlutterIDE时,有AndroidStudio、IntelliJ和VisualStudioCode三种选项,它们都能很好地支持Mac、PC、Linux和Chromebook。构建、设备部署、调试和性能分析工作都能用这些IDE完成,使用命令行也可以。原生iOS平台的开发/部署则需要Mac上的Xcode。
可扩展性:Flutter应用具有天然的可扩展性,因为它基于Dart生态系统,导入了Dart包以提供外部库的功能。Flutter项目可以重构为FlutterDart包,从而为开发企业级应用的大型开发团队提供另一种分散工作的方式。
可测试性:可以使用Flutter随附的三个测试框架来测试Flutter小部件和非UI代码工件。这三个框架分别是单元测试、小部件测试和集成测试。这样可以最大程度地覆盖测试,只受可用时间和资源的限制。可以使用mock_web_server对应用内的mockWeb服务器运行完全自包含的集成测试。如果提供了一种在Web服务器端点之间切换的方法,则使用这个mockWeb服务器也可以实现应用的自包含(即没有到应用外部的Web请求)演示版本。例如,你可以在企业应用的调试版本中,在mock、测试环境和生产前测试环境之间切换。
持续集成/持续交付:Flutter使用底层的Android和iOS工具集将应用部署到GooglePlay商店或苹果AppStore,因此可以与任何现有的企业移动CI/CD设置共存。对于新项目而言,为Flutter量身定制CI/CD解决方案也值得考虑,例如:
https://codemagic.io/start/https://go.bitrise.io/flutter-ci
需要特别注意的是,尽管Flutter开发人员可以将大部分时间都花在Flutter/Dart环境中,但Flutter应用最后是要部署到Android和iOS设备上的。所以学习底层原生平台的知识,尤其是部署知识是必要的。了解如何构建和签名应用以及准备配置文件等知识,对于打造成功的Flutter应用至关重要。Flutter开发人员的另一项基本技能是在各个原生平台上调试,并了解如何读取两个截然不同的平台的堆栈跟踪。
用户界面
企业级移动应用非常重视并需要提供出色的用户界面,Flutter附带了一套完整的、高度精确的rendition,分别提供Android(MaterialWidgets)和iOS(CupertinoWidgets)版本。
Flutter的动画很容易入门,还可以扩展到很多复杂性级别上,带有Flare的成熟的2D矢量动画库。
页面过渡是在需要最大化UI弹出的情况下实现应用页面之间带动画导航的示例。
当要向用户显示大量数据而又不消耗大量设备内存时,分页/无限滚动列表视图是常见的需求。这里是一个教程:
https://flutter-academy.com/flutter-listview-infinite-scrolling/
如果基本的图像(image)或SVG图像还不够用,图像加载/缓存库提供了一种轻松的方法来处理带缓存的多个图像。
Flutter还可以访问谷歌地图和苹果地图:
https://pub.dev/packages/flutter_maps
Flutter也能访问平台的Web视图,不过该功能尚处于开发者预览状态,会有一些警告。
国际化也是支持的:
https://flutter.dev/docs/development/accessibility-and-localization/internationalization
Flutter支持辅助功能。在使用原生Android辅助功能时,某些功能可能难以在整个应用中实现,或者成本很高。因此,如果你在这一领域中有任何特定要求,必须执行概念验证以确保操作正确。
图表库提供了一种简单的方法来可视化数据序列,如条形图、饼图和折线图等:
https://pub.dev/packages/charts_flutter
访问硬件功能
对于企业级移动应用来说,访问设备硬件功能是很重要的需求,虽然有时这只是为了充门面,例如:
相机。
生物特征认证(包括指纹和面部识别码)。
GPS。
加速度计。
NFC。请注意,这里仅支持NFC标签的子集,并且苹果在iOS平台上严格限制了NFC应用,这并不是Flutter的问题。
安全性
安全性在企业级应用中至关重要。这是一个非常广泛的主题,我将其缩小为几个特定主题以控制文章长度。Flutter建立在Android和iOS应用沙箱环境上,因此每个Flutter应用都继承了原生Android和iOS应用固有的安全性,包括能够通过https与外部网站进行安全通信的能力。
身份验证之类的基本要求已得到很好的满足。Flutter的SimpleAuth支持集成到以下身份验证提供方:
AzureActiveDirectory
Amazon
Dropbox
GitHub
MicrosoftLiveConnect
任何标准的OAuth2/BasicAuth服务器
亚马逊还提供了自己的CognitoSDK。
SSL证书pinning减少了对安全Web(https)请求进行中间人攻击的可能性,Flutter也提供了支持:https://pub.dev/packages/ssl_pinning_plugin
逆向工程的难度:FlutterDart代码可编译为ARM二进制代码,因此逆向工程比Android字节码更具挑战性。通过使用诸如代码混淆之类的技术可以进一步“增强”此能力。代码混淆可能是一个两极分化的话题——对某些组织来说这是必须具备的,而对于另一些组织来说这只是自欺欺人,所以他们不会使用。我不会参加这里的辩论,只是要注意FlutterDart代码可能会被混淆。Android代码有自己的混淆功能,它们不是一回事。还有用于iOS原生代码的第三方混淆器,例如:
https://www.polidea.com/blog/open-source-code-obfuscation-tool-for-protecting-ios-apps/https://www.guardsquare.com/en/products/ixguard
请注意,Android和iOS混淆器通常不会对FlutterDart代码的混淆产生影响,反之亦然。
安全存储提供了一种在设备上安全存储少量键/值信息的方法:
https://pub.dev/packages/flutter_secure_storage
杂项需求
以下是一些独立的重要需求,但不属于上面的类别。
分析:Adobe和Firebase分析库都有Flutter支持。
错误/崩溃报告:Sentry库
https://flutter.dev/docs/cookbook/maintenance/error-reporting
第三方/开源库:这里列出了第三方库和证书。使用第三方库时通常要求应用公开库的使用情况,并提供查看这些库证书的方式。
信息转载自网络,更多相关信息请点击:http:///
相关文章
-
2021 Google 开发者大会:Android 12/12L 全面升级、微信和“吃鸡”都在用 Flutter
本次大会,Google还正式发布了Flutter版谷歌移动广告插件以及在线编辑器DartPadpackage支持的beta版。,通过这份报告,Google识别出了全球十大高潜力机会,希望以此帮助中国开发者和企业在头部竞争愈发激烈的出海市场中找寻机会窗口:简体中文版GooglePlay学院除了帮助开发者识别机遇,Google还推出了简体中文版的GooglePlay学院,目前已上线107门中文课程、涵
2024-03-21 20:36
热门标签
-
翻阅5G青年空降手册,寻找5G真正的引领者
2024-03-22 09:15
-
拼多多推广费用如何收取【需要多少钱】 拼多多
2024-03-22 09:15
-
淘宝有流量没有转化率的核心原因分析
2024-03-22 09:15
-
官方推出“医保码”部分城市上线,实测“医保电子凭证”怎么用?
2024-03-22 09:15
-
金山办公与WPS的不解之缘 估值高达200倍能持久否?
2024-03-22 09:15
-
忧贸易限制,全球开源芯片基金会近期将把总部从美国迁往瑞士
2024-03-22 09:15
-
淘宝免费流量飙涨真的是喜事吗?
2024-03-22 09:15
-
关于比特币的5个常见误解
2024-03-22 09:15
-
淘宝虚拟商品售假怎么申诉?附攻略
2024-03-22 09:15
-
淘宝自定义导航分类设置技巧分享
2024-03-22 09:15
-
孙为民:苏宁的全场景智慧零售,会在六个方向持续成长!
2024-03-22 09:15
-
两部委叫停邮寄处方药,电商平台再遭挑战
2024-03-22 09:15
-
淘宝店铺怎么增加权重?店铺标签很重要
2024-03-22 09:15
-
京东智谷陈昱:希望走出一条产业地产的新路
2024-03-22 09:15
-
全国电子健康卡建设应用工作交流会在长沙举办 微信渠道电子健康卡成绩亮眼
2024-03-22 09:15
-
联发科携手英特尔研发5G PC解决方案:惠普戴尔将首发
2024-03-22 09:15
-
拼多多9块9特卖活动规则 拼多多
2024-03-22 09:15
-
淘宝怎么自定义分类?宝贝颜色自定义分类的操作方法详解
2024-03-22 09:15
-
快递业以罚代管方式如何终结:立法明确企业主体责任
2024-03-22 09:15
-
淘宝自定义颜色分类怎么设置?设置后在哪显示?
2024-03-22 09:15