写点什么

开发企业级移动 APP,Flutter 准备好了吗?

  • 2019-11-20
  • 本文字数:4381 字

    阅读完需:约 14 分钟

开发企业级移动APP,Flutter准备好了吗?

Flutter 及其库 / 包生态系统是否已经准备好构建企业级应用程序了呢?本文将从架构、开发环境、用户界面、访问硬件功能、安全性等需求角度入手,探讨使用 Flutter 开发一款企业级应用程序的可行性。


上一次我关注 Flutter 时它才刚刚发布了测试版,彼时它已经展现出很大的潜力,但尚有许多原生功能必须通过 Flutter 和原生平台的混合实现来达成。这就需要为 Flutter 编写 Dart,为 Android 编写 Java/Kotlin,并为 iOS 编写 Objective C/Swift。


快进到今天,一年过去了,现在已经有 4000 多个可用于 Flutter 应用的库。Medium、YouTube、StackOverflow 充斥着——甚至可以说是溢出了——有关如何使用 Flutter 实现各种目标的文章。很多地方有专门针对 Flutter 的电子邮件列表。Flutter SDK 是 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


开发环境

开发人员选择 Flutter IDE 时,有 Android Studio、IntelliJ 和 Visual Studio Code 三种选项,它们都能很好地支持 Mac、PC、Linux 和 Chromebook。构建、设备部署、调试和性能分析工作都能用这些 IDE 完成,使用命令行也可以。原生 iOS 平台的开发/部署则需要 Mac 上的 Xcode。


可扩展性:Flutter 应用具有天然的可扩展性,因为它基于 Dart 生态系统,导入了 Dart 包以提供外部库的功能。Flutter 项目可以重构为 Flutter Dart 包,从而为开发企业级应用的大型开发团队提供另一种分散工作的方式。


可测试性:可以使用 Flutter 随附的三个测试框架来测试 Flutter 小部件和非 UI 代码工件。这三个框架分别是单元测试、小部件测试和集成测试。这样可以最大程度地覆盖测试,只受可用时间和资源的限制。可以使用 mock_web_server 对应用内的 mock Web 服务器运行完全自包含的集成测试。如果提供了一种在 Web 服务器端点之间切换的方法,则使用这个 mock Web 服务器也可以实现应用的自包含(即没有到应用外部的 Web 请求)演示版本。例如,你可以在企业应用的调试版本中,在 mock、测试环境和生产前测试环境之间切换。


持续集成/持续交付:Flutter 使用底层的 Android 和 iOS 工具集将应用部署到 Google Play 商店或苹果 App Store,因此可以与任何现有的企业移动 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(Material Widgets)和 iOS(Cupertino Widgets)版本。


Flutter的动画很容易入门,还可以扩展到很多复杂性级别上,带有 Flare 的成熟的 2D 矢量动画库。


页面过渡是在需要最大化 UI 弹出的情况下实现应用页面之间带动画导航的示例。


当要向用户显示大量数据而又不消耗大量设备内存时,分页/无限滚动列表视图是常见的需求。这里是一个教程:


https://flutter-academy.com/flutter-listview-infinite-scrolling/


如果基本的图像(image)或 SVG 图像还不够用,图像加载/缓存库提供了一种轻松的方法来处理带缓存的多个图像。


Flutter 还可以访问谷歌地图和苹果地图:https://pub.dev/packages/flutter_maps


Flutter 也能访问平台的Web视图,不过该功能尚处于开发者预览状态,会有一些警告。


国际化也是支持的。


Flutter支持辅助功能。在使用原生 Android 辅助功能时,某些功能可能难以在整个应用中实现,或者成本很高。因此,如果你在这一领域中有任何特定要求,必须执行概念验证以确保操作正确。


图表库提供了一种简单的方法来可视化数据序列,如条形图、饼图和折线图等。


访问硬件功能

对于企业级移动应用来说,访问设备硬件功能是很重要的需求,虽然有时这只是为了充门面,例如:


  • 相机;

  • 生物特征认证(包括指纹和面部识别码);

  • GPS;

  • 加速度计;

  • NFC。请注意,这里仅支持 NFC 标签的子集,并且苹果在 iOS 平台上严格限制了 NFC 应用,这并不是 Flutter 的问题。


安全性

安全性在企业级应用中至关重要。这是一个非常广泛的主题,我将其缩小为几个特定主题以控制文章长度。Flutter 建立在 Android 和 iOS 应用沙箱环境上,因此每个 Flutter 应用都继承了原生 Android 和 iOS 应用固有的安全性,包括能够通过 https 与外部网站进行安全通信的能力。


身份验证之类的基本要求已得到很好的满足。Flutter 的 Simple Auth 支持集成到以下身份验证提供方:


  • Azure Active Directory

  • Amazon

  • Dropbox

  • Facebook

  • GitHub

  • Google

  • Instagram

  • LinkedIn

  • Microsoft Live Connect

  • 任何标准的 OAuth2/Basic Auth 服务器


亚马逊还提供了自己的 Cognito SDK。


SSL 证书 pinning 减少了对安全 Web(https)请求进行中间人攻击的可能性,Flutter 也提供了支持:https://pub.dev/packages/ssl_pinning_plugin


