Logo_InProduction_3.png

庆祝 Flutter 的生产时代

概览

Flutter 已从一个雄心勃勃的 UI 框架发展成为一个生产级解决方案,受到全球一些最大品牌的信赖。这些品牌正在使用 #FlutterinProduction 来打造令人惊叹的体验,这些体验可在不同平台上无缝运行,并具有出色的性能——所有这些都得益于广泛的生态系统和卓越的开发者体验。

敬请关注!
3.27 image.webp

最新消息

Flutter 3.27

阅读 Flutter 和 Dart 最新版本(Flutter 3.27 和 Dart 3.6)的最新更新。

阅读博客

Flutter 生产日程

FiP_SVTD_Keyart_A (1).png

2024 年 12 月 17 日:活动日

所有时间均为太平洋标准时间 (PST)

11:00 - 11:30

#FlutterInProduction

无论您是经验丰富的专业人士还是初学者,您都将从 Flutter 用户故事中获得新的见解和灵感,了解 Flutter 技术负责人介绍的最新功能,并在本次多片段虚拟活动中了解 Flutter 应用开发的未来。

演讲者

    安德鲁·布罗格登

    里弗斯·科莫

11:30 - 11:45

#问Flutter

Flutter 团队负责人 Todd Volkert、John McCutchan 和 Michael Thomsen 现场回答社区提交的关于 Flutter 的问题!

演讲者

    克雷格·拉本茨

    迈克尔·汤姆森

    托德·沃尔克特

    约翰·麦卡琴

2024 年 12 月 19 日:可观测的 Flutter

所有时间均为太平洋标准时间 (PST)

09:00 - 10:00

技术负责人小组讨论

对于在企业开发环境中使用 Flutter 构建应用程序有什么疑问吗?让使用 Flutter 进行生产的公司技术负责人来回答这些问题。

演讲者

    克雷格·拉本茨

社区活动

查找您附近的活动

community_events_page_dash.png

社区聚会

查找您附近的 #FlutterInProduction 本地观看派对!

Betterment 是一家管理着数十亿美元资产的领先机器人顾问公司,它选择 Flutter 来实现一个流畅、响应迅速且能轻松处理复杂金融数据的应用程序。Flutter 提供接近原生性能的能力确保了无缝的用户体验,从而赢得了 Betterment 庞大客户群的信任。


在本次采访中,Betterment 的高级软件工程师兼 Flutter 迁移核心贡献者 Will Lockwood 分享了一个由 5 名工程师组成的小团队如何启动一个试点项目,最终改变了 Betterment 整个移动开发格局的内幕故事。他揭示了在安全性和可靠性至关重要的海量以用户为中心的应用程序中采用 Flutter 所面临的挑战、取得的成功以及意想不到的好处。


准备好深入了解 Betterment 的 Flutter 经验,了解他们如何利用“添加到应用程序”实现无缝过渡,并发现这一决策不仅改进了他们的应用程序,还增强了他们的整个组织。


Play StoreApple Store 下载 Betterment。


您能分享 Betterment 将一个大型、成熟的原生应用程序迁移到 Flutter 的经验吗?在此过程中您遇到了哪些主要挑战和好处?


大家好,我叫 Will Lockwood,我是 Betterment 的高级工程师。自 2020 年初以来,我们一直在使用 Flutter 开发面向消费者的生产应用程序,该应用程序拥有数百个屏幕,服务近百万用户。


我们选择 Flutter 是为了通过构建一个应用程序而不是两个应用程序来提高移动开发的效率和效力。


然而,我们已经有两个应用程序在生产环境中部署了近 7 年。对于金融应用程序来说,安全性、可靠性和用户连续性至关重要——暂停所有新产品开发,一次性向用户发布一个全新的应用程序对我们的业务来说是不可行的,而且风险太大。


我们必须进行增量迁移,以便在我们的工程师掌握新语言和框架的同时,我们能够继续发布功能。从这个意义上说,Flutter 的“添加到应用程序”功能使其成为可能;我们在现有应用程序中嵌入了一个新应用程序,然后它慢慢地取代了越来越多的原生体验,直到所有的原生体验都消失了。


我们立即感受到了好处,而且这些好处不仅仅是因为一次性构建更便宜


通过统一一套最佳实践和基础设施,我们可以更有效地培训工程师,并以比以往更高的质量在 Flutter 中交付功能。拥有一个应用程序进行监控使我们更有效地预防和响应事件。而且,统一的移动开发也促进了移动工程师与我们组织其他部门之间更简单、更好的协作,从而提高了我们组织其他部门的效率。


在 Flutter 中重建我们的设计系统,加深了移动工程师与我们设计团队之间的联系,使我们能够跨平台提供更一致、更美观的用户界面,包括支持深色模式和平台特定的体验。构建一个移动 API 客户端极大地简化了与后端工程师的维护和协作,以至于我们决定更进一步,统一移动和 Web 的 API。


Flutter 的声明式 UI 设计范式帮助我们统一了 Web 和移动端的架构模式,从而促进了使用 React 的 Web 工程师和使用 Flutter 的移动工程师之间更丰富的协作。


