【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

开发企业级移动 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:514607
用户头像
王文婧 InfoQ编辑

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

关注

评论

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

【TiDB v7.1.0 荣誉体验官招募】索尼 PS5 、索尼无线降噪耳机、倍轻松颈部按摩器等你拿!

TiDB 社区干货传送门

一篇文章帮你解读所有 TiDB 工具&常见问题解决大全

TiDB 社区干货传送门

探索开源创新理论|2023开放原子全球开源峰会开源创新理论与实践分论坛成功召开

开放原子开源基金会

开源 开放原子全球开源峰会 开放原子 开源创新理论

Wallys/board with SFP module /ipq8072/ipq6010/ipq4019 / support openwrt

Cindy-wallys

IPQ4019 IPQ6010 IPQ8072 ipq4029

TiDB v7.1.0 版本 Resource Control体验

TiDB 社区干货传送门

新版本/特性解读 7.x 实践

TiDB Contributor 资料汇总

TiDB 社区干货传送门

深度学习实践篇[17]:模型压缩技术、模型蒸馏算法:Patient-KD、DistilBERT、DynaBERT、TinyBERT

汀丶人工智能

人工智能 深度学习 知识蒸馏 模型压缩 6 月 优质更文活动

中企出海要做什么?

用友BIP

中企出海

CST电磁仿真软件对火箭发射场雷击仿真与电子设备结构设计

思茂信息

cst cst仿真软件 abaqus abaqus软件 abaqus有限元仿真

Java8 Stream 的总体设计和使用

4ye

Java' 6 月 优质更文活动

剪辑软件的自带曲库都怎么来的?可以商用吗?

HIFIVE音加加

API 音乐后期 音乐开放平台 网易云

搭建TiDB负载均衡环境-HAproxy+KeepAlived实践

TiDB 社区干货传送门

实践案例 管理与运维 数据库架构设计 7.x 实践

人工智能飞速发展,数智人力共享技术东风

用友BIP

人力资源 数智人力

TiDB v7.1.0版本 相关(部署、在线扩容、数据迁移)测试

TiDB 社区干货传送门

版本测评 新版本/特性发布 扩/缩容 数据库连接 7.x 实践

记一次 Rust 内存泄漏排查之旅 | 经验总结篇

Greptime 格睿科技

rust 时序数据库 内存泄漏 云原生数据库 heap profiling

软件测试/测试开发丨用户端App自动化测试学习笔记分享

测试人

Python 程序员 软件测试 自动化测试

一起薅 DevChat 公测的羊毛:国内无需注册就能用上免费的 ChatGPT(gpt-4)

胡说云原生

ChatGPT GPT-4 DevChat

搭建TiDB负载均衡环境-LVS+KeepAlived实践

TiDB 社区干货传送门

管理与运维 7.x 实践

tiflash引擎的使用小总结

TiDB 社区干货传送门

OLAP 场景实践

【有奖体验】AI 都这么厉害了,可以看图生成文字描述!

Serverless Devs

flutter系列之:做一个图像滤镜

程序那些事

flutter 大前端 系统架构 程序那些事

人工智能领域:面试常见问题超全(深度学习基础、卷积模型、对抗神经网络、预训练模型、计算机视觉、自然语言处理、推荐系统、模型压缩、强化学习、元学习)

汀丶人工智能

人工智能 自然语言处理 深度学习 计算机视觉 6 月 优质更文活动

IT自动化运维工具优势与劣势分析-行云管家

行云管家

IT运维 行云管家 自动化运维

Java8 Stream 的核心秘密

4ye

Java' 6 月 优质更文活动

Wallys/DR9574/4*4 2.4G/support for some GPIOs .

Cindy-wallys

ipq9574

【6.09-6.16】写作社区优秀技术博文一览

InfoQ写作社区官方

热门活动 优质创作周报

TiDB 7.1 资源管控特性试用

TiDB 社区干货传送门

新版本/特性解读 7.x 实践

2023大型企业全面预算管理趋势

用友BIP

全面预算 财务共享

河北等保测评公司有哪些?总共有几家?

行云管家

等级保护 等保测评 河北

小程序容器技术:数字门户的创新引擎

FinClip

云安全的第一站:CSPM

HummerCloud

云安全 cspm

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