2024年12月17日:活动日
所有时间均为太平洋标准时间 (PST)
11:00 - 11:30
#Flutter在生产环境
无论您是经验丰富的专业人士还是刚刚入门,您都将从Flutter用户案例中获得新的见解和灵感,了解Flutter技术负责人介绍的最新功能,并在这个多环节的虚拟活动中预见Flutter应用开发的未来。
演讲者
Andrew Brogdon
Rivers Cuomo
11:30 - 11:45
#提问Flutter
Flutter团队负责人Todd Volkert、John McCutchan和Michael Thomsen现场回答社区提交的关于Flutter的问题!
演讲者
Craig Labenz
Michael Thomsen
Todd Volkert
John McCutchan
2024年12月19日:可观测的Flutter
所有时间均为太平洋标准时间 (PST)
09:00 - 10:00
技术主管小组讨论
对于在企业开发环境中使用Flutter构建应用有什么疑问吗?让在生产环境中使用Flutter的公司的技术主管们为您解答这些问题。
演讲者
Craig Labenz
社区活动
查找您附近的活动

社区聚会
查找您附近的#FlutterInProduction线下观看派对!
Betterment,一家管理着数十亿美元资产的领先智能投顾公司,选择Flutter来打造一款流畅、响应迅速且能轻松处理复杂金融数据的应用。Flutter提供接近原生性能的能力,确保了无缝的用户体验,从而赢得了Betterment庞大客户群的信任。
在这次采访中,Will Lockwood,一位高级软件工程师和Betterment Flutter迁移的核心贡献者,分享了一个由5名工程师组成的小团队如何启动一个试点项目,最终改变了Betterment整个移动开发格局的内部故事。他揭示了在安全性和可靠性至关重要的海量、以用户为中心的应用程序中采用Flutter所面临的挑战、取得的成功以及意想不到的好处。
准备深入了解Betterment的Flutter实践,学习他们如何利用“Add to App”实现无缝过渡,并发现这一决策不仅改进了他们的应用程序,还增强了整个组织。
在Play Store或Apple Store下载Betterment。
您能分享一下Betterment将一个大型、成熟的原生应用迁移到Flutter的经验吗?在此过程中,你们遇到了哪些主要挑战和好处?
大家好,我叫Will Lockwood,是Betterment的一名高级工程师。自2020年初以来,我们一直在面向消费者的生产应用中使用Flutter,该应用拥有数百个屏幕,服务近百万用户。
我们选择Flutter是为了通过构建一个单一应用程序而非两个,来提高移动开发的效率和效能。
然而,我们已经有两个应用程序在生产环境中部署了近7年。对于一个金融应用来说,安全性、可靠性和用户连续性至关重要——暂停所有新产品开发,一次性向用户推出一个全新的应用,这对于我们的业务来说既不可行,风险也太高。
我们不得不进行增量迁移,这样我们就能在工程师学习新语言和新框架的同时,继续发布新功能。从这个意义上说,Flutter的“Add to App”功能使这一切成为可能;我们构建了一个嵌入到现有应用中的新应用,然后它慢慢增长,取代了越来越多的原生体验,直到所有原生部分都被替换。
我们几乎立即感受到了好处,这些好处不仅仅是“一次构建成本更低”这一点。
通过整合一套单一的最佳实践和基础设施,我们能够更有效地培训工程师,并以比以往更高的质量在Flutter中交付功能。拥有一个应用进行监控,使我们在事件预防和响应方面更有效率。此外,统一的移动开发促进了移动工程师与组织其他部门之间更简单、更好的协作,这使得我们组织的其他部门也更有效率。
在Flutter中重建我们的设计系统,在移动工程师和我们的设计团队之间建立了更深层次的联系,使我们能够在所有平台上提供更一致、更美观的用户界面,包括支持深色模式和特定平台体验。构建一个移动API客户端极大地简化了与后端工程师的维护和协作,以至于我们决定更进一步,将我们的API也统一到移动端和Web端。
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驱动的Logo制作工具,仅由三名工程师组成的精益团队就积累了数百万的安装量。与我们一起,和Jamsheed Kamardeen(首席技术官)和Chinmay Kabi(高级移动应用开发者)聊聊他们决定采用Flutter的缘由,以及Flutter如何赋能他们克服图像处理、跨平台一致性和快速迭代的复杂性。
了解Blend如何利用Flutter的渲染精度、自定义UI功能和性能优化工具,在各种设备上提供无缝的用户体验。我们将探讨他们解决性能瓶颈的巧妙方案、他们的测试和部署方法,以及他们对Flutter在雄心勃勃的项目中长期潜力的见解。
在Play Store和Apple Store下载该应用。
是什么因素促使您的团队选择Flutter来开发生产级应用程序?它如何满足了您的期望?
- 渲染精度:Flutter的渲染引擎确保在不同的设备生态系统中实现像素级的完美一致性。这对于我们这种以图形为导向的产品至关重要,因为视觉保真度是首要考量。
- 跨平台效率:我们实现了98%的代码跨平台共享,显著减少了开发时间和维护开销。这种效率水平在其他跨平台框架中是无与伦比的。
- 性能:Flutter针对发布版本进行的提前编译(AOT)实现了接近原生的性能,这对于设计密集型应用程序中的流畅用户交互至关重要。
- 自定义UI组件:Flutter的小部件系统使我们能够创建高度定制化、可重用的UI组件,这些组件在整个应用程序中保持一致性,从而提高了开发速度和用户体验。
- 热重载:此功能极大地改善了我们的开发周期,使我们能够实时迭代设计和功能,这对于视觉导向的产品至关重要。
- 强大生态系统:包括各种第三方软件包在内的强大Flutter生态系统加速了我们的开发。
Flutter不仅满足而且超出了我们的预期,使我们能够以卓越的开发效率,在各个平台上交付高性能、视觉一致的应用程序。
Flutter如何帮助您简化跨平台开发?它对您的开发速度和资源分配产生了什么影响?
Flutter在简化我们的跨平台开发方面发挥了关键作用,使Blend能够保持一支精简高效的团队,同时在全球范围内交付高质量的产品。它对我们的开发速度和资源分配产生了显著影响。
- 团队效率:我们仅用2-3名移动工程师就实现了[X百万]安装量,并保持了[Y星]评级。每位工程师所能达到的这种影响力证明了Flutter的效率。
- 国际化:Flutter通过intl包对l10n和i10n的一流支持,加上区域感知小部件,使我们能够高效地将应用本地化为15种语言。
- 资源分配:通过消除对特定平台团队的需求,我们将资源重新分配到核心功能开发和AI集成上,加速了产品演进。
- 性能优化:Flutter内置的性能分析工具使我们能够以最小的额外工作量保持高性能,这对于我们的图形密集型应用程序至关重要。
你们面临的最显著的性能挑战是什么?哪些Flutter特有的技术或工具帮助你们解决了这些问题?
我们面临的最重大挑战之一是优化图像批量编辑功能,该功能包括同时应用模板、编辑背景、重新定位和应用阴影。核心要求是在每次用户操作后立即生成预览。我们利用Flutter的功能,从服务器端处理转向设备端处理,并实施了多项优化:自定义渲染管道:使用PipelineOwner和RenderView开发,用于离屏预览生成。
- 图像预缓存:利用precachingImage,将预览生成时间提高了30%。
- 控制重新渲染:实施了RepaintBoundary,策略性地使用key,并利用DevTools来最大限度地减少不必要的重绘。
这些Flutter特有的技术,加上设备端生成,将预览生成时间缩短了66%。这种设备端方法不仅通过近乎即时的预览增强了用户体验,还减少了服务器负载并改进了离线能力,展示了Flutter在为复杂图像处理任务实现复杂的本地计算方面的强大功能。
你们如何确保跨平台用户体验的一致性?哪些Flutter功能帮助你们实现了类似原生的感觉?
我们从零开始构建UI组件,而Flutter小部件使我们能够轻松创建可重用组件。通过借鉴Android和iOS设计指南的最佳实践,我们的组件在两种环境中都表现良好。
您的Flutter应用的自动化测试和CI/CD方法是怎样的?它如何支持了您的应用在生产环境中的稳定性?
我们使用GitHub Actions,在每次拉取请求(pull request)时构建应用,并生成产品团队用于测试应用的APK包。这确保了我们无需每次都要求开发人员构建并分发给团队其他成员。在构建或等待构建上没有时间浪费。每个新的提交都会自动构建,GitHub Actions和PR成为唯一的真相来源。一旦PR合并,更多的GitHub Actions会针对生产环境进行构建,并上传到App Store和Play Store,从而在没有人工错误的情况下帮助分发。
您如何处理使用Flutter构建的生产应用的实时监控、错误跟踪和性能分析?
我们使用Sentry的错误跟踪和性能监控工具与Flutter。集成效果很好,能够收集额外的设备指标、面包屑(breadcrumbs),并且与导航等功能的集成也很容易。因此,我们可以轻松追踪用户在崩溃前的操作路径,并重现问题。通过清晰的堆栈跟踪,找出问题原因通常非常简单。
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 Store和Apple Store下载Scapia。
是什么因素促使您的团队选择Flutter来开发生产级应用程序?它如何满足了您的期望?
Scapia在2022年成立时,我们确定了使我们的技术与竞争对手区分开来的关键因素,并吸取了在Flipkart和Swiggy的经验教训。以下是我们技术栈的关键考虑因素:
- 专注于UI/UX卓越性:我们旨在交付一款拥有卓越UI和UX、并强调丰富动画效果的应用程序。该框架需要支持高级动画功能。
- 一次编写,随处部署:一个能够让我们一次编写代码并在多个平台无缝部署的框架至关重要。
- 高性能:确保跨平台卓越性能对于提供一致的用户体验至关重要。
- 跨平台UI一致性:在所有平台上保持无缝和统一的UI对于连贯的应用体验至关重要。
在评估了这些标准后,我们发现Flutter完美符合我们的要求,并选择它作为我们应用程序的基础。
现在,距离应用程序发布两年了,我们使用Flutter的体验非常出色。我们成功地以最少的资源为应用程序添加了多个垂直领域,同时保持了跨平台的一致性能。除了移动开发,我们还利用Flutter进行PDF生成和网站工作流程,展示了其多功能性和健壮性。
Flutter如何帮助您简化跨平台开发?它对您的开发速度和资源分配产生了什么影响?
答:Flutter通过使我们能够一次编写代码并将其部署到Android、iOS和Web平台,极大地帮助了我们的团队。它提高了我们在跨平台构建一致用户流的效率,并允许我们同时部署相同的代码,从而确保统一的用户体验。此外,Flutter使单个开发者能够端到端地管理一个功能,消除了为特定平台代码雇佣多个开发者的需求。
你们面临的最显著的性能挑战是什么?哪些Flutter特有的技术或工具帮助你们解决了这些问题?
我们使用Flutter面临的主要挑战之一是处理OTA(空中下载)更新。每当我们修复崩溃或发布关键问题时,我们都必须发布一个新的应用程序版本,然后该版本需要经过审核流程。
我们通过集成Shorebird解决了这一挑战,Shorebird支持Flutter应用的OTA更新。通过这次集成,我们已经能够在生产环境中为Android和iOS推出多个关键修复,而无需等待新的应用发布。这使得我们像React Native等支持OTA更新的其他技术一样敏捷。
你们如何确保跨平台用户体验的一致性?哪些Flutter功能帮助你们实现了类似原生的感觉?
确保跨平台一致的用户体验是移动开发中的一个重大挑战。Flutter通过直接编译为原生代码来解决这个问题,从而减少了性能瓶颈,并确保了流畅、响应迅速的用户体验。
Flutter使用其自己的渲染引擎(Skia),绕过平台原生组件。这确保了UI元素在Android、iOS、Web和桌面平台上看起来和行为一致。此外,通过使开发者能够为多个平台编写单一代码库,Flutter消除了功能和设计上的差异。
我们在应用中大量使用Rive动画,并且没有遇到任何问题。
您的Flutter应用的自动化测试和CI/CD方法是怎样的?它如何支持了您的应用在生产环境中的稳定性?
我们从一开始就投资了CI/CD管道,认识到它提供的关键优势:一致的SDK版本、自动版本控制支持、减少人为错误以及更快的部署。我们为应用程序的构建和部署过程集成了Xcode Cloud管道。现在,我们的构建会根据预定义的触发器(例如拉取请求合并和分支更改)在云端自动生成。这种精简的工作流程为我们节省了之前所需超过30分钟的手动工作,并通过发送到我们专用Slack频道的通知,提高了我们了解构建状态的能力。附图解释了我们的构建过程。

