针对 Web,移动端和桌面端构建的下一代 Flutter
今天,我们正式宣布 Flutter 2 重大升级, 使开发人员能够为任何平台创建美观、快速且可移植的应用程序。借助 Flutter 2,您可以使用相同的代码库将本机应用程序发布到五个操作系统:iOS,Android,Windows,macOS 和 Linux;以及针对 Chrome,Firefox,Safari 或 Edge 等浏览器的 Web 体验。Flutter 甚至可以嵌入到汽车,电视和智能家电中,为环境计算世界提供普遍且可延展的体验。
我们的目标是从根本上改变开发人员对构建应用程序的看法, 不从您要定位的平台开始,而要从您要带来的体验开始。Flutter 使您可以在品牌和设计走在前列的情况下,手工创造 美好 的体验。Flutter 速度很快,可以将源代码编译为机器代码, 同时由于我们有着可维持状态的热重载的支持,您仍然可以在正式环境的 提升开发生产力, 在应用程序运行时您可以进行更改并立即查看结果。Flutter 是 开放 的,成千上万的贡献者为核心框架添砖加瓦, 并通过软件包的生态系统对其进行了扩展。
在 今天发布 的 Flutter 2 中, 我们将 Flutter 从移动框架扩展为 可移植 框架, 让您的应用程序可以在各种不同的平台上运行,几乎没有妥协。仅 Play 商店就已经有 超过 15 万个 Flutter 应用程序, 并且每个应用程序都可以通过 Flutter 2 免费升级, 因为它们现在可以在不重写的情况下,扩展到桌面端和 Web 平台。
来自世界各地的客户正在使用 Flutter, 包括一些流行的应用程序, 如 微信、Grab、Yandex Go、Nubank、Sonos、Fastic、Betterment 和realtor.com。在 Google,我们依赖 Flutter, Google 的一千多名工程师正在使用 Dart 和 Flutter 构建应用程序。实际上,其中许多产品已经交付,包括 Stadia,Google One 和 Google Nest Hub。
几个月前,Google Pay——其团队的标杆应用完全改为用 Flutter 开发, 他们已经在生产力和质量上取得了重大进步。通过统一代码库,该团队消除了平台之间的功能差异,并消除了超过一百万行代码。Google Pay 团队同时说,其工程师的效率要高得多,技术债大大减少, 统一发布流程(如跨 iOS 和 Android 的安全性审查和试验)得以实现。
Flutter Web
Flutter 2 中最激动人心的也许是 对 Web 的生产支持。
Web 的早期基础是以文档 (Documents) 为中心的。但是,Web 平台经过多年发展,平台 API 已经非常丰富, 这些 API 可以使用有硬件加速的 2D 和 3D 图形, 以及灵活的布局和绘画 API, 来制作高度复杂的应用程序。Flutter 的 Web 基于这些创新,提供了 以应用程序为中心 的框架, 该框架充分利用了现代 Web 所提供的所有优势。
首个版本将特别关注三种应用程序场景:
渐进式 Web 应用程序 (PWAs),将 Web 的与桌面应用程序的功能结合在一起。
单页应用程序(SPAs),一次性加载并与网络服务之间进行数据传输。
将现有的 Flutter 移动应用程序带到 Web 上,用同样的代码带来同样的体验。
在过去的几个月中,在为稳定版 Web 发布做准备的同时, 我们在性能优化方面取得了许多进展, 添加了一个新的由 WebAssembly 构建的由CanvasKit驱动的渲染引擎。Flutter Plasma是由社区成员 Felix Blaschke 构建的一个演示应用, 展示了使用 Dart 和 Flutter 以简易步骤构建复杂 Web 图形的体验, 这个示例也可以在桌面或移动设备上运行。
我们一直在扩展 Flutter,以提供在 Web 平台提供最佳的体验。最近几个月,我们添加了文本自动填充功能、 对地址栏 URL 和路由的控制以及 PWA 清单。同时,由于桌面端浏览器与移动端浏览器一样重要, 我们还添加了交互式滚动条和键盘快捷键,增加了桌面端模式下的默认内容密度, 并增加了屏幕阅读器对 Windows、macOS 和 Chrome OS 上辅助功能的支持。
这里有一些使用 Flutter 构建的 Web 应用程序的示例。在教育工作者中,iRobot以其流行的 Root 教育机器人 而闻名。Flutter 对 Web 的生产支持使 iRobot 可以利用将现有的教育编程环境 移至 Web 平台, 从而将其可用性扩展到 Chromebook 和其他浏览器, 因为浏览器是最佳的设备选择。iRobot 的博客文章详细介绍了迄今为止的进展,以及他们为何选择 Flutter。
另一个例子是 Rive,Rive 为设计师提供了一个强大的工具, 用于创建可发布到任何平台的自定义动画。他们的 更新后的 Web 应用程序 现已发布 beta 版本, 完全由 Flutter 构建,是 Flutter 为大家献上的一封情书。
您可以在 我们的文章中找到有关 Flutter Web 的更多信息。
桌面端、折叠设备和嵌入式设备上的 Flutter 2
除了传统的移动设备和 Web 之外,Flutter 越来越多地扩展到其他设备类型, 我们在今天的主题演讲中重点介绍了三个伙伴关系,这些伙伴关系证明了 Flutter 的延展性。
首先,Canonical 与我们合作将 Flutter 带入桌面端, 工程师们贡献了代码来支持 Linux 上的开发和部署。在今天的活动中,Ubuntu 团队展示了由 Flutter 重写的新安装程序的早期版本。对于 Canonical 至关重要的是,它们可以在各种硬件配置上提供坚如磐石而又优美的体验。展望未来,Flutter 是 Canonical 未来创建桌面和移动应用的默认选择。
其次,微软 正在继续扩大对 Flutter 的支持。除了 正在进行的合作的在 Flutter 中提供高质量的 Windows 支持外, 今天微软还将发布 Flutter 引擎对新型的可折叠 Android 设备的支持。这些设备引入了新的设计模式,其应用程序可以扩展内容,或利用双屏特性提供并行体验。在 Surface 工程团队的博客文章 中, 他们展示了他们的工作成果,并邀请其他人加入他们, 共同完成适用于 Surface Duo 和其他设备的高质量实现。
最后,世界上最畅销的汽车制造商 丰田汽车 宣布了其计划, 通过构建由 Flutter 提供动力的信息娱乐系统,将最佳的数字体验带入车辆。使用 Flutter 标志着与过去开发车载软件的方式大相径庭。丰田之所以选择 Flutter,是因为其高性能和经验的一致性, 快速的迭代和开发人员的人机工程学以及智能手机层的触摸机制。通过使用 Flutter 的 embedder API, 丰田可以针对车载系统的独特需求量身定制 Flutter。
我们很高兴继续与丰田和其他公司合作,将 Flutter 应用于汽车、电视和其他嵌入式设备, 我们希望在未来几个月中可以分享更多示例。
持续发展的 Flutter 生态系统
现在,有超过 15,000 个 Flutter 和 Dart 软件包:来自 亚马逊、微软、Adobe、阿里巴巴、eBay 和Square等公司;一些重要的软件包,如Lottie、Sentry 和SVG, 以及 Flutter Favorite软件包,如sign_in_with_apple、google_fonts、geolocator 和sqflite。
今天,我们宣布推出Google 移动广告 Flutter 插件的测试版, 这是一个可与 AdMob 和 AdManager 配合使用的新 SDK, 可提供多种广告格式,包括横幅广告、嵌入式广告、原生广告和激励视频广告。我们一直在与几个主要客户一起试用该 SDK, 例如拉丁美洲最大的独立艺术家音乐平台 SuaMúsica, 现在我们准备开放 Google 移动广告 Flutter SDK 以便更广泛地使用。
我们还将宣布对 Flutter 插件的一些核心 Firebase 服务进行更新:身份验证、云数据库、无服务器云函数、云消息、云存储 和 崩溃分析, 包括对健全空安全的支持,以及对云消息软件包的全面检查。
Dart:Flutter 背后的秘制调料
先前我们提到,Flutter 2 可移植到许多不同的平台和外形上。轻松过渡到支持 Web、桌面和嵌入式设备的过程, 很大程度上要归功于 Dart, 它是一门针对多平台开发进行了优化的 Google 编程语言。
Dart 结合了一套独特的功能来构建应用程序:
不会突兀的可移植性,其编译器可为移动端和桌面端生成高性能的 Intel 和 ARM 机器代码, 并为 Web 提供经过严格优化的 JavaScript 输出。相同的Flutter框架源代码可编译到所有这些目标。
在桌面和移动设备上可维持状态的热重载的迭代开发, 以及为现代UI编程的异步,并发模式设计的语言构造。
在所有平台上的 Google 级性能, 健全的空安全保证了运行时和开发过程中的可空性约束。
没有其他语言如 Dart 这般结合了所有功能, 也许这就是为什么 Dart 是GitHub 上发展最快的语言之一的原因。
Dart 2.12 现已可以使用,是我们自 2.0 版以来最大的发行版, 支持 健全的空安全 模式。健全的空安全可以消除可怕的空指针引用异常,从而在开发和运行时提供了保证, 即只有当开发人员明确需要可空类型时,类型才能包含 null 值。最重要的是,此功能不是一项破坏性更改:您可以按照自己的步调将其逐步添加到代码中,并可以使用迁移工具在准备就绪时为您提供帮助。
今天的更新还包括 FFI 的稳定实现, 使您可以编写可与基于 C 的 API 交互的高性能代码。用 Flutter 编写的新的集成开发人员和分析器工具;以及许多性能和大小上的改进, 这些改进可以进一步升级代码,而无需重新编译即可。有关更多信息, 请参阅 Dart 2.12 发布博客文章。
Flutter 2:现已可用
关于 Flutter 2,要说的事情一言难尽。实际上,已合并的拉取请求的原始列表文档长达 200 页!请访问 专门介绍 Flutter 2 的文章, 以获取有关许多新功能和性能改进的信息, 我们认为 Flutter 开发人员将会非常满意,并立即下载新版。
我们还有一个主要的新的示例应用,它展示了刚才提到的所有内容, 该样本是我们与位于加拿大埃德蒙顿的屡获殊荣的设计团队gskinner 合作构建的。Flutter Folio 是一款剪贴簿应用程序, 为您所有的设备而设计。小屏幕下是专为捕获内容而设计的;大屏幕支持使用桌面端和平板电脑专用的习惯进行编辑;Web 平台是为共享内容而量身定制的。所有这些量身定制的内容都使用着相同的代码库,该代码库是开源的,可供您参考。
如果您还没有尝试过 Flutter,您会发现它对您的应用程序开发体验而言是一次重大升级。在 Flutter 中,我们提供了一个开放源代码工具包, 用于通过单个代码库构建针对移动、桌面端、Web 和嵌入式设备的美观而快速的应用程序, 这些应用程序既可以满足 Google 的苛刻需求,同时也能满足我们客户的需求。
Flutter 是免费且开源的。我们很高兴看到您使用 Flutter 2 构建产品!