虽然完全完成我们的 Flutter 迁移是一个长达数年的挑战,但我们的整个组织因此变得更好——我们不仅现在拥有更好的应用程序,而且这些改进具有感染力。


Flutter 满足了我们所有的需求,但在其他选项中,对我们来说最主要的区别在于开发者体验——比如 IDE 集成、开发工具、优雅的依赖管理、流畅的升级——这让我们相信我们的移动工程师可以尽可能高效地使用 Flutter。


随着我们的进步,Flutter 和 Dart 也得到了改进。社区不断为移动应用开发的常见模式构建新的解决方案和工具,而 Dart 团队不断发布主要的、基础性的功能(如健全的空安全、记录和模式匹配以及即将推出的宏功能),这些功能始终为我们提供了更流畅、更可靠、更灵活的开发者体验。


随着 Flutter 在生产环境中大规模应用近五年,我们对我们的选择感到满意。增量迁移是一个重大的技术挑战,但我们的成功使我们的应用程序变得更好,我们的移动工程师和组织更强大,并且它继续为我们组织的其它部门和我们的业务带来意想不到的回报。

BlendAI 是一款 AI 驱动的照片编辑器,在移动平台上的下载量超过 200 万。使用 Flutter,Blend 能够在 Android 和 iOS 应用程序中共享 98% 的代码,这使得他们由 2-3 名工程师组成的精干团队能够支持所有这些用户。


在这篇文章中,我们深入探讨了 Blend 的成功故事。Blend 是一款 AI 驱动的标志制作工具,由三名工程师组成的精干团队成功积累了数百万次安装。请加入我们,与 Jamsheed Kamardeen(首席技术官)和 Chinmay Kabi(高级移动应用开发人员)聊聊他们决定拥抱 Flutter 的原因,以及 Flutter 如何帮助他们克服图像处理、跨平台一致性和快速迭代的复杂性。


了解 Blend 如何利用 Flutter 的渲染精度、自定义 UI 功能和性能优化工具,在不同设备上提供无缝的用户体验。我们将探讨他们解决性能瓶颈的巧妙方案、测试和部署方法,以及他们对 Flutter 在雄心勃勃的项目中长期潜力的见解。


Play 商店Apple 商店下载该应用。


哪些因素促使您的团队选择 Flutter 来开发生产级应用程序,以及它是否符合您的预期?


  • 渲染精度:Flutter 的渲染引擎可确保在不同设备生态系统中实现像素级的完美一致性。这对于我们以图形为导向的产品至关重要,因为视觉保真度是首要考虑因素。
  • 跨平台效率:我们实现了 98% 的跨平台代码共享,显著减少了开发时间和维护开销。这种效率水平在其他跨平台框架中是无与伦比的。
  • 性能:Flutter 对发布版本进行提前(AOT)编译,可实现接近原生的性能,这对于设计密集型应用程序中的流畅用户交互至关重要。
  • 自定义 UI 组件:Flutter 的小部件系统允许我们创建高度定制化、可重用的 UI 组件,这些组件在整个应用程序中保持一致性,从而提高开发速度和用户体验。
  • 热重载:此功能极大地改善了我们的开发周期,使我们能够实时迭代设计和功能,这对于以视觉为导向的产品至关重要。
  • 强大的生态系统:强大的 Flutter 生态系统,包括各种第三方软件包,加速了我们的开发。

Flutter 不仅满足而且超出了我们的预期,使我们能够以卓越的开发效率跨平台交付高性能、视觉一致的应用程序。


Flutter 如何帮助您简化跨平台开发,以及它对您的开发速度和资源分配产生了什么影响?

Flutter 在简化我们的跨平台开发方面发挥了关键作用,使 Blend 能够保持精干高效的团队,同时在全球范围内提供高质量的产品。它对我们的开发速度和资源分配产生了显著影响。

  • 团队效率:我们仅有 2-3 名移动工程师,却实现了 [X 百万] 次安装,并保持了 [Y 星级] 评级。每个工程师的这种影响力证明了 Flutter 的效率。
  • 国际化:Flutter 通过 intl 包提供的一流的本地化和国际化支持,以及支持区域设置的小部件,使我们能够有效地将应用程序本地化为 15 种语言。
  • 资源分配:通过消除对平台特定团队的需求,我们将资源重新分配到核心功能开发和人工智能集成,从而加速了我们的产品演进。
  • 性能优化:Flutter 内置的性能分析工具使我们能够以最少的额外工作保持高性能,这对于我们图形密集型应用程序至关重要。

您面临的最重要的性能挑战是什么?哪些 Flutter 特定的技术或工具帮助解决了这些挑战?

我们面临的最重大挑战之一是优化图像批量编辑功能,其中包括同时应用模板、编辑背景、重新定位和应用阴影。关键要求是在每次用户操作后生成即时预览。我们利用 Flutter 的能力从服务器端处理过渡到设备端处理,并实施了几项优化:自定义渲染管道:使用 PipelineOwner 和 RenderView 开发,用于舞台外预览生成。

  • 图像预缓存:利用 precacheImage,将预览生成时间缩短了 30%。
  • 受控的重新渲染:实施 RepaintBoundary,策略性地使用键,并利用 DevTools 来最大程度地减少不必要的重新渲染。