您如何处理使用Flutter构建的生产应用的实时监控、错误跟踪和性能分析?
我们使用Firebase来监控应用程序崩溃和性能问题。Firebase Flutter SDK易于集成,能够无缝跟踪应用程序的健康状况。为了测量网络延迟和应用程序启动时间,我们广泛利用了Firebase Performance的自定义跟踪流程。这对于减少我们API调用的感知延迟和提升整体用户体验起到了关键作用。
Flutter在您团队的这款应用的长期可伸缩性计划中扮演什么角色?您对Flutter持续支持生产应用有多大信心?
我们选择Flutter是因为许多拥有数百万下载量的高知名度应用程序,如Google Pay,都在广泛使用它,这让我们确信可伸缩性不会成为问题。最初,我们为Android和iOS采用了Flutter,随着时间的推移,我们将其用途扩展到PDF生成、电子邮件处理和网站流程。它在所有这些领域都无缝运行。
通过使用Flutter,我们不再需要为不同平台配备多名专家;同一个团队可以处理所有UI流程。我们在生产环境中使用Flutter已有两年,没有遇到任何稳定性问题。
我们看到了Flutter团队的持续改进,例如WebAssembly支持以提升网页性能,以及Impeller渲染引擎,它在iOS设备上提供了更流畅的动画。
对于其他考虑将Flutter用于生产环境的团队,您看到了哪些最大的好处?您会给他们什么建议以取得类似的成功?
当你构建新事物时,每一个技术决策都至关重要。对我们来说,Flutter不仅仅是一个框架选择——它是关于找到一种方法来事半功倍。两年过去了,看到我们发布功能的速度以及应用程序运行的流畅程度,我们知道我们做出了正确的决定。” ~ Sourabh Gupta
在管理企业财务方面,Tide已成为简洁和高效的代名词。但在这用户友好的体验背后,是一个由Flutter驱动的强大技术引擎。
在这次独家视频采访中,我们与两位主导Tide移动转型的关键人物——Anna Leushchenko,高级资深工程师,和Oleksandr Leushchenko,工程经理——深入探讨了Tide的Flutter之旅。
Tide拥有一支由68名Flutter工程师组成的团队,他们启动了一个雄心勃勃的项目,将原生应用迁移到Flutter。Anna在构建应用基础和架构方面发挥了关键作用,而Oleksandr则负责安全性、测试和用户体验,他们分享了在这一过程中遇到的挑战、取得的成功以及学到的经验教训。
了解Tide如何利用Flutter简化开发、提升应用性能并在不同平台保持一致的用户体验。准备好被他们的故事所启发,并学习Flutter如何赋能各种规模的企业驾驭创新浪潮。
在Play Store和Apple 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或微软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的团队的建议
- 原生跨平台开发:Flutter在提供原生跨平台解决方案而不牺牲性能方面无与伦比。
- 高效代码:与最初为单一平台设计的框架相比,Flutter的架构生成更简洁、更易维护的代码。
- 调试和分析工具:Flutter的工具是同类最佳的,使您能够轻松找出并解决性能问题。
对于考虑使用Flutter的团队,我们的建议很简单:优先学习Dart。它的多功能性使其能够无缝集成前端和后端系统,为您的团队在性能和可伸缩性方面带来显著优势。Flutter是适用于严谨企业级应用程序的现代化、可靠的解决方案。
在快节奏的金融科技世界中,敏捷性和创新是关键。MAKE by KBank,泰国领先的数字银行平台,认识到需要一个能够提供高质量用户体验,同时实现快速开发和可扩展性的框架。他们的选择?Flutter。
在这次与Amorn Apichattanakul(MAKE by KBank高级软件工程师兼技术主管)的深度访谈中,我们探讨了Flutter如何赋能他们的团队构建一个健壮且功能丰富的应用程序,以满足当今精通技术的用户的需求。
MAKE by KBank团队由Flutter工程师、后端开发人员、QA自动化专家、数据分析师、UX/UI设计师和产品负责人组成,他们踏上了一段创建无缝且安全数字银行体验的旅程。Amorn分享了他们决定采用Flutter的宝贵见解,强调了其对开发速度、资源分配和整体应用性能的影响。
在Play Store和Apple 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的方法通道(method channels)提供了一种无缝的方式将繁重计算卸载到原生代码。通过利用这一能力,我们将高计算任务传递给原生实现,同时将应用程序的其余部分保留在Flutter中。这种方法使我们能够达到与原生应用几乎相当的性能。虽然在Flutter和原生层之间传递数据会产生少量开销,但这可以忽略不计,对我们来说不是问题。
你们如何确保跨平台用户体验的一致性?哪些Flutter功能帮助你们实现了类似原生的感觉?
Flutter内置支持Material Design和Cupertino设计,使开发者能够轻松创建特定于平台的主题。您可以使用特定于平台的主题来包裹小部件,以确保跨平台的一致性。然而,我们的主要关注点并非模仿原生主题,因为大多数现代应用程序都旨在拥有独特且品牌化的用户界面。
为此,我们基于Material Design原则构建了自定义UI,这为一致性和可用性奠定了坚实的基础。Flutter强大的动画功能使我们能够进一步提升用户体验,添加与我们的设计愿景相符的流畅过渡和动态视觉效果。这种方法确保了应用程序具有精美的原生感,同时保持了独特的品牌标识。
您的Flutter应用的自动化测试和CI/CD方法是怎样的?它如何支持了您的应用在生产环境中的稳定性?
与原生解决方案相比,Flutter的小部件测试框架(Widget Testing framework)是一个颠覆性创新。它使我们能够有效地测试UI组件,类似于在iOS中测试UIView或UIViewController,但工具功能强大得多。通过结合单元测试和小部件测试,我们可以在不牺牲速度或可靠性的情况下覆盖业务逻辑、UI逻辑和集成场景。
然而,Flutter的UI测试不如Swift/Kotlin等原生解决方案成熟,因为它缺少像用于创建UI测试的“录制模式”等功能。此外,我们无法直接测试原生UI组件,但“Patrol”等工具帮助弥补了这一差距。尽管Flutter中的UI测试有限,但小部件测试已被证明更快、更可靠,使其成为我们首选的方法。
对于CI/CD,Flutter与现有的iOS和Android管道无缝集成,使我们能够使用Fastlane等熟悉的工具进行自动化。这确保了流畅高效的部署过程,支持我们应用在生产环境中的稳定性。
您如何处理使用Flutter构建的生产应用的实时监控、错误跟踪和性能分析?
对于实时监控、错误跟踪和性能分析,我们高度依赖Firebase,它是移动应用开发的一套优秀工具。Firebase与Flutter无缝集成,只需极少的设置工作。
此外,大多数主要的监控SDK现在都完全支持Flutter,因此实现这些工具非常简单。由于这些都是我们已经在原生应用程序中使用的成熟解决方案,因此过渡到Flutter在此领域没有带来任何挑战。这使我们能够像原生开发一样,保持监控和分析方面的高标准。
Flutter在您团队的这款应用的长期可伸缩性计划中扮演什么角色?您对Flutter持续支持生产应用有多大信心?
Flutter通过在跨平台UI和实现逻辑方面提供一致性,在我们的长期可伸缩性计划中发挥着关键作用。小部件测试(Widget Testing)和热重载(Hot Reload)等功能显著提升了我们的开发速度和效率,消除了原生开发中常用的嵌入式框架(例如XCFrameworks或AAR文件)等变通方案的需求。
我们对Flutter的未来非常有信心,因为它的社区在全球开发者的积极贡献下持续壮大。即使在Google退出这种不太可能发生的情况下,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开发环境。您可以按照了解Flutter版Firebase Codelab中的设置说明进行操作。重要的是,您需要完成Codelab的第一步到第四步,以便设置好您的环境。如果您没有Firebase经验,建议您在研讨会之前完成整个Codelab。
如何构建 Basil Material 3 研究
了解如何使用高级主题功能和 Material hct 颜色系统进行 Basil Material 3 研究。Basil 应用还展示了如何针对环境显示和智能显示进行构建。
准备工作
本研讨会包含设计过程的步骤,这将帮助开发者学习如何将设计转化为代码。为了跟随研讨会的设计过程部分,您应该安装Figma,或者计划使用Figma的网页客户端。(如果您计划使用网页客户端,您应该提前测试Figma,因为如果网络连接不够快,它不如桌面客户端可靠。)除了Figma,本次研讨会只使用标准的Flutter开发环境。
社区
社区准则

