写点什么

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

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

关注

评论

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

用户注册这样玩,保你平安

越长大越悲伤

Java 后端 注册

AnyGo for Mac(在iPhone / iPad上轻松模拟GPS位置)v6.9.0激活版

Rose

AnyGo中文版 AnyGo for Mac Mac虚拟机定位 GPS位置 AnyGo破解版

三分钟搞懂Serverless,互联网个人创业者必备

凌览

node.js Serverless 独立开发者

苹果Macos好玩的经典游戏推荐!

Rose

mac游戏 苹果mac游戏 Mac游戏推荐

企业服务大模型扎根生产一线,用友BIP为中国智造“再续新篇”!

用友BIP

企业大模型

哈工大副校长刘挺访问度小满 推进人工智能等方面技术合作

科技热闻

代购系统独立站的未来发展前景

Noah

Mac电脑强大的fcpx视频剪辑:Final Cut Pro 中文最新

胖墩儿不胖y

视频处理工具 编辑视频 视频编辑器 视频管理

如何在 Mac 上创造一个纯 Windows 环境

Rose

Parallels Desktop

微软远程管理Microsoft Remote Desktop怎么样?好用吗?

Rose

Mac远程控制软件 microsoft remote desktop mac破解软件下载 微软远程管理

iMovie for Mac v10.4.0中文版 支持Macos14系统 兼容M3 Mac

Rose

iMovie Mac破解版 Mac视频剪辑工具 iMovie mac版 iMovie中文版下载

KeyShot2023pro安装包 附KeyShot注册机 适用于Mac/win

Rose

KeyShot2023pro安装包 KeyShot 注册机 3D渲染和动画软件

一起学Elasticsearch系列-脚本查询

Java随想录

Java 大数据 Elastic Search

极狐GitLab 16.6 如约而至,更好的 DevOps 体验,赶快升级使用吧!

极狐GitLab

DevOps gitlab CI/CD DevSecOps MR

Logic Pro X v10.8.1中文破解版 mac音频制作

Rose

mac音乐制作软件 Logic Pro破解版 Logic Pro下载

Mac视频转码编辑工具 Compressor 4.7中文激活版 现已支持M3 Mac

Rose

Compressor Mac下载 Compressor破解版 Mac视频编码工具 Compressor for mac

Final Cut Pro for Mac(fcpx视频剪辑)v10.7.0 中文版

Rose

mac软件下载 Final Cut Pro中文版 Final Cut Pro破解版 fcpx 视频剪辑软件

淘宝订单接口在电商行业中的重要性及其实践

Noah

畅捷通的 Serverless 探索实践之路

Serverless Devs

云计算 Serverless AIGC

KaiwuDB 通过中国信通院“可信数据库”性能与稳定性评测

KaiwuDB

KaiwuDB 可信数据库

​iOS Class Guard github用法、工作原理和安装详解及使用经验总结

强大专业的设计排版工具Affinity Publisher 免激活最新

mac大玩家j

Mac软件 排版软件 排版工具

每日一题:LeetCode-41. 缺失的第一个正数

Geek_4z9ami

面试 算法 数组 LeetCode 哈希表

HarmonyOS开发案例分享:万能卡片也能用来玩游戏

HarmonyOS开发者

HarmonyOS

初识 OpenCV

数新网络官方账号

OpenCV 计算机视觉

Wireshark中的ARP协议包分析

小魏写代码

MySQL数据库中SQL语句分几类?

小齐写代码

RazorSQL for Mac(多功能SQL数据库管理器)支持M1/M2 v10.5.0注册激活版

Rose

数据库 RazorSQL下载 RazorSQL注册码

记一次线上视频接口OOM问题

xfgg

Java

KeyShot 2023.3 Pro for mac(3D渲染和动画制作软件) v12.2.2激活版

mac

苹果mac Windows软件 KeyShot Pro 高级渲染和动画软件

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