这些 Flutter 特定技术,加上设备端生成,将预览生成时间缩短了 66%。这种设备端方法不仅通过近乎即时的预览增强了用户体验,还减少了服务器负载并改进了离线功能,展示了 Flutter 在实现复杂图像处理任务的复杂本地计算方面的强大功能。


您如何确保跨平台的用户体验一致性,以及哪些 Flutter 功能帮助您实现了类似原生的感觉?

我们从头开始构建了 UI 组件,Flutter Widgets 使我们能够轻松创建可重用组件。通过借鉴 Android 和 iOS 设计指南中的最佳实践,我们的组件在两种环境中都很好地融入。


您的 Flutter 应用的自动化测试和 CI/CD 方法是什么样的?它如何支持您的应用在生产环境中的稳定性?

我们有 GitHub Actions,它针对每个拉取请求进行构建,并创建产品团队用于测试应用程序的 apk 捆绑包。这确保了我们不需要每次都要求开发人员构建并将其分发给团队的其他成员。没有浪费时间在构建或等待构建上。每次新提交都会自动构建,GitHub Actions 和 PR 成为单一事实来源。一旦 PR 合并,更多的 GitHub Actions 将其针对生产环境进行构建,并上传到 App Store 和 Play Store,从而在没有人为错误的情况下进行分发。


您如何处理使用 Flutter 构建的生产应用的实时监控、bug 跟踪和性能分析?

我们使用 Sentry 的 bug 跟踪和性能监控工具与 Flutter 配合使用。集成非常出色,能够收集额外的设备指标、面包屑,并且与导航等功能的集成也很容易。因此,我们可以轻松跟踪用户在崩溃前的旅程,并重现相同的问题。通过清晰的堆栈跟踪,找出问题的原因通常非常直接。


Flutter 在您团队的此应用长期可扩展性计划中扮演什么角色?您对 Flutter 持续支持生产应用有多大的信心?

随着我们深入构建设计工具,我们对 Flutter 在新版本中暴露底层 API 的方向感到满意。我们最初选择 Flutter 时的一个担忧是,作为一个跨平台开发解决方案,Flutter 会优先考虑广度而不是深度,我们会在某个地方碰壁。考虑到这一点,我们非常高兴 Flutter 正在通过暴露更多底层 API 来投入更多深度。


对于考虑将 Flutter 用于生产的其他团队,您认为最大的好处是什么?您会给他们什么建议以取得类似的成功?

当我们开始时,有很多观点认为包括 Flutter 在内的跨平台开发解决方案性能不佳,最适合仅是表格和数据收集的简单应用程序。我们反对这种观点,决定使用 Flutter 创建一个照片编辑应用程序,并且我们没有遇到任何与原生应用程序开发不会遇到的性能问题。每当我们遇到问题时,它都与 Flutter 无关,我们能够很好地解决它。对于非 UI 代码,无论如何我们都可以很好地利用原生代码。选择 Flutter 是一个很棒的决定。我们很容易在 Flutter 小部件之上构建一个可编辑的交互式画布。能够开发如此庞大的代码并将其部署到 iOS 和 Android,对于像我们这样的小公司来说,节省了大量时间。事实上,我们还将 Flutter 代码直接部署到我们的服务器上,用于渲染和导出图像。它每天生成超过 200 万张预览图像。我们确实不得不稍微修改一下才能使其在服务器端工作,我们希望 Flutter 团队能尽快提供更好的服务器端渲染支持。

在当今竞争激烈的市场中,构建一款成功的旅行应用程序不仅需要引人注目的视觉效果;它还需要无缝的用户体验、一流的性能以及快速适应的能力。Scapia 作为旅游行业的新星,认识到这些挑战,并选择 Flutter 作为其增长的基础。


在这次富有洞察力的采访中,我们听取了 Scapia 工程主管 Sourabh Gupta 讲述他们与 Flutter 的旅程。他分享了一个由 12 名工程师组成的团队如何利用 Flutter 的多功能性和健壮性来创建一个不仅提供卓越 UI/UX 的应用程序,而且将其范围扩展到移动之外,为其网站和 PDF 生成工作流提供支持。


了解 Scapia 如何通过 Shorebird 等创新解决方案解决 OTA 更新的性能挑战,确保跨平台的 UI 一致性,并构建强大的 CI/CD 管道以增强稳定性。加入我们,探索驱动 Scapia 选择 Flutter 的关键因素以及他们在此过程中学到的宝贵经验。


Play StoreApple Store 下载 Scapia。


哪些因素促使您的团队选择 Flutter 来开发生产级应用程序,以及它是否符合您的预期?

