老孟导读:昨天期待已久的 Flutter 2.0 终于公布了, Flutter Web和Null安全性趋于稳定,Flutter桌面安全性逐步转向Beta版!原文链接:https://medium.com/flutter/wh...
明天,咱们很快乐地发表Flutter 2的公布。间隔Flutter 1.0的公布曾经两年多了,然而在很短的工夫内,咱们曾经敞开了24,541期,并合并了765个贡献者的17,039个PR。自9月Flutter 1.22公布以来,咱们曾经敞开了5807期并合并了298位贡献者的4091个PR。特别感谢咱们的志愿者捐助者,他们慷慨地抽出工夫来改良Flutter我的项目。Flutter 2 release 版本前几名志愿者贡献者是xubaolin46个PR,a14n32个PR,专一于使Flutter达到零平安,hamdikahloun具备20个PR,改善了Flutter插件的数量。然而,不仅仅是编码员为Flutter我的项目做出了奉献。一大批志愿者PR评审人员还负责评审1525个PR,包含hamdikahloun(再次!),CareF和YazeedAlKhalaf(16个!)。Flutter的确是社区的一项工作,如果没有问题提出者,PR贡献者和代码审查者,咱们就不可能进入第2版。此版本实用于所有人。
Flutter 2发行版中产生了很多令人兴奋的事件。无关Flutter 2和Dart 2.12的新性能以及咱们的客户和合作伙伴如何应用Flutter 2的概述,请参阅发表Flutter 2。无关Dart 2.12的详细信息,请参阅发表Dart 2.12。无关倡议在生产中应用的Flutter网站的最佳利用办法,请参阅Flutter网站反对达到稳固的里程碑。
而且,要理解Flutter 2自身的新性能,请持续浏览!
Web
截止到明天,Flutter的Web反对曾经从Beta过渡到稳固渠道。在此初始稳固版本中,Flutter在Web平台的反对下将代码的可重用性进步到另一个档次。因而,当初当您稳固地创立Flutter应用程序时,Web只是该应用程序的另一个设施指标。
通过利用Web平台的泛滥劣势,Flutter为构建丰盛的交互式Web应用程序奠定了根底。咱们次要专一于性能和渲染保真度的改良。除了咱们的HTML渲染器之外,咱们还增加了一个新的基于CanvasKit的渲染器。咱们还增加了特定于Web的性能,例如Link小部件,以确保在浏览器中运行的利用感觉像Web利用。
在Flutter的Web反对博客文章中找到无关此稳固版本的更多详细信息。
Sound Null Safety
空安全性是Dart语言的重要补充,它通过辨别可空类型和非可空类型进一步加强了类型零碎。这使开发人员可能避免null谬误解体,这是应用程序解体的常见起因。通过将空查看合并到类型零碎中,能够在开发过程中捕捉这些谬误,从而避免生产解体。从Flutter 2开始,蕴含Dart 2.12的稳定版齐全反对Null Safety。无关更多详细信息,请参见Dart 2.12博客文章。
pub.dev软件包存储库曾经公布了1,000多个空平安软件包,其中包含Dart,Flutter,Firebase和Material团队的数百个软件包。如果您是软件包作者,请查看迁徙指南并思考立刻进行迁徙。
Desktop
在此版本中,咱们很快乐地发表,Flutter的桌面反对已在稳固频道中以晚期版本的标记提供。这意味着咱们曾经筹备好让您尝试一下它作为Flutter应用程序的部署指标:您能够将其视为“ beta快照”,以预览将于往年晚些时候公布的最终稳固版本。
为了使Flutter桌面达到这样的品质,从大小上进行了改良,从确保文本编辑像在每个受反对的平台上的本机体验一样开始,包含诸如文本抉择枢轴点的基本功能以及可能进行文本编辑的能力。在解决完键盘事件后进行流传。在鼠标输出端,当初能够立刻开始应用高精度定点设施进行拖动,而不用期待解决触摸输出时所需的提早。此外,内置的上下文菜单已增加到Material和Cupertino设计语言的TextField和TextFormField小部件中。最初,增加了抓手 到ReorderableListView小部件。
作为开发人员,ReorderableListView总是很善于挪动我的项目,然而它要求用户长按能力启动拖动。这在挪动设施上很有意义,然而很少有台式机用户会想到用鼠标长按某个我的项目来挪动它,因而此版本包含实用于鼠标或触摸输出的抓握手柄。平台习用性能的另一项改良是更新的滚动条,该滚动条能够正确显示桌面形态因素。
此版本包含一个更新的Scrollbar小部件,该小部件在桌面环境中十分无效
滚动条小部件已更新,以提供桌面上预期的交互性能,包含拖动拇指,单击轨道以上下滚动页面以及在鼠标悬停在鼠标的任何局部上时显示轨道的性能。滚动条。此外,因为Scrollbar是应用新ScrollbarTheme类的主题,因而您能够设置其款式以使其与应用程序的外观和格调相匹配。
对于其余特定于桌面的性能,此版本还启用了Flutter应用程序的命令行参数解决性能,以便能够应用诸如Windows File Explorer中的数据文件双击之类的简略操作来关上应用程序中的文件。咱们还致力使Windows和macOS的调整大小更加晦涩,并为国内用户启用IME(输入法编辑器)。
Flutter桌面当初反对直观的IME输出
此外,咱们还提供了更新的文档,介绍了开始筹备将桌面应用程序部署到特定于操作系统的商店时须要执行的操作。试试看,如果咱们错过了任何事件,请提供反馈。
在尝试应用Flutter桌面Beta时,您能够通过按预期形式切换到Beta通道并依据flutter.dev上的领导为指标平台设置配置标记来拜访它。此外,咱们还制作了稳固通道上可用的beta比特的快照。如果您应用“ flutter config”启用某个桌面配置设置(例如enable-macos-desktop
),则能够尝试桌面反对的beta性能,而不用经验漫长的过程能力转移到beta频道,删除Flutter SDK的所有最新Beta版,构建工具等。这非常适合尝试一下或将桌面反对用作简略的“ Flutter Emulator”。
然而,如果您抉择停留在稳固的频道上以拜访桌面Beta,则不会像切换到Beta或dev频道那样快地取得新性能或谬误修复。因而,如果您正在踊跃地针对Windows,macOS或Linux,咱们建议您切换到可更快提供更新的渠道。
当咱们靠近Flutter桌面的第一个残缺的生产品质版本时,咱们晓得咱们还有更多工作要做,包含对与本机顶级菜单集成的反对,更像各个平台的体验的文本编辑以及可拜访性反对,以及惯例的谬误修复和性能加强。如果您认为在台式机达到生产品质之前还须要做其余事件,请确保提供您的反馈。
平台自适应应用程序:Flutter Folio示例
当初,Flutter 反对生产利用三个平台(Android,iOS设施和Web)和三个测试版(在Windows,MacOS和Linux)的,一个天然的问题是:如何编写一个应用程序,适应自身以及多个不同尺寸(小,中和大屏幕),不同的输出模式(触摸,键盘和鼠标)和不同的习惯用法(挪动,网络和台式机)?为了为咱们本人以及世界各地的Flutter开发人员答复此问题,咱们委托了Flutter Folio剪贴簿应用程序。
Folio只是一个简略的示例,您心愿它能够从一个代码库在多个平台上很好地运行。所谓“好”,是指它在小屏幕,中屏幕和大屏幕上看起来都不错,它利用了触摸,键盘和鼠标输出的劣势,并且对于平台的习用语言也很好用(例如,通过应用网络上的链接和桌面上的菜单)。咱们将这种利用称为“平台自适应”,因为它能够很好地适应所运行的任何平台。
如果您想理解如何使本人的应用程序平台具备适应性,能够查看Folio的源代码。未来,冀望找到可能更深刻地探讨该主题的文档和代码实验室。同时,请查看AloïsDeniel对于该主题的杰出博客文章和视频。
Google Mobile Ads to Beta
除了Flutter桌面版移至测试版,明天咱们很快乐地发表Flutter的Google挪动广告SDK的公开测试版。这是一个全新的插件,除了现有的重叠式广告格局(重叠式横幅广告,非页内广告和处分视频广告)外,还提供内嵌横幅广告和原生广告。该插件对立了对Ad Manager和Admob的反对,因而,无论您是什么规模的公布商,都能够依据本人的状况量身定制该插件。
咱们始终在与一些晚期客户一起在私人Beta版程序中试用此插件,其中许多人已胜利应用这些新格局启动了他们的应用程序。例如,Sua Musica(最大的拉丁美洲音乐平台,面向领有1.5万名通过验证的歌手和1000万MAU的独立歌手),应用实用于Flutter的Google挪动广告SDK推出了其新的Flutter利用。他们发现印象数减少了350%,点击率减少了43%,eCPM减少了13%。
该插件明天可供您应用。作为Flutter Engage的一部分,Andrew Brogdon和Zoey Fan做了一个对于“应用Flutter进行利用获利”的会议(可在Flutter Engage网站上找到),他们在其中探讨了应用Flutter构建的利用的获利策略,以及如何在本人的广告中加载广告Flutter利用。此外,咱们在flutter.dev上创立了一个新的Ads页面,您能够在其中找到所有有用的资源,例如插件施行指南,内嵌横幅和原生广告代码实验室,以及重叠横幅,非页内广告和处分视频广告代码实验室。请确保将其签出!
新的iOS性能
仅仅因为咱们正在持续进步对其余平台的反对品质,所以不要认为咱们遗记了iOS。实际上,此版本带来了与iOS相干的178个PR合并,包含23495(将状态复原带到iOS),67781(它满足了长期存在的间接从命令行构建IPA而无需关上Xcode的要求)的要求,以及69809,更新了CocoaPods版本以匹配最新工具。此外,Cupertino设计语言实现中还增加了一些iOS小部件。
新的CupertinoSearchTextField提供了iOS搜寻栏UI。
该CupertinoFormSection,CupertinoFormRow和CupertinoTextFormFieldRow部件更容易产生与iOS的分段式视觉美学验证表单字段。
除了实用于iOS的性能外,在着色器和动画方面,咱们还将持续总体上钻研iOS和Flutter的性能改良。iOS依然是Flutter的次要平台,咱们将持续致力带来重要的新性能和性能改良。
新的小部件:主动实现和ScaffoldMessenger
此版本的Flutter附带了两个附加的新小部件,即AutocompleteCore和ScaffoldMessenger。AutocompleteCore示意将主动实现性能纳入Flutter应用程序所需的最小性能。
主动实现是Flutter常常须要的性能,因而此版本开始提供此性能。您明天就能够应用它,然而如果您对残缺性能的设计感到好奇,请查看主动实现设计文档。
同样,创立ScaffoldMessenger来解决许多与SnackBar相干的问题,包含可能轻松创立SnackBar以响应AppBar动作,创立SnackBars以在Scaffold过渡之间长久存在的性能,以及可能在SnackBars实现时显示SnackBars的能力。即便用户已导航到具备其余Scaffold的页面,也将执行异步操作。
所有这些长处能够从当初开始应用几行代码来显示SnackBars:
final messenger = ScaffoldMessenger.of(context);messenger.showSnackBar(SnackBar(content: Text(‘I can fly.’)));
正如您可能设想的那样,还有更多的货色。无关详细信息,请在ScaffoldMessenger上观看Kate Lovett的精彩视频。
具备Add-to-App的多个Flutter实例
从与许多Flutter开发人员的交谈中咱们理解到,您中的许多人没有启动全新应用程序的侈靡情意,但您能够通过将Flutter增加到现有的iOS和Android应用程序中来利用Flutter。此性能称为Add-to-App,是在两个挪动平台上重用Flutter代码同时仍保留现有本机代码库的绝佳办法。然而,对于您中的那些人,咱们有时会听到,不分明如何将第一个屏幕集成到Flutter中。将Flutter和本机屏幕交错在一起使导航状态难以保护,并且在视图级别集成多个Flutter会占用大量内存。
过来,其余Flutter实例的存储老本与第一个实例雷同。在Flutter 2中,咱们将创立额定的Flutter引擎的动态内存老本升高了约99%,每个实例约为180kB。
反对此性能的新API能够在beta通道上预览,并在flutter.dev上进行了记录,以及一系列演示此新模式的示例我的项目。通过此更改,咱们不再犹豫倡议在本机应用程序中创立Flutter引擎的多个实例。
Flutter修复
每当任何框架成熟并应用越来越多的代码库汇集用户时,随着工夫的推移,趋势就是防止对框架API进行任何更改,以防止毁坏越来越多的代码行。Flutter 2领有超过500,000个Flutter开发人员,波及的平台数量越来越多,因而它很快就属于这一类。然而,为了使咱们可能随着工夫的推移不断改进Flutter,咱们心愿可能对API进行重大更改。问题是,如何在不中断开发人员的状况下持续改良Flutter API?
咱们的答案是Flutter Fix。
Flutter Fix是事物的组合。首先,dart
CLI工具有一个新的命令行选项,名为dart fix
,它晓得在哪里能够查找已弃用的API列表以及如何应用这些API更新代码。其次,它是可用修补程序自身的列表,与版本2捆绑在一起。最初,它是针对VS Code,IntelliJ和Android Studio IDE的更新的Flutter扩大集,它们晓得如何公开雷同的内容。可用的修复程序列表,如带小灯泡的疾速修复程序,可帮忙您单击鼠标来更改代码。
举例来说,假如您的利用中蕴含以下代码行:
应用不举荐应用的参数创立Flutter小部件
因为不赞成应用此构造函数的参数,因而应将其替换为以下内容:
创立一个Flutter小部件,其中不举荐应用的参数已替换
即便您相熟所有Flutter的弃用,您在代码中必须进行的更改数量也就越大,利用所有修补程序的难度就越大,并且更容易出错。人类在这类重复性工作上并不善于。然而计算机是;通过执行以下命令,您能够看到咱们晓得如何在整个我的项目中进行的所有修复:
$ dart fix --dry-run
如果您想批量利用它们,能够轻松地这样做:
$ dart fix --apply
或者,如果您想在本人喜爱的IDE中以交互方式利用这些修补程序,也能够这样做。
多年来,咱们始终在将旧的API标记为已弃用,然而当初有了对于何时删除理论已弃用的API的政策,Flutter 2是咱们第一次这样做。即便咱们尚未捕捉所有已弃用的API作为数据来提供Flutter Fix,咱们仍将持续从先前已弃用的API中增加更多信息,并将在将来的重大更改中持续这样做。咱们的指标是尽最大致力使Flutter的API达到最佳状态,同时还要使您的代码放弃最新。
Flutter DevTools
为了分明阐明DevTools是用于调试Flutter应用程序的工具,咱们在调试Flutter应用程序时将其重命名为Flutter DevTools。此外,咱们还做了很多工作,以使其达到Flutter 2的生产品质。
一项即便在您启动DevTools之前也能够帮忙您解决问题的新性能是,Android Studio,IntelliJ或Visual Studio Code可能在呈现常见异样时发出通知,并提供将其引入DevTools中以帮忙您调试的性能它。例如,以下内容显示您的应用程序中已引发溢出异样,该异样会在Visual Studio Code中弹出一个选项,用于调试DevTools中的问题。
Flutter IDE扩大会在您的利用引发布局溢出异样时发出通知
按下该按钮可将您带到呈现问题的小部件上的DevTools中的Flutter Inspector,因而您能够对其进行修复。明天,咱们仅针对布局溢出异样执行此操作,但咱们的打算是针对所有常见异样提供这种解决,DevTools能够解决这些异样。
一旦运行了DevTools,选项卡上的新谬误标记将帮忙您跟踪应用程序中的特定问题。
DevTools中的红点可帮忙您专一于呈现谬误的应用程序局部
DevTools的另一个新性能是可能轻松查看分辨率比显示的图像高的图像,这有助于跟踪过多的应用程序大小和内存应用状况。要启用此性能,请在Flutter Inspector中启用“反转超大图像”。
启用“反转超大图像”选项,以突出显示比须要放大的图像大的图像。
当初,当您显示分辨率显著大于其显示尺寸的图像时,该图像将上下颠倒显示,以便在您的利用中轻松查找。
理论利用中的“反转超大图像”选项
此外,依据公众的需要,除了在Flutter Inspector的“布局资源管理器”中显示无关灵便布局的详细信息外,咱们还增加了显示固定布局的性能,使您可能调试各种布局。
新的版式资源管理器显示了固定版式和弹性版式的版式详细信息
这还不是全副。这只是Flutter DevTools 2中更多新性能的摘要:
- 在Flutter框架图中增加了均匀FPS信息并进步了可用性
- 用红色谬误标签在网络事件探查器中调出失败的网络申请
- 新的内存视图图表更快,更小且更易于应用,其中包含用于形容特定工夫流动的新悬浮卡。
- 将搜寻和过滤增加到“日志记录”选项卡
- 在启动DevTools之前跟踪日志,因而启动时能够查看残缺的日志历史记录
- 将“性能”视图重命名为“ CPU Profiler”,以使其更分明地提供什么性能
- 向CPU Profiler火焰图增加了时序网格
- 将“时间轴”视图重命名为“性能”,以便更分明地理解其提供的性能
而这还并非全副。对于全套更改,我倡议以下布告:
- 开发工具0.9.4
- 开发工具0.9.5
- 开发工具0.9.6
- 开发工具0.9.7
- DevTools 2.0
Android Studio / IntelliJ扩大
用于IntelliJ系列IDE的Flutter插件也为Flutter 2取得了许多新性能。首先,有一个新的我的项目向导,它与IntelliJ中的新向导款式匹配。
另外,如果您正在Linux上应用IntelliJ或Android Studio对从Snap Store装置的Flutter SDK进行编程,则Flutter快照门路已增加到已知SDK门路列表中。这使Flutter快照的用户能够更轻松地在“设置”中配置Flutter SDK。感激MarcusTomlinson @的奉献!
通过Snap装置的Flutter SDK,能够更轻松地应用Linux上的Android Studio。
您能够在布告中浏览更多无关最新更新的内容:
- IntelliJ插件M51
- IntelliJ插件M52
- IntelliJ插件M53
- IntelliJ插件M54
Visual Studio代码扩大
Visual Studio Code的Flutter扩大也对Flutter 2进行了改良,从许多测试加强性能开始,包含从新运行仅失败的测试的性能。
通过两年的开发,对Dart的LSP(语言服务器协定)反对现已作为默认形式提供给Dart分析器,以将其集成到Flutter扩大的Visual Studio Code中。LSP反对对Flutter开发进行了许多改良,包含可能在以后Dart文件中利用某种类型的所有修复程序,并使代码实现生成残缺的函数调用(包含括号和必须的参数)的性能。
LSP的反对不仅限于Dart。它还反对pubspec.yaml
和analysis_options.yaml
文件中的代码实现。
这些只是Flutter的Visual Studio Code扩大最近取得的一些更新。您能够在以下布告中浏览残缺列表:
- Visual Studio代码插件v3.16
- Visual Studio代码插件v3.17
- Visual Studio代码插件v3.18
- Visual Studio代码插件v3.19
- Visual Studio代码插件v3.20
DartPad已更新为反对Flutter 2
如果不提及DartPad,则该工具更新列表将不残缺,而DartPad已更新为反对Flutter 2。
DartPad已针对Flutter 2更新
当初,您能够尝试应用Flutter的新的空平安版本,而无需来到本人喜爱的浏览器。
生态系统更新
Flutter的开发教训不仅蕴含框架和工具,还包含其余内容。它还包含实用于Flutter应用程序的各种软件包和插件。自上一次Flutter稳固版本公布以来,该畛域也产生了很多事件。例如,在摄像机和video_player插件之间,已合并了将近30个PR,以大大提高两者的品质。如果您以前在应用这两种办法时遇到麻烦,则应该再看一遍;咱们认为您会发现它们更加弱小。
另外,如果你是一个火力地堡的用户,咱们很快乐地发表,最风行的插件已被带到生产品质,包含空平安的反对,以及全套的参考文档和常见的应用教程应用Android,iOS,网页,和macOS。这些插件包含:
- 核
- 验证
- 云消防站
- 云性能
- 云消息传递
- 云贮存
- 速溶药
另外,如果您正在寻找应用程序的解体报告,则可能须要思考Sentry,该公司曾经公布了实用于Flutter应用程序的新SDK。
Sentry解体报告工具当初反对Flutter
借助Sentry的Flutter SDK,您能够实时收到在Android,iOS或本机平台上产生的谬误的告诉。您能够在Sentry文档中查看详细信息。
此外,如果您还没有看到Flutter Community的“ plus”插件,则须要将其签出。他们分叉了Flutter团队最后开发的许多受欢迎的插件,并增加了null平安反对,对其余平台的反对和一整套全新的文档,以及开始修复flutter / plugins存储库中的适当问题。该插件包含以下内容:
- Android闹钟+
- Android Intent +
- 电池+
- 连通性+
- 设施信息+
- 网络信息+
- 套餐信息+
- 传感器+
- 分享+
此时,与Flutter兼容的软件包和插件集的数量超过15,000,这使得很难找到您应该首先思考的软件包和插件。因而,咱们会公布公布点数(动态剖析得分),受欢迎水平,喜爱度,并且,对于特地高的品质,会公布那些特地标记为Flutter Favorite的包装。为了及时应答Flutter 2,咱们在收藏夹列表中增加了几个新软件包:
- animation_text_kit
- bottom_navy_bar
- 斩波器
- font_awesome_flutter
- flutter_local_notifications
- just_audio
祝贺这些软件包的作者!如果您尚未签出它们,或者尚未列出列表中的其余软件包,则应该这样做。
最初但并非最不重要的一点是,对于对软件包的最新版本是否实用于Flutter的最新版本感兴趣的软件包作者或软件包用户,您将须要拜访Codemagic的新pub.green网站。
Codemagic的新pub.green网站显示了最新Flutter版本与顶级软件包的兼容性
pub.green网站测试了pub.dev上可用的Flutter和Dart软件包与不同Flutter版本的兼容性。将其视为Flutter的“我能够应用”。无关更多详细信息,我倡议CodeMagic团队发布公告博客。
重大变动
咱们对Flutter 2进行了以下重大更改,其中许多能够应用dart fix
命令或所选IDE中的疾速修复程序主动缓解:
- 61366持续剪辑行为更改
- 66700默认FittedBox的clipBehavior为无
- 68905从Cupertino色彩分辨率API删除nullOk参数
- 69808从Scaffold.of和ScaffoldMessenger.of删除nullOk,为两者创立
- 68910从Router.of中删除nullOk参数,并使其返回不可为空的值
- 68911增加maybeLocaleOf到本地化
- 68736在Media.queryOf删除nullOK
- 68917从Focus.of,FocusTraversalOrder.of和FocusTraversalGroup.of中删除nullOk参数
- 68921从Shortcuts.of,Actions.find和Actions.handler中删除nullOk参数
- 68925从AnimatedList.of和SliverAnimatedList.of中删除nullOk参数
- 69620从BuildContex中删除不赞成应用的办法
- 70726从Navigator.of中删除nullOk参数,并增加Navigator.maybeOft
- 72017删除不举荐应用的CupertinoTextThemeData.brightness
- 72395.从HoverEvent中删除不倡议应用的[PointerEnterEvent,PointerExitEvent]。
- 72532删除不倡议应用的showDialog.child
- 72890删除不举荐应用的Scaffold.resizeToAvoidBottomPadding
- 72893删除不赞成应用的WidgetsBinding。[deferFirstFrameReport,allowFirstFrameReport]
- 72901删除不举荐应用的StatefulElement.inheritFromElement
- 72903删除不举荐应用的Element办法
- 73604删除不倡议应用的CupertinoDialog
- 73745从库比蒂诺[Sliver] NavigationBar删除不赞成应用的actionForegroundColor
- 73746删除不赞成应用的ButtonTheme.bar
- 73747删除跨度弃用
- 73748删除弃用的RenderView.scheduleInitialFrame
- 73749删除不赞成应用的Layer.findAll
- 75657从Localizations.localeOf删除残留的nullOk参数
- 74680从Actions.invoke删除nullOk,增加Actions.maybeInvoke
概括
最初,咱们在Google Flutter团队的所有成员中,咱们要说-谢谢。感激×150,000,在过来两年中,社区中推出了超过150,000个Flutter应用程序。万一您错过了它,咱们会在Flutter Engage主题演讲的开幕式中播放针对社区的Mashup Video,其中会集了一些咱们最喜爱的Flutter应用程序。
没有您对咱们所有人正在发明的货色的继续反对和冲动,就不可能成为世界上最具生机的寰球开发者社区之一。咱们急不可待想看看您接下来将要做什么。
交换
老孟Flutter博客(330个控件用法+实战入门系列文章):http://laomengit.com
增加微信或者公众号支付 《330个控件大全》和 《Flutter 实战》PDF。
欢送退出Flutter交换群(微信:laomengit)、关注公众号【老孟Flutter】: