一起看 I/O | Flutter 3 正式发布!
作者 / Tim Sneath, Google Flutter 和 Dart 产品组产品经理
Flutter 3 实现了 Flutter 以移动端为中心扩展到多平台的产品规划,并在今年 I/O 大会的主题演讲上正式发布,此次发布提供了对 macOS 和 Linux 桌面端的稳定版支持,同时包括 Firebase 集成的改进,增加了与生产力和性能相关的新特性,并对 Apple 芯片提供了支持。
Flutter 3 的演进
创建 Flutter 的初衷是为了彻底改变应用开发:将 「Web 应用的迭代开发模式」与「硬件加速的图形渲染」和「像素级的控制」三者结合——之前只有游戏才能这么做。自 Flutter 1.0 Beta 版发布以来的四年里,我们逐渐在这些基础上发展,增加了新的框架功能和新的 widget,与底层平台进行了更深入的整合,还加入了丰富的 package 库,此外还进行了许多性能和工具等方面的改进。

随着 Flutter 逐渐产品走向成熟,越来越多的人开始用它来构建应用。今天,有超过 50 万个应用使用 Flutter 发布。来自 data.ai 等研究公司的分析以及公众的评价都可以表明,Flutter 正被许多细分领域的客户所使用。其使用场景非常广泛,从微信 (WeChat) 等社交应用,到 Betterment 和 Nubank 等金融和银行类应用,再到 SHEIN 和 trip.com 等商旅应用以及 Fastic、Tabcorp 等生活方式类的应用,还有 My BMW 此类的硬件连接类应用,最后是巴西政府等公共机构的官方应用等等,都有 Flutter 在大放异彩。
现在已有超过 50 万个应用使用 Flutter 构建。
开发者告诉我们,Flutter 帮助他们在更多的平台上更快地构建出了精美的应用。我们最新的用户研究也表明:
- 91% 的开发者认为 Flutter 缩短了构建和发布应用的时间。
- 85% 的开发者认为 Flutter 使他们的应用比以前更加精美。
- 85% 的开发者认为 Flutter 使他们的应用能在更多平台上发布。
Sonos 在 最近的一篇博客文章 中讨论了他们对设置体验的改版工作,其中着重强调了上述的第二点:
毫不夸张地说,Flutter 为我们带来了一种 "高级感",这与我们团队之前提供的任何东西都不一样。对我们的设计师来说,最重要的是,他们可以轻松地构建新的用户界面,这意味着我们团队在面对各种设计规格时,会更少说 "做不到",而更多地直接进行迭代。如果您觉得我们的说法有道理,我们推荐您试试 Flutter —— 至少我们非常庆幸当初选择了它。
欢迎来到 Flutter 3
Flutter 3 正式发布,至此,Flutter 的跨平台之旅迈入高潮。有了 Flutter 3,您就可以仅用一套代码库,为 6 个平台构建精美的体验。它为开发者提供了无与伦比的生产力,并使初创团队从第一天起就能将新的想法投放到完全可用的市场中。
在以前的版本中,我们已经在 iOS 和 Android 平台之外增加了 Web 端 和 Windows 平台 的支持,现在,Flutter 3 增加了对 macOS 和 Linux 应用的稳定支持。增加平台支持需要的不仅仅是渲染像素这么简单: 还包括对新的输入和交互模型的支持、编译和构建的支持、无障碍和国际化支持,以及特定平台的整合。我们的目标是,让您能够灵活地充分利用底层操作系统,同时根据您的选择尽可能多地共享用户界面和逻辑。
在 macOS 上,我们已经投入资源支持 Intel 处理器和 Apple 芯片,并提供 通用二进制 (Universal Binary) 文件) 的支持,使应用能够打包成在两种架构上都能原生运行的可执行文件。在 Linux 上,Canonical 和 Google 已经合作为开发者们带来了高度集成的最佳开发工具。
Superlist 是一个很好的例子,告诉大家 Flutter 是如何帮助您实现精美桌面体验的,它今天推出了 Beta 版本供大家体验。Superlist 提供了超强的协作功能,通过一个崭新的应用将列表、任务和自由形式的内容结合在一起,将待办事项和个人计划等功能打磨得焕然一新。Superlist 团队选择 Flutter,是因为它能够提供快速且高度品牌化的桌面体验。我们认为,他们迄今为止的进展表明这是一个非常明智的选择。
Flutter 3 还对许多基本要素进行了改进,提高了性能,强化了对 Material You 的支持,并进一步提升了生产力。
除了上面提到的内容外,在这个版本中,Flutter 已经完全支持在 Apple 芯片 上进行原生开发。虽然自 M1 处理器诞生以来,Flutter 就一直与搭载 M1 的苹果设备兼容,但 Flutter 现在充分利用了 Dart 对 Apple Silicon 的支持,在搭载 M1 的设备上实现了更快的编译,并支持 macOS 应用的通用二进制文件。
在这个版本中,我们对 Material Design 3 所做的支持工作已基本完成。开发者们现在可以尽情使用这套自适应性强、跨平台的设计系统,包括其动态颜色方案和经过更新的视觉组件。

我们也将在近期发布更详细的技术文章,并在其中更多介绍这部分内容,以及 Flutter 3 的许多其他新功能。
Flutter 由 Dart 编程语言提供强有力的支持,这是一种用于多平台开发的高生产力、可移植的语言。我们在这个发布周期中对 Dart 的改进工作包括: 枚举支持成员变量、改进的超类参数继承,以及更为灵活的命名参数相关的新的语言特性;同时为 package:lints 开启了 2.x 版本,这是一套官方的 lint 规则,是根据我们总结的 Dart 最佳实践整合而成的一个 lint 规则集;与此同时,我们也更新了核心库的 API 文档,为其带来了丰富的示例代码。并且,为了改善平台集成特性,我们在 Flutter 插件中提供了一个新的模版,使用 dart:ffi 与原生平台进行 C 语言的互操作、对 RISC-V 指令集提供实验性支持,以及对 macOS 和 Windows 可执行文件的签名支持。如果想要了解 Dart 2.17 中所有新改进的细节情况,请关注将在近期发布的文章。
Firebase 和 Flutter
当然,构建应用不仅仅是构建用户界面框架。应用发布者需要一套全面的工具,来帮助他们构建、发布和运营自己的应用,包括认证、数据存储、云端功能和设备测试等服务。目前已有多种服务支持 Flutter,包括 Sentry、AppWrite 和 AWS Amplify。
Firebase 是由 Google 提供的应用服务平台。SlashData 的开发者基准研究 显示,62% 的 Flutter 开发者在其应用中使用 Firebase。因此,在过去的几个版本中,我们一直在与 Firebase 合作对两者的集成进行扩展和改良,并将其打造成 Flutter 的首选集成服务。这包括将 Flutter 的 Firebase 插件升级到 1.0,增加更好的文档和工具,以及提供像 FlutterFire UI 这样的新 widget,为开发者提供可重用的认证和用户资料界面。
今天,我们宣布 Flutter 和 Firebase 的整合已成为 Firebase 产品核心的一部分并得到完全的支持。我们已将源代码和文档转移到 Firebase 的主 repo 和网站中。Firebase 对 Flutter 的支持将和 Android 和 iOS 端的支持同步发展。
此外,我们还进行了重大改进,以支持 Flutter 应用使用 Crashlytics (这是 Firebase 中很受欢迎的实时崩溃报告服务)。随着 Flutter Crashlytics 插件的更新,您可以使用与 iOS 和 Android 开发者相同的功能集来实时跟踪致命错误。其中包括重要警报和指标,如 "无崩溃用户",帮助您保持应用的稳定性。Crashlytics 的分析管线已经升级,以改善 Flutter 崩溃的聚合处理,使其能更快地分级、优先处理和修复问题。最后,我们简化了插件的设置过程,因此您只需要几个步骤就可以直接通过 Dart 代码设置并使用 Crashlytics。
Flutter 休闲游戏工具包
对于大多数开发者来说,Flutter 是一个应用框架。但是,利用 Flutter 提供的硬件图形加速支持和 Flame 等开源游戏引擎,围绕休闲游戏开发而建立的社区也在不断壮大。我们希望让休闲游戏开发者更容易上手,所以在今天的 I/O 大会上,我们发布了 Flutter 休闲游戏工具包 (Casual Game Toolkit),它提供了模板、最佳实践入门套件,还为您准备了可用于广告和云服务的赞助额度。

虽然 Flutter 并不是为高强度的 3D 动作游戏而设计的,但如今,一部分这类游戏在独立于游戏场景之外的用户界面部分也开始使用 Flutter 来实现,包括 PUBG Mobile 这样拥有数亿用户的流行游戏。在 I/O 大会上,我们想看看我们能把技术推进到什么程度,所以我们创建了一个有趣的弹球游戏,它使用到了 Firebase 和 Flutter 的 web 端支持。I/O Pinball 弹球游戏提供了一个定制桌面,围绕着 Google 最受欢迎的四个吉祥物进行设计,它们分别是: Flutter 的 Dash、Firebase 的 Sparky、Android 机器人和 Chrome 恐龙,您可以在这个游戏中与他人一较高下。我们希望通过这种有趣方式展示 Flutter 的多功能性。

Flutter: 由 Google 支持,由社区驱动
我们喜欢 Flutter 的一点是,它不仅仅是 Google 的产品——它是一个「属于所有人」的产品。开源意味着我们都可以参与其中,并与它的成功息息相关。您可以贡献新的代码或文档,创建 package 来为核心框架赋予新的超能力,编写教导他人的书籍和培训课程,还可以帮助组织活动和用户社群,等等。
为了展示社区的精彩,我们最近与 DevPost 合作,赞助了 Puzzle Hack 挑战,让开发者们通过 Flutter 来演绎经典的滑动拼图游戏,以展示他们的技能。这场活动呈现了 web、桌面和移动端完美结合的场景: 现在大家都可以通过浏览器或应用商店玩到这些游戏。
感谢您对 Flutter 的支持,欢迎来到 Flutter 3!
一起看 I/O | Flutter 3 正式发布!的更多相关文章
- Flutter 中文文档网站 flutter.cn 正式发布!
在通常的对 Flutter 介绍中,最耳熟能详的是下面四个特点: 精美 (Beautiful):充分的赋予和发挥设计师的创造力和想象力,让你真正掌控屏幕上的每一个像素. ** 极速 (Fast)**: ...
- 一起看 I/O | Flutter 休闲游戏工具包发布
作者 / Zoey Fan, Product Manager for Flutter, Google 对于大多数开发者来说,Flutter 是一个应用框架.但利用 Flutter 提供的硬件加速图形支 ...
- 一起看 I/O | Flutter 3 更新详解
作者 / Kevin Jamaul Chisholm, Technical Program Manager for Dart and Flutter at Google 又到了 Flutter 稳定版 ...
- Flutter 1.22 正式发布
支持iOS 14和Android 11,新的i18n和l10n支持,可用于生产的Google Maps和WebView插件,新的App Size工具等等! 作者:Chris Sells 原文:http ...
- Flutter免费(视频)教程汇总
Flutter学习导航 Flutter简介: Flutter可以轻松快速地构建漂亮的移动应用程序. Flutter是谷歌的移动应用SDK,用于短时间内在iOS和Android上制作高质量的原生界面应用 ...
- 150多个Flutter组件详细介绍送给你
迷茫是什么,迷茫就是大事干不了,小事不想干,能力配不上欲望,才华配不上梦想. 150+Flutter组件详细介绍地址:http://laomengit.com/ 前言 我在Flutter未正式发布之前 ...
- 在Flutter中嵌入Native组件的正确姿势是...
引言 在漫长的从Native向Flutter过渡的混合工程时期,要想平滑地过渡,在Flutter中使用Native中较为完善的控件会是一个很好的选择.本文希望向大家介绍AndroidView的使用方式 ...
- Flutter 布局控件完结篇
本文对Flutter的29种布局控件进行了总结分类,讲解一些布局上的优化策略,以及面对具体的布局时,如何去选择控件. 1. 系列文章 Flutter 布局详解 Flutter 布局(一)- Conta ...
- Flutter 安装
都说程序猿学习是不分平台的,做了一辈子的Xaml,也想看看现在最牛逼的移动技术. 看了看Google 的Flutter,好像很牛逼,不怎么需要Android和IOS基础(应该还是要的), 不过现在是B ...
随机推荐
- 当心,你搞的Scrum可能是小瀑布
摘要:有的团队刚接触Scrum,一个问题令他们很困扰:迭代初期开发人员的工作较多,测试人员闲着:迭代末期开发人员闲着,测试人员的工作比较多,怎么解决资源等待的问题呢? 本文分享自华为云社区<当心 ...
- 1108. IP 地址无效化
给你一个有效的 IPv4 地址 address,返回这个 IP 地址的无效化版本. 所谓无效化 IP 地址,其实就是用 "[.]" 代替了每个 ".". 示例 ...
- 在原生CSS中使用变量
本文首发于我的博客 一直以来,CSS作为一种申明式的样式标记语言,很难像如javascript等命令式编程语言一样通过定义和使用变量的方式来维护和追踪某些状态.后来随着scss,less等CSS预处理 ...
- 《css揭秘》读书笔记
第一章 引言 css编码技巧 在引言中,作者提到使用em与inherit来实现css代码的简洁与可维护性.但是根据本司机两年的开发经验来看,在实际开发中很少来使用em这个单位.如何用以及何时去使用,还 ...
- 关于css布局、居中的问题以及一些小技巧
CSS的两种经典布局 左右布局 一栏定宽,一栏自适应 <!-- html --> <div class="left">定宽</div> < ...
- java中如何创建自定义异常Create Custom Exception
9.创建自定义异常 Create Custom Exception 马克-to-win:我们可以创建自己的异常:checked或unchecked异常都可以, 规则如前面我们所介绍,反正如果是chec ...
- fetch和axios区别,摘自Stack Overflow网站答案
fetch 请求let url = 'https://someurl.com'; let options = { method: 'POST', mode: 'cors', headers: { 'A ...
- tracert命令简述
1. 路由跟踪在线Tracert工具说明 Tracert(跟踪路由)是路由跟踪实用程序,用于确定 IP 数据报访问目标所采取的路径.Tracert 命令用 IP 生存时间 (TTL) 字段和 ICMP ...
- python的编译和解释
编译和解释 1.编译: 将源代码一次性转换成目标代码的过程 源代码 → 编辑器 →目标代码 →程序执行(同时程序输入)→结果输出 2.解释: 将源代码逐条转换成目标代码同时逐条运行的过程 源代码+程序 ...
- Power App用到的一些函数
1.Filter([表名],查询条件&&查询条件),会返回一张表: 2.Search([表名], "值", "字段名"),会返回一张表: 3.L ...