当 Scapia 于 2022 年成立时,我们确定了使我们的技术区别于竞争对手的关键因素,并吸取了我们在 Flipkart 和 Swiggy 的经验教训。以下是我们技术栈的关键考虑因素:


  • 专注于 UI/UX 卓越:我们旨在提供一款具有出色 UI 和 UX 的应用程序,强调丰富的动画。该框架需要支持高级动画功能。
  • 一次编写,随处部署:一个使我们能够一次编写代码并跨多个平台无缝部署的框架至关重要。
  • 高性能:确保跨平台的卓越性能对于提供一致的用户体验至关重要。
  • 跨平台 UI 一致性:在所有平台上保持无缝和统一的 UI 对于提供内聚的应用程序体验至关重要。

在评估了这些标准之后,我们发现 Flutter 完全符合我们的要求,并选择它作为我们应用程序的基础。


现在,距离应用程序发布两年了,我们使用 Flutter 的体验非常出色。我们已经成功地以最少的资源向应用程序添加了多个垂直领域,同时在所有平台上保持了稳定一致的性能。除了移动开发之外,我们还利用 Flutter 进行 PDF 生成和网站工作流,展示了它的多功能性和健壮性。


Flutter 如何帮助您简化跨平台开发,以及它对您的开发速度和资源分配产生了什么影响?

A:Flutter 极大地帮助了我们的团队,使我们能够一次编写代码并将其部署到 Android、iOS 和 Web 上。它提高了我们构建跨平台一致用户流程的效率,并允许我们同时部署相同的代码,确保统一的用户体验。此外,Flutter 使单个开发人员能够端到端地管理功能,从而无需为平台特定代码雇用多名开发人员。


您面临的最重要的性能挑战是什么?哪些 Flutter 特定的技术或工具帮助解决了这些挑战?

我们使用 Flutter 面临的主要挑战之一是处理空中下载 (OTA) 更新。每当我们需要修复崩溃或推出关键问题时,我们都必须发布新的应用程序版本,然后该版本将经历审查过程。

我们通过集成 Shorebird 解决了这一挑战,它支持 Flutter 应用程序的 OTA 更新。通过这种集成,我们已经能够在生产环境中为 Android 和 iOS 推出多个关键修复,而无需等待新的应用程序发布。这使我们与其他支持 OTA 更新的 React Native 等技术一样敏捷。


您如何确保跨平台的用户体验一致性,以及哪些 Flutter 功能帮助您实现了类似原生的感觉?

确保跨平台的用户体验一致性是移动开发中的一个重大挑战。Flutter 通过直接编译为原生代码来解决此问题,这减少了性能瓶颈并确保了流畅、响应迅速的用户体验。

Flutter 使用自己的渲染引擎 (Skia),绕过了平台原生组件。这确保了 UI 元素在 Android、iOS、Web 和桌面平台上的外观和行为一致。此外,通过使开发人员能够为多个平台编写单个代码库,Flutter 消除了功能和设计上的差异。

我们正在应用程序中大量使用 Rive 动画,并且没有遇到任何问题。


您的 Flutter 应用的自动化测试和 CI/CD 方法是什么样的?它如何支持您的应用在生产环境中的稳定性?

我们从一开始就投入了 CI/CD 流水线,认识到它提供的关键优势:一致的 SDK 版本、自动版本控制支持、减少人为错误和更快的部署。我们将 Xcode Cloud 流水线集成到我们应用程序的构建和部署过程中。我们的构建现在根据预定义的触发器(例如拉取请求合并和分支更改)在云中自动生成。这种简化的工作流为我们节省了之前所需的 30 多分钟的手动工作,并通过发送到我们专用 Slack 频道的通知提高了我们及时了解构建状态的能力。附件是解释我们构建过程的屏幕截图。



Community Guidelines

您如何处理使用 Flutter 构建的生产应用的实时监控、bug 跟踪和性能分析?

我们使用 Firebase 监控应用程序崩溃和性能问题。Firebase Flutter SDK 易于集成,可无缝跟踪应用程序运行状况。为了测量网络延迟和应用程序启动时间,我们广泛利用 Firebase Performance 的自定义跟踪流程。这对于减少我们 API 调用的感知延迟和增强整体用户体验至关重要。


Flutter 在您团队的此应用长期可扩展性计划中扮演什么角色?您对 Flutter 持续支持生产应用有多大的信心?

我们选择 Flutter 是因为许多拥有数百万下载量的高知名度应用程序(例如 Google Pay)都在广泛使用它,这让我们确信可扩展性不会成为问题。最初,我们为 Android 和 iOS 采用了 Flutter,随着时间的推移,我们将其用途扩展到 PDF 生成、电子邮件处理和网站流程。它在所有这些领域都无缝运行。

通过使用 Flutter,我们不再需要针对不同平台的多名专家;同一个团队可以处理所有 UI 流程。我们在生产环境中使用 Flutter 已有两年时间,没有遇到任何稳定性问题。

我们看到了 Flutter 团队的持续改进,例如 WebAssembly 支持以提高 Web 性能,以及 Impeller 渲染引擎,它在 iOS 设备上提供更流畅的动画。


对于考虑将 Flutter 用于生产的其他团队,您认为最大的好处是什么?您会给他们什么建议以取得类似的成功?

“当你构建新事物时,每一个技术决策都很重要。Flutter 对我们来说不仅仅是框架的选择——它关乎如何用更少的资源做更多的事情。两年过去了,看到我们发布功能的速度和应用程序运行的流畅性,我们知道我们做出了正确的决定。”~ Sourabh Gupta

在管理企业财务方面,Tide 已成为简单高效的代名词。但在这用户友好的体验背后,是一个由 Flutter 驱动的强大技术引擎。


在这段独家视频采访中,我们深入探讨了 Tide 的 Flutter 之旅,与两位主导其移动转型的关键人物:高级员工工程师 Anna Leushchenko工程经理 Oleksandr Leushchenko


Tide 拥有一支由 68 名 Flutter 工程师组成的团队,他们着手进行一项雄心勃勃的项目,将他们的原生应用程序迁移到 Flutter。Anna 在构建应用程序基础和架构方面发挥了关键作用,Oleksandr 则负责安全性、测试和用户体验,他们分享了在整个过程中遇到的挑战、成功和经验教训。


了解 Tide 如何利用 Flutter 简化开发、增强应用程序性能并保持跨平台一致的体验。准备好被他们的故事所启发,并了解 Flutter 如何赋能各种规模的企业,让他们在创新浪潮中乘风破浪。


Play StoreApple Store 下载此应用。


在构建需要处理海量数据集且性能丝毫不打折扣的企业级应用程序时,TigerEye 绝不含糊。他们需要一个框架,不仅能够提供跨平台一致的用户体验,而且还能提供驯服数百万个数据点所需的低级控制和效率。他们的选择?Flutter。


在与 TigerEye 开发团队关键人物 Ralph Gootee 的坦诚对话中,我们超越炒作,探讨了 Flutter 之所以成为满足其复杂需求的理想解决方案的具体原因。Ralph 借鉴了他使用各种技术的丰富经验,揭示了 Flutter 独特的渲染、状态管理和跨平台一致性方法如何与 TigerEye 的愿景完美契合。


TigerEye 拥有一个由 12 名开发人员组成的团队,他们开始构建一个真正的跨平台原生应用程序,能够处理企业客户的海量数据需求。加入我们,深入探讨其 Flutter 实现的技术细节,包括:


TigerEye 如何在生产中使用 #Flutter

TigerEye,我们需要一个跨平台开发框架,但又不依赖于网络技术。我们优先考虑一种低级、类型安全的应用程序开发技术,以避免移植网络工具的陷阱。在探索了 React Native 和其他选项后,我们发现 Flutter 是理想的解决方案。


受视频游戏开发工具和索尼汽车接口白皮书的启发,我们认识到 Flutter 直接写入帧缓冲器的能力是一个游戏规则改变者。这种方法提供了卓越的性能和图形潜力,避免了操作系统强加的操作复杂性。结合其单向数据流和状态管理,Flutter 成为构建 TigerEye 复杂企业级应用程序的完美基础。


Flutter 实现了真正的跨平台功能,使我们能够维护单一代码库,而不会牺牲速度或质量。与 QT、React Native 或 Microsoft C# Mono 等旧系统相比,它速度快且权衡取舍少得多。其架构提供了干净、可维护、可测试的代码,可在不同平台上始终如一地执行。


与 Spotify、Zoom 甚至《暗黑破坏神》等现代视频游戏所使用的设计系统一样,TigerEye 的界面在不同设备上实现了统一性和精美度,而不会牺牲功能。Flutter 强大的小部件系统确保我们的企业用户无论使用哪个平台,都能获得高质量的结果。


性能和跨平台开发

TigerEye 的应用程序以每秒 60 帧的速度运行,同时处理数百万条数据记录,这部分得益于 DuckDB.Dart。这个针对 DuckDB 数据库的 Dart 插件直接在应用程序内提供高性能数据处理。Flutter 高效的小部件系统确保只有可见数据才被加载到内存中,从而优化了速度和资源使用。DuckDB.Dart 和 Flutter 的无缝集成共同为所有平台提供企业级性能和可扩展性。


因为 Flutter 直接与帧缓冲区协同工作,所以它简化了性能优化。专为高数据量构建的自定义小部件避免了瓶颈,这是 TigerEye 产品的一项关键功能,该产品每天处理数百万个数据点。Dart 的 FFI(外部函数接口)在此也发挥了关键作用,使我们能够将 DuckDB 高效集成到我们的系统中,以进行低级、高性能的数据处理。


跨平台一致的用户体验

TigerEye 使用自己的设计系统,以确保跨平台的一致体验。Flutter 使我们能够为数据网格和图表等小部件保持一致的外观和感觉,无论设备如何。


Flutter 能够根据设备功能(无论是像 iPad 这样的触摸屏设备还是带有鼠标的桌面设备)调整界面,这一点至关重要。我们不依赖 Cupertino 或 Material Design 等默认样式指南,而是自定义 Flutter 的小部件以符合 TigerEye 独特的设计要求。


Flutter 的灵活性还允许我们利用特定设备的功能,同时保持统一的体验。例如,在带有触摸屏的 Windows 设备上,我们的应用程序提供了优化的触摸界面,而在 macOS 上,我们提供了针对桌面用户量身定制的精美体验。这种适应性确保用户始终拥有类似原生的体验。


