{{{width=300}}} 作者 | Flutter 官方博客
译者 | 核子可乐
策划 | 田晓旭
下一代 Flutter 专为 Web、移动与台式机环境构建而成。
今天,我们宣布 Flutter 2 正式亮相!作为 Flutter 的一次重大版本升级,Flutter 2 将帮助开发人员立足任意平台创建起美观、快速且能够轻松移植的应用程序。在 Flutter2 的支持下,您可以使用相同的代码库将原生应用程序发布至 iOS、Android、Windows、macOS 以及 Linux 五大系统阵营之上。此外,Flutter 2 还能够完美契合 Chrome、Firefox、Safari 以及 Edge 等网络浏览器,甚至可以被嵌入至汽车、电视与智能家居当中,借此带来最普遍、最具便携性的计算体验。
我们的目标,是从根本上改变开发人员的应用程序构建思路。不同于以往对于特定平台的依赖,如今开发人员们可以将希望创造的体验本身作为出发点。Flutter 帮助您将品牌与设计诉求充分纳入应用体验当中。Flutter 的运行速度极快,能够将源代码编译为机器码;我们还支持有状态热重载,确保您在解释环境中获得良好生产力,并在应用程序运行时做出变更并立即查看结果。Flutter 是一套开放式核心框架,而且已经有成千上万贡献者通过软件包生态系统做出扩展贡献。
在今天发布的 Flutter 2 当中,我们将 Flutter 由移动框架扩展为一套可移植框架,努力确保您的应用程序能够在几乎无需任何调整的前提下轻松运行在不同平台之上。目前,单在 Play Store 软件商店中就存在超过 15 万个 Flutter 应用,且每款应用都可以获得 Flutter 2 提供的免费升级,由此在无需重写的情况下直接运行在目标台式机及 Web 环境当中。
目前,世界各地的客户都在积极使用 Flutter,包括微信、Grab、Yandex Go、Nubank、Sonos、Fastic、Betterment 以及 realtor.com 等高人气应用。在谷歌,同样有 1000 多名工程师正在使用 Dart 与 Flutter 构建应用产品,其中的代表包括 Stadia、Google One 以及 Google Nest Hub。
就在几个月前,Google Pay 刚刚转投 Flutter 的怀抱,借此在生产力与质量方面取得了重大进步。通过统一代码库,项目团队消除了不同平台之间的功能差异,并削减了超过 100 万行代码。Google Pay 还报告称,如今团队工程师们的效率大为提升、技术债务显著减少,发布流程也变得更为统一(例如 iOS 与 Android 上的安全审查与试验)。
Flutter 为 Web 应用添助力
Flutter 2 当中最具份量的升级,当数对 Web 的生产质量支持能力。
Web 在早期发展阶段主要以文档为中心。时至今日,Web 平台已经相当丰富并提供大量平台 API,可提供硬件加速下的 2D 与 3D 图形处理能力、灵活的布局与绘图 API,共同构建起高度复杂的应用程序。Flutter 的 Web 支持充分吸纳了上述创新优势,提供一套以应用程序为中心的框架体系,能够发挥现代 Web 提供的一切功能。
新版本主要关注以下三大应用场景:
渐进式 Web 应用(PWA),将 Web 的广泛覆盖范围与桌面应用程序的功能优势结合起来。
单页应用程序(SPA),一次加载并与互联网服务之间持续传输数据。
将现有 Flutter 移动应用引入 Web 环境,实现两种体验间的代码共享。
过去几个月以来,我们一直努力实现稳定的 Web 支持能力,并在性能优化方面取得了大量进展。除了添加一套由 WebAssembly 构建的全新 CanvasKit 驱动型渲染引擎之外,我们还公布了 Flutter Plasma——由社区成员 FelixBlaschke 构建的演示方案,用以展示如何通过 Dart 与 Flutter 困难构建起复杂的 Web 图形体验。现在,这些体验已经能够在台式机与移动设备上原生运行。
我们一直在扩展 Flutter 以构建起行业最佳的 Web 平台。最近几个月,我们引入了文本自动填充功能,对地址栏 URL 及路由的控制机制以及 PWA 清单功能。为了将台式机浏览器与手机浏览器统一起来,我们又添加了交互式滚动条与键盘快捷键、增加了台式机模式下的默认内容显示密度,同时增强了屏幕阅读器对于 Windows、MacOS 以及 Chrome OS 辅助功能的支持能力。
我们已经发布 Flutter 构建的部分 Web 应用程序示例。在教育类用户中,iRobot 公司以其高人气 Root 教育机器人而闻名。Flutter 对于 Web 的生产级支持帮助 iRobot 将现有教育编程环境轻松迁移至 Web,相关功能也借此顺利登陆 Chromebook 及其他网络浏览器。关于相关进展以及选择 Flutter 的原因,请参阅 iRobot 发布的 说明博文:
https://edu.irobot.com/the-latest/building-a-coding-experience-for-all
另以 Rive 为例,这是一款专门面向设计师群体的强大工具,能够在任意平台上创建出自定义动画。其更新 Web 应用程序现已提供 Beta 测试版,完全由 Flutter 构建而成,充分展示了 Flutter 新版本提供的全面服务。
Flutter 2 登陆台式机、折叠式设备与嵌入式设备
除了传统移动设备与 Web 平台之外,Flutter 也开始为其他设备类型提供支持。在本文中,我们将以三位合作伙伴为例,聊聊 Flutter 的强大可移植性表现。
首先是 Canonical,我们双方合作将 Flutter 引入桌面环境,借此 Canonical 工程师们贡献的代码支持 Flutter 在 Linux 上的开发与部署。Ubuntu 团队展示了由 Flutter 重写的全新安装程序的早期演示效果。对 Canonical 而言,最重要的就是如何在各类硬件配置之上提供稳定且令人愉悦的使用体验。展望未来,Flutter 将成为 Canonical 构建后续桌面与移动应用程序时的默认选项。
接下来是微软,软件巨头同样在不断扩大对 Flutter 的支持。除了在 Flutter 当中建立更完善的 Windows 支持能力之外,微软此次同样宣布将对 Flutter 引擎提供全面支持,借此支持更多新型折叠式 Android 设备。这类设备将引入新的设计模式,相关应用能够扩展显示内容或利用双屏特性提供并行体验。结合 Surface 工程团队的博文,他们展示了自己的工作成果并邀请更多参与成员,希望借 Flutter 之力提升 Surface Duo 及其他同类设备的体验质量。
最后,全球汽车巨头丰田公司也宣布了相关计划,着手构建由 Flutter 提供支持的车载信息娱乐系统,希望借此将最佳数字体验引入汽车产品。使用 Flutter 代表着车载软件的开发方式将出现重大变化。之所以选择 Flutter,是因为丰田看中了其出色的性能与一致性使用体验、快速迭代、易于掌握的人机工程学设计以及与智能手机相匹配的良好触控机制。通过使用 Flutter 的嵌入器 API,丰田得以针对车载系统的独特需求对 Flutter 做出量身定制。
我们很高兴能够与丰田及其他厂商积极合作,将 Flutter 应用于汽车、电视及其他嵌入式设备。未来几个月内,我们也将继续分享更多实际用例。
不断发展的 Flutter 生态系统
目前,Flutter 与 Dart 已经拥有超过 15000 种软件包,分别来自 Amazon、微软、Adobe、阿里巴巴、eBay 以及 Square 等。除 Lottie、Sentry 以及 SVG 等关键软件包之外,sign_in_with_apple、google_fonts、geolocator 以及 sqflite 等 Flutter Favorite 首选软件包同样值得关注。
现在,我们宣布正式推出 Google Mobile Ads for Flutter 的 Beta 版本。这是一种能够与 AdMob 与 AdManager 配合使用的全新 SDK,可提供包括横幅广告、插页广告、原生广告与奖励视频广告在内的多种广告格式。此前,我们一直在与多位主要客户共同试用此 SDK,例如南美洲最大的独立艺术家音乐平台 SuaMúsica 等。如今,我们决定开放 Google Mobile Ads for Flutter SDK 以供行业广泛使用。
我们还将对 Flutter 插件做出更新,包括多项核心 Firebase 服务:Authentication, CloudFirestore, Cloud Functions, Cloud Messaging, Cloud Storage 以及 Crashlytics,外加 sound null safety 支持以及对 Cloud Messaging 软件包的全面更新。
Dart: Flutter 背后的独门绝技
如前文所述,Flutter 2 拥有灵活的多平台与多设备可移植能力。而这种轻松过渡至 Web、桌面与嵌入式设备的优势,在很大程度上要归功于 Dart——针对多平台开发并进行优化的谷歌编程语言。
在构建应用方面,Dart 提供一套独特的功能组合:
稳健的可移植表现,其编译器能够面向移动与台式机设备生成高性能的英特尔与 ARM 机器码,并为 Web 环境提供经过严格优化的 JavaScript 输出。所有目标皆可使用相同的 Flutter 框架源代码。
支持有状态热重载的迭代开发,充分支持桌面与移动设备,同时提供现代 UI 编程中的异步、并发模式设计提供相应的语言构造。
谷歌级性能水平,可跨越一切平台实现良好性能表现,提供 sound null safety 以保证运行时与开发过程中的 null 约束能力。
从目前来看,还没有哪种语言能够像 Dart 这样将所有功能优势融合起来。也正因为如此,Dart 成为 GitHub 上发展速度最快的语言之一。
Dart 2.12 现已正式发布,也是自 2.0 版本之后我们推出的最大规模发行版,可充分支持 sound null safety。Sound null safety 有望消除 null 引用引发的异常,为开发及运行时提供良好保障,允许开发人员明确指定哪些类型中可以包含 null 值。最重要的是,这项功能并非空降落地:您可以按自己熟悉的方式将其逐步添加至代码内,而后配合迁移工具实现 null 值保护。
此次更新还包含 FFI 稳定实现,允许您编写出能够与基于 C 语言的 API 进行互操作的高性能代码;由 Flutter 编写的全新集成化开发者与分析器工具;外加众多性能与体量方面的改进,能够在无需重新编译的前提下进一步实现代码升级。关于更多详细信息,请参阅 Dart 2.12发布的公告博文:
https://medium.com/dartlang/announcing-dart-2-12-499a6e689c87
Flutter 2:现已发布
关于 Flutter 2 还有很多新鲜内容可讲,但受到本文篇幅所限,我们无法一一尽述。实际上,全部 pull 请求记录与说明构成的文档长达 200 页!感兴趣的朋友请访问 Flutter 2独立技术博客,在这里了解关于新功能与性能改进的更多信息:
https://medium.com/flutter/whats-new-in-flutter-2-0-fe8e95ecc65
我们还与加拿大屡获殊荣的设计团队 gskinner 合作开发出新的展示成果——Flutter Folio。Folio 是一款剪贴板应用程序,适用于一切设备平台。其小屏幕体验专为内容捕捉所设计;大屏幕支持允许您立足台式机与平板电脑以大家熟悉的方式完成编辑操作;Web 体验则专门针对共享操作开发而成。这一切量身定制体验都将共享同一套开源代码库,您可以随时查看并参与贡献。
如果您还没有体验过 Flutter,请千万不要错过它将给您应用程序开发体验带来的重大提升。在 Flutter 中,我们还提供一套开源工具包,可通过单一代码库构建起面向移动、桌面、Web 以及嵌入式设备的出色应用程序,将谷歌级别的质量水准引入您的实际需求场景当中。
Flutter 为自由开源项目,我们期待有更多朋友使用 Flutter 2 构建起精美绝伦的开发成果!