逆向工程的难度:Flutter Dart 代码可编译为 ARM 二进制代码,因此逆向工程比 Android 字节码更具挑战性。通过使用诸如代码混淆之类的技术可以进一步“增强”此能力。代码混淆可能是一个两极分化的话题——对某些组织来说这是必须具备的,而对于另一些组织来说这只是自欺欺人,所以他们不会使用。我不会参加这里的辩论,只是要注意 Flutter Dart 代码可能会被混淆。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 混淆器通常不会对 Flutter Dart 代码的混淆产生影响,反之亦然。


安全存储提供了一种在设备上安全存储少量键/值信息的方法。


杂项需求

以下是一些独立的重要需求,但不属于上面的类别。


分析AdobeFirebase分析库都有 Flutter 支持。


错误/崩溃报告Sentry库


第三方/开源库:这里列出了第三方库和证书。使用第三方库时通常要求应用公开库的使用情况,并提供查看这些库证书的方式。


生成并扫描二维码


访问个人联系人列表


与社交媒体共享详细信息


发送短信和彩信。


接收一次性短信密码。


使用Square Reader SDK通过读卡器接收付款


使用Square应用内支付SDK进行应用内付款


其他开发中的应用内支付库:


https://pub.dev/packages/flutter_billing


https://pub.dev/packages/flutter_inapp_purchase


播放音频/音乐/视频


读取用户的健康信息


TensorFlow LiteML Kit,用于在设备和云端进行机器学习。

还有谁在使用 Flutter?

谷歌即将推出的云游戏服务 Stadia 选择了 Flutter 作为其 Android 和 iOS 应用的实现。想了解选择 Flutter 的其他知名公司和应用,请参见:


https://flutter.dev/showcase


https://www.thedroidsonroids.com/blog/apps-made-with-flutter

结论

从上面提供的链接可以看出,Flutter 库或解决方案可适用于企业级移动应用的多种需求。有这样一个健康且不断发展的 Flutter 库/包生态系统,也许是时候考虑使用 Flutter 开发你的下一款企业级移动应用了!


原文链接


https://medium.com/digio-australia/is-flutter-ready-for-enterprise-mobile-apps-e3e9a0f11bea


2019-11-20 16:515526
用户头像
王文婧 InfoQ编辑

发布了 126 篇内容, 共 71.8 次阅读, 收获喜欢 275 次。

关注

评论

发布
暂无评论
发现更多内容

云渲染的“公”“私”技术!

Finovy Cloud

渲染 云渲染 元宇宙 云渲染农场 动画制作

【2023云栖】刘一鸣:Data+AI时代大数据平台建设的思考与发布

阿里云大数据AI技术

大数据

WorkPlus移动数字化平台高定制化服务,贴身满足企业的个性化需求

WorkPlus

软件测试/测试开发丨掌握未来,引领人工智能测试新潮流!

测试人

人工智能 软件测试

在HarmonyOS上使用ArkUI实现计步器应用

HarmonyOS开发者

HarmonyOS

避免defer陷阱:拆解延迟语句,掌握正确使用方法

王中阳Go

Go golang 进阶 面试题 defer

第五期 |《实时洞察 智能运营一用友企业绩效管理白皮书》解读

用友BIP

企业绩效

苹果超好用的Markdown文本编辑器:Ulysses for Mac最新激活 支持M1

彩云

文本编辑器 Ulysses

数据库分类有哪些?

小齐写代码

提效神器!10%标注数据,比肩全量标注的模型效果!

飞桨PaddlePaddle

大模型 半监督 自动标注 模型蒸馏

SecureCRT 9 for Mac(终端SSH工具)

展初云

特权账号管理之权限划分篇

尚思卓越

运维 网络安全 权限管理

企业、政府单位及公共组织办会,一键高效合规直达酒店!

用友BIP

企业数智化

QCN9024 vs. QCN9274: Performance comparison of wireless network chips

wifi6-yiyi

QCN9024 qcn9274

火山引擎ByteHouse:4000字总结,Serverless在OLAP领域应用的五点思考

字节跳动数据平台

数据库 大数据 云原生

Sonoma Cache Cleaner for Mac 苹果系统优化工具

彩云

Sonoma Cache Cleaner 系统优化工具

WorkPlus移动数字化平台,助力企业全面掌控业务和生态

WorkPlus

理解技术和业务的共同目标

老张

质量保障 业务目标 技术目标

BI 数据可视化平台建设(2)—筛选器组件升级实践

vivo互联网技术

设计模式 前端组件设计 组件库开发

实时化与Serverless是开源大数据3.0时代的必然选择

阿里云大数据AI技术

开源

使用DocumentBuilderFactory解析XML浅谈

EquatorCoco

Java XML文档 document

App加固中的代码混淆功能,让逆向工程师很头疼

Ulysses for Mac(Markdown) v33免激活版

展初云

Mac Ulysses 文本写作软件

SideNotes for Mac(即时笔记工具)

展初云

Mac 笔记软件 SideNotes

Macos鼠标右键助手专业版:MouseBoost PRO for Mac 支持M1

iMac小白

【软件推荐】行云管家让你轻松实现数据安全运维!

行云管家

数据安全 数据泄露 数据安全运维

开发企业级移动APP,Flutter准备好了吗?_大前端_Gary Chang_InfoQ精选文章