自动化测试和 CI/CD

Flutter 命令行友好的构建过程对 CI/CD 来说是颠覆性的。与 Xcode 等 GUI 繁重的工具不同,Flutter 允许我们使用统一的、基于代码的方法。这消除了手动步骤或平台特定配置的需要,简化了我们的发布,并实现了每周数百次部署。


Flutter 在测试方面也表现出色,它对小部件、视图和集成测试提供了强大的支持。这使我们能够隔离和测试特定功能,例如按钮或数据视图,而无需加载整个操作系统,从而节省了时间和资源。Flutter 测试的无头特性使其特别快速且对开发人员友好。


可扩展性和长期计划

TigerEye 专为企业级应用程序而构建,Flutter 已证明其能够有效处理大量数据。在 Google 的支持下,Flutter 提供了我们长期增长所需的可靠性和可扩展性。作为一家 Google 公司,我们将 Flutter 与 GCP 等其他 Google 技术一起使用,创建了一个支持我们可扩展性目标的无缝生态系统。


Dart 是驱动 Flutter 的语言,对我们的开发至关重要。它通过 Flutter 驱动我们的前端应用程序和我们的后端数据平台。这种共享的基础使我们不仅可以重用代码,还可以重用基本核心组件。例如,我们用 Dart 编写了一个模拟器来模拟业务未来并执行蒙特卡罗分析。这使我们能够在后端运行数千次模拟,同时使用相同的逻辑在前端运行单个模拟以进行可视化。这种双重用途能力提高了开发效率并确保了我们平台的一致性。


我们的应用程序专为 IPO 级别的公司设计,处理海量数据集至关重要。Flutter 的架构,结合 Dart 和 DuckDB.Dart,确保我们能够满足这些需求,而不会影响性能。


给考虑 Flutter 的团队的建议

  1. 原生跨平台开发:Flutter 在不牺牲性能的情况下提供原生跨平台解决方案的能力是无与伦比的。
  2. 高效代码:与最初为单一平台设计的框架相比,Flutter 的架构产生更干净、更易于维护的代码。
  3. 调试和分析工具:Flutter 的工具是同类最佳的,可以轻松找出并解决性能问题。

对于考虑 Flutter 的团队,我们的建议很简单:优先学习 Dart。它的多功能性允许在前端和后端系统之间无缝集成,从而为您的团队在性能和可伸缩性方面带来显著优势。Flutter 是一个适用于严肃企业级应用程序的现代、可靠的解决方案。

在快节奏的金融科技世界中,敏捷性和创新是关键。MAKE by KBank 作为泰国领先的数字银行平台,认识到需要一个能够提供高质量用户体验,同时实现快速开发和可扩展性的框架。他们的选择?Flutter。


在这次富有洞察力的采访中,我们与 MAKE by KBank 的高级软件工程师兼技术主管 Amorn Apichattanakul 进行了交流,探讨了 Flutter 如何赋能他们的团队构建一个强大且功能丰富的应用程序,以满足当今精通技术的用户的需求。


MAKE by KBank 的团队由 Flutter 工程师、后端开发人员、QA 自动化专家、数据分析师、UX/UI 设计师和产品负责人组成,他们踏上了创建无缝且安全的数字银行体验的旅程。Amorn 分享了他们决定采用 Flutter 的宝贵见解,强调了它对开发速度、资源分配和整体应用程序性能的影响。


Play StoreApple Store 下载 MAKE by KBank:预算应用程序。


哪些因素促使您的团队选择 Flutter 来开发生产级应用程序,以及它是否符合您的预期?

我们的主要目标是找到一个解决方案,使我们能够快速交付高质量产品,而无需维护独立的 iOS 和 Android 团队。作为一家初创公司,敏捷性至关重要,因此采用 Flutter 这样的跨平台框架是自然而然的选择。

性能是我们决策的另一个关键因素。虽然开发速度很重要,但我们不能在用户体验上妥协。Flutter 满足了这两个需求,通过单一代码库实现快速迭代,同时提供流畅响应的性能,即使对于要求很高的功能也是如此。起初,我们担心 Flutter 可能无法达到渗透测试团队所需的安全标准。我们认为其主要关注点是开发者体验,安全性可能会排在最后。然而,我们感到惊喜。Flutter 提供了实现强大安全措施所需的工具和灵活性,同时仍然提供了出色的开发者体验。它与原生 API 的无缝集成使我们能够有效地满足所有安全要求。这让我们对 Flutter 作为生产就绪框架充满信心。


Flutter 如何帮助您简化跨平台开发,以及它对您的开发速度和资源分配产生了什么影响?

作为一名 iOS 开发人员,我在原生应用开发过程中面临的最大挑战之一是管理两个独立的 codebase。这经常导致 iOS 和 Android 实现之间发生冲突,尤其是在 API 调用方面。当生产问题出现时,我们必须让多个角色(iOS、Android 和产品负责人)参与进来,以确定哪个平台具有正确的实现,从而减慢了解决速度。