Google 面对面和线上活动的社区准则和反骚扰政策
谷歌致力于为所有人提供一个无骚扰且包容的活动体验,无论其性别认同和表达、性取向、残疾、神经多样性、外貌、体型、种族、国籍、民族、年龄、宗教或其他受保护类别。我们绝不容忍任何形式的对活动参与者的骚扰行为。谷歌将严肃处理违反我们政策的行为并采取适当回应。
所有 Google 活动的参与者,包括现场和在线参会者、活动工作人员、演讲者和 Google 员工,都必须遵守以下政策
相互尊重。
尊重每一个人。参与时请承认每个人都值得在此——我们每个人都有权享受自己的体验,而不必担心骚扰、歧视或傲慢,无论是明目张胆的还是通过微侵犯。所有形式的交流都不应贬低他人。思考您所说的话,以及如果这些话是对您说的,或者关于您说的,您会作何感受。
如果您看到或听到任何不当行为,请立即提出。
骚扰行为是不可容忍的,当您或他人受到不尊重时,您有权礼貌地介入。让您感到不适的人可能没有意识到他们的行为,因此鼓励您礼貌地提醒他们注意自己的行为。
- 跟踪/尾随
- 蓄意恐吓
- 骚扰性摄影或录像
- 持续干扰演讲或其他活动
- 冒犯性言语
- 强化社会支配结构的言语
- 公共场所的性暗示图像和语言
- 不恰当的身体接触
- 不受欢迎的性或身体关注
- 身体或网络威胁
相关,但不限于
- 神经多样性
- 种族
- 肤色
- 原籍国
- 性别认同
- 性别表达
- 性取向
- 年龄
- 体型
- 残疾
- 外貌
- 宗教
- 怀孕
- 兵役状况
- 社会人口特征
被要求停止任何骚扰行为的参与者应立即遵守。我们的零容忍政策意味着我们将调查并审查所有违反我们的活动社区准则和反骚扰政策的指控,并采取适当回应。如需举报任何让您或他人感到不适的行为,请发送邮件至flutter-engage-community@google.com。
本政策适用于讲座、论坛、研讨会、编程实验室、社交媒体、所有与会者、合作伙伴、赞助商、志愿者、工作人员等。您懂我们的意思。谷歌保留在任何时候自行决定拒绝任何人员参加或将任何人员从任何谷歌主办的活动(包括未来的谷歌活动)中移除的权利。这包括但不限于行为不当或未能遵守本政策及其中条款和条件的与会者。如果参与者从事骚扰或令人不适的行为,会议组织者可采取其认为适当的任何行动,包括警告或将违规者从会议中驱逐,且不予退款,或阻止违规者的账户在线参与。