Flutter 的单一代码库消除了这一痛点,确保了跨平台的一致实现,降低了此类错误的风险。这不仅加快了交付速度,还释放了用于修复差异和实现问题的资源。我们将这些资源重新投入到更彻底的测试中,从而提高了应用程序的质量和稳定性。通过专注于测试而不是重复开发,我们在不牺牲可靠性的情况下实现了更快的交付。


您面临的最重要的性能挑战是什么?哪些 Flutter 特定的技术或工具帮助解决了这些挑战?

我们面临的最大性能挑战之一是 Dart 在处理高计算任务(例如图像处理、压缩和实时机器学习)方面的局限性。我们最初尝试通过使用 Dart Isolates 来优化性能以减少 UI 卡顿,但发现 Dart 在这些领域的性能落后于原生解决方案。

幸运的是,Flutter 的方法通道提供了一种无缝的方式,可以将繁重的计算卸载到原生代码。通过利用此功能,我们将高计算任务传递给原生实现,同时将应用程序的其余部分保留在 Flutter 中。这种方法使我们能够实现与原生应用程序几乎持平的性能。虽然在 Flutter 和原生层之间传递数据会产生少量开销,但它微不足道,对我们来说并不是一个问题。


您如何确保跨平台的用户体验一致性,以及哪些 Flutter 功能帮助您实现了类似原生的感觉?

Flutter 提供对 Material Design 和 Cupertino Design 的内置支持,使开发人员能够轻松创建特定于平台的主题。您可以将小部件与特定于平台的主题包装起来,以确保跨平台的一致性。然而,我们的主要关注点不是模仿原生主题,因为大多数现代应用程序都旨在实现独特且品牌化的用户界面。

为了实现这一点,我们在 Material Design 原则的基础上构建了我们的自定义 UI,这为一致性和可用性提供了坚实的基础。Flutter 强大的动画功能使我们能够进一步增强用户体验,添加与我们的设计愿景相符的流畅过渡和动态视觉效果。这种方法确保了精美的、类似原生的感觉,同时保持了我们应用程序的独特身份。


您的 Flutter 应用的自动化测试和 CI/CD 方法是什么样的?它如何支持您的应用在生产环境中的稳定性?

与原生解决方案相比,Flutter 的小部件测试框架是一个游戏规则改变者。它允许我们有效地测试 UI 组件,类似于在 iOS 中测试 UIView 或 UIViewController,但具有更强大的工具。通过结合单元测试和小部件测试,我们可以在不影响速度或可靠性的情况下涵盖业务逻辑、UI 逻辑和集成场景。

然而,Flutter 的 UI 测试不如 Swift/Kotlin 等原生解决方案成熟,因为它缺少用于创建 UI 测试的录制模式等功能。此外,我们无法直接测试原生 UI 组件,但“Patrol”等工具帮助弥合了这一差距。虽然 Flutter 中的 UI 测试有限,但小部件测试已被证明更快、更可靠,使其成为我们的首选方法。

对于 CI/CD,Flutter 与现有的 iOS 和 Android 管道无缝集成,允许我们使用 Fastlane 等熟悉的工具进行自动化。这确保了流畅高效的部署过程,支持我们应用在生产环境中的稳定性。


您如何处理使用 Flutter 构建的生产应用的实时监控、bug 跟踪和性能分析?

对于实时监控、错误跟踪和性能分析,我们高度依赖 Firebase,它是一套出色的移动应用程序开发工具。Firebase 与 Flutter 无缝集成,只需最少的设置工作。

此外,大多数主要的监控 SDK 现在都完全支持 Flutter,因此实施这些工具非常简单。由于这些都是我们已经在原生应用程序中使用的成熟解决方案,因此过渡到 Flutter 在这方面没有带来任何挑战。这使我们能够保持与原生开发相同的高标准进行监控和分析。


Flutter 在您团队的此应用长期可扩展性计划中扮演什么角色?您对 Flutter 持续支持生产应用有多大的信心?

Flutter 通过在跨平台提供 UI 和实现逻辑的一致性,在我们的长期可扩展性计划中发挥着至关重要的作用。小部件测试和热重载等功能显著提高了我们的开发速度和效率,消除了对嵌入框架(例如 XCFrameworks 或 AAR 文件)等变通方法的需要,这些方法在原生开发中很常见。

我们对 Flutter 的未来充满信心,因为它的社区在世界各地开发者的积极贡献下不断壮大。即使万一 Google 退出,Flutter 的开源性质和全球普及度也确保了它的长寿和发展。我们认为 Flutter 的可行性没有威胁,并将其视为我们应用程序可扩展性的基石。


对于考虑将 Flutter 用于生产的其他团队,您认为最大的好处是什么?您会给他们什么建议以取得类似的成功?

我的许多同事仍然依赖原生开发,因为他们的职业生涯植根于此,即使他们好奇尝试 Flutter。对于考虑 Flutter 的团队来说,它最大的好处之一是能够节省非核心功能的时间和精力,尤其是那些需要复杂动画的功能,通过使用 Flutter 的 Add-to-App 方法。

在我们的案例中,我们正在构建一个金融应用程序,对安全性、原生集成和实时机器学习有很高的要求。我们已经成功地使用 Flutter 实现了这些,没有付出过多的努力,用户也喜欢这个结果。

关键问题是:您真的需要应用程序的每个部分都具有原生级别的性能吗?在软件开发中,关键在于为正确的工作使用正确的工具。Flutter 和原生都有各自的优势,成功的关键在于在 Flutter 擅长的领域(例如快速开发和 UI 灵活性)利用其优势,并在需要时集成原生解决方案。

为您的 Flutter 应用创建主屏幕和锁屏小部件

在本次研讨会中,我们将逐步介绍在 iOS 和 Android 上为您的 Flutter 应用添加主屏幕小部件和锁屏小部件所需的步骤。


准备工作

本次研讨会将深入探讨原生 Android 和原生 iOS 开发。除了安装 Flutter SDK 和开发环境之外,您还需要某些软件才能完成每个部分。要跟随 Android 部分,您只需 Android Studio。要跟随 iOS 部分,您需要一台安装了 Xcode 的 macOS 电脑和 Apple 开发者帐户。更多信息请参阅此 Github 存储库的 README

动手实践多因素认证和 Firestore 计数查询

为您的 Flutter 应用获取最新的 Firebase 功能。我们将从一个基本应用开始,然后添加多因素手机身份验证以确保更安全的登录。然后,我们将使用 Firestore 中的新 COUNT() 运算符,以极小的成本和复杂性将计数包含在应用中。


准备工作

为了参与本次研讨会,您需要设置好 Flutter 和 Firebase 开发环境。您可以按照 了解 Firebase for Flutter 编程实验室中的设置说明进行操作。完成编程实验室的第一到第四步以设置环境非常重要。如果您没有 Firebase 经验,建议您在研讨会之前完成整个编程实验室。

如何构建 Basil Material 3 研究

了解如何使用高级主题功能和 Material hct 颜色系统进行 Basil Material 3 研究。Basil 应用还展示了如何针对环境显示和智能显示进行构建。


准备工作

本次研讨会包含设计过程的步骤,将帮助开发人员学习如何将设计转化为代码。为了跟随研讨会的设计过程部分,您应该安装 Figma,或计划使用 Figma 的 Web 客户端。(如果您计划使用 Web 客户端,您应该事先测试 Figma,因为如果互联网连接不够快,它不如桌面客户端可靠。)除了 Figma,本次研讨会只使用标准的 Flutter 开发环境。

社区

社区准则

Community Guidelines

Google 面对面和线上活动的社区准则和反骚扰政策

Google 致力于为每个人提供一个没有骚扰、包容的活动体验,无论其性别认同和表达、性取向、残疾、神经多样性、外貌、体型、种族、国籍、民族、年龄、宗教或其他受保护类别。我们不容忍任何形式对活动参与者的骚扰。Google 认真对待违反我们政策的行为,并将采取适当的应对措施。


所有 Google 活动的参与者,包括现场和在线参会者、活动工作人员、演讲者和 Google 员工,都必须遵守以下政策

相互尊重。

尊重每一个人。参与活动时请认识到每个人都应该在这里——我们每个人都有权享受我们的体验,而无需担心骚扰、歧视或蔑视,无论是公然的还是通过微侵犯。所有形式的交流都不应贬低他人。请思考您所说的话,以及如果这些话是对您说或关于您的话,您会作何感受。

如果您看到或听到任何不当行为,请立即提出。

我们不容忍骚扰行为,当您或他人受到不尊重时,您有权礼貌地介入。让您感到不适的人可能没有意识到他们正在做什么,我们鼓励您礼貌地提醒他们注意他们的行为。

  • 跟踪/尾随
  • 蓄意恐吓
  • 骚扰性摄影或录像
  • 持续干扰演讲或其他活动
  • 冒犯性言语
  • 强化社会支配结构的言语
  • 公共场所的性暗示图像和语言
  • 不恰当的身体接触
  • 不受欢迎的性或身体关注
  • 身体或网络威胁

相关,但不限于

  • 神经多样性
  • 种族
  • 肤色
  • 原籍国
  • 性别认同
  • 性别表达
  • 性取向
  • 年龄
  • 体型
  • 残疾
  • 外貌
  • 宗教
  • 怀孕
  • 兵役状况
  • 社会人口特征

被要求停止任何骚扰行为的参与者应立即遵守。我们的零容忍政策意味着我们将调查和审查所有违反我们的活动社区准则和反骚扰政策的指控,并做出适当的回应。如需举报任何让您或他人感到不适的行为,请发送电子邮件至 flutter-engage-community@google.com


本政策适用于讲座、论坛、工作坊、编程实验室、社交媒体、所有与会者、合作伙伴、赞助商、志愿者、工作人员等。您明白我们的意思。Google 保留随时自行决定拒绝任何人在任何 Google 主办的活动(包括未来的 Google 活动)入场或将其移出的权利。这包括但不限于行为不检或不遵守本政策及其中条款和条件的与会者。如果参与者从事骚扰或令人不适的行为,会议组织者可采取其认为适当的任何行动,包括警告或将违规者逐出会议且不予退款,或阻止违规者帐户参与在线活动。