Flutter 2.2 升级详细说明

Flutter 2.2 版已宣布公布!要获得最新版本,您只需转换到 stable 方式并升级现阶段安裝的 Flutter,或前去 flutter.cn/docs/get-started 重新开始安裝。

尽管与 2.0 版只间隔数月,2.2 版或是载满很多改善。此版本号总共列入了架构、模块和插件库等层面的 2,456 个 PR 并解决了 3,105 个难题。我们要专此鸣谢因此版本号奉献了很多 PR 和 PR review 的全部 Flutter 小区,包含 PR 奉献数最多 (17) 的 Abhishek01039 和 PR review 奉献数最多 (9) 的 xu-baolin。非常感谢全部开发人员对 Flutter 2.2 顺利公布稳定版作出的奉献。沒有大伙儿的适用,大家将没法保证。

每一个新的 Flutter 稳定版都是会产生例如特性提高、新作用、bug 修补等一系列转变,并会给予一些并未使用于工作环境的实验男性性功能,期待您能帮助我们认证这种作用能不能一切正常工作中并达到您的要求。除此之外,最新版本还会继续包括一系列有关专用工具的升级和来源于 Flutter 小区的升级。坦白讲,现如今 Flutter 每一个最新版本的內容都比较丰富,不太可能在一篇文章中巨细无遗地详细描述,因而下边大家将主要为您详细介绍一些关键闪光点。

Flutter 2.2 稳定版升级

此版本号在 Flutter 2 的基本上干了众多改善,在其中不仅有朝向 Android、iOS 和 web 服务平台的升级,也有新的 Material 标志、文本检索方法的改善、下拉列表个人行为的转变、TextSpan widget 的鼠标光标适用,及其用一份编码兼容好几个服务平台层面的新手册。这种作用皆已公布稳定版,能够您在最新版本运用中应用。另外,全部这种作用全是在 新版本 Dart 的基本上搭建而成。

Dart 2.13

随 Flutter 2.2 版一起公布的也有 Dart 2.13 版。此 Dart 版本号包括诸多新作用,在其中之一是新的种类别称,该作用让您能为种类建立别称,如同为涵数建立别称一样:

// Type alias for functions (existing)
typedef ValueChanged<T> = void Function(T value);

// Type alias for classes (new!)
typedef StringList = List<String>;

// Rename classes in a non-breaking way (new!)
@Deprecated("Use NewClassName instead")
typedef OldClassName<T> = NewClassName<T>;

拥有种类别称,您能为长而繁杂的种类授予简洁明了通俗易懂的名字,并以不容易毁坏编码的方法重新命名您的类。Dart 2.13 版还包括别的多种升级,您能够 在大家以前的文章 Dart 2.13 版本号公布 中掌握详细信息。

Flutter web 升级

做为 Flutter 稳定版全新适用的服务平台,web 服务平台在这里版本号也是有多种改善。

最先,大家依靠新的 service worker 载入体制提升了缓存文件个人行为,并修补了 main.dart.js 的反复免费下载难题。在老版 Flutter web 中,service worker 会在后台管理下载软件升级,客户在这段时间可仍旧应用运用的旧版。升级免费下载结束后,客户要数次更新电脑浏览器网页页面后才会见到相对应升级。在 Flutter 2.2 版中,当新的 service worker 检验到升级后,客户必须先等候升级免费下载结束才可以应用运用,但到时候她们不用再度手动式页面刷新就可以见到升级內容。

要开启该项变动,您必须再次转化成您的 Flutter 运用的 index.html。从总体上,请储存您的改动、删掉 index.html 文档,随后在新项目文件目录中运作 flutter create . 以再次转化成该文件。

大家还对2个 web 渲染器都干了改善。在 HTML 渲染器上,大家加上了对 字体样式特点 的适用,以开启 FontFeature 设定并应用 canvas API 3D渲染文字,进而使鼠标悬停处的文字可以表明在适度的部位。在 HTML 和 CanvasKit 渲染器上,大家增加了对着色器蒙版 (shader masks) 和 computeLineMetrics 的适用,以处理 Flutter web 运用和移动智能终端二者不一致的难题。比如,开发人员现在可以根据 不透明度蒙版 应用着色器蒙版完成退出转换场地,并像在移动智能终端中一样应用 computeLineMetrics

无阻碍作用不可是 Flutter web 的一大关键,也是全部 Flutter 的一个重心点所属。依照设计方案,是根据搭建 SemanticsNode 树来完成无阻碍作用。Flutter web 运用的客户开启无阻碍作用后,大家会转化成一个与 RenderObject DOM 树并行处理的 DOM 树,并将词义特性变换为 Aira。在这里版本号中,大家改善了词义连接点部位,清除了移动智能终端和 web 运用在应用变换 (transform) 时的不一致,这代表着在应用变换对 widget 开展款式设定时,聚焦点框会恰当地表明在原素上边。如需形象化掌握其预期效果,您能够 收看 Material Design 无阻碍项目经理 Victor Tsaran 的视頻,掌握他怎样对 Flutter Gallery App 应用 VoiceOver。

大家如今还给予一个适用特性剖析 (profile) 和公布 (release) 方式的cmd flag,以供开发人员浏览词义连接点调节树,并形象化查询系统软件为其 web 运用建立的词义连接点,进而对运用的无阻碍作用开展调节。

要为您的 Flutter web 运用开启此作用,请运作下列指令:

$ flutter run -d chrome --profile \
  --dart-define=FLUTTER_WEB_DEBUG_SHOW_SEMANTICS=true

激话该 flag 后,您将可以在每个 widget 上边见到您的词义连接点,进而开展调节并查验词义原素的部位是不是合乎预估。假如您发觉这类难题,热烈欢迎向大家 递交 bug 汇报。

尽管在关键无阻碍作用的适用层面早已获得了巨大进步,但大家仍在这个行业不断完善。在 2.2 稳定版 以后的 master 和 dev 方式 build 中,大家增加了一个 API,供开发人员以程序编写方法为其运用 全自动开启无阻碍作用,另外大家已经下手处理 在屏幕阅读器中应用 Tab 键 的难题。

最终但也一样关键的是,最新版本的 Flutter DevTools 如今还适用为您的 Flutter web 运用应用合理布局电脑浏览器。

您现在可以在 web 运用中应用您所了解的合理布局调节专用工具,这与移动智能终端和桌面应用别无二致。

iOS 网页页面转换场地和增加量式安裝

针对 iOS 服务平台,此版本号将动漫帧的3D渲染時间减缩了 75%,使 Cupertino 主题风格中网页页面转换场地更顺畅。在千元智能机上的减缩占比乃至很有可能高些。大家不但改进了终端用户可认知到的特性,还一直在想尽办法提高开发设计特性。

在这里版本号中,大家完成了开发设计全过程中的 增加量式 iOS 安裝。标准检测数据显示,iOS 运用的更新版本安装操作减少了 40%,这也就减少了您的运用变动检测周期时间。

应用 Flutter 搭建服务平台响应式运用

伴随着 Flutter 稳定版逐渐适用大量服务平台,您在设计方案运用时不但必须考虑到兼容不一样的机器设备种类 (如手机上、平板和桌面上电脑上),还必须考虑到适用不一样的键入方法 (触碰与键盘鼠标),及其兼容每个服务平台上的不一样应用习惯性 (比如在导航栏时是应用零件柜导航条或是系统软件莱单)。假如运用可以依据不一样总体目标服务平台的关键点差别作出相对应调节,大家就称作服务平台响应式运用。

假如您想基本掌握在搭建服务平台响应式运用时要考虑到哪些方面,请收看 Kevin Moore 有关 "搭建服务平台响应式运用" 的视頻。如需详尽掌握,您能够 阅读文章 Flutter 文本文档中有关服务平台响应式运用的手册。

最终,如需参照遵照这种手册编写出的多服务平台运用实例。大家建议看一下 gSkinner 打造出的 Flokk 和 Flutter Folio 运用。您既可以下载 Flokk 和 Folio 的源码,还可以从每个应用商城免费下载 Flokk 和 Folio 运用,还能够立即在电脑浏览器中运作他们。另一个出色实例是 用以建立手册自身的运用。

Flutter 服务平台响应式运用手册的 UX 一部分以新的 Material 显示屏手册 为基本。Material 精英团队在新公布的这一手册中,依据显示屏的特点,修定了数篇关键的合理布局文章内容,调节了好几个部件,并升级了 Design Kit。

Flutter 的总体目标自始至终是让运用能够 走得更更加远,而不但是可以在好几个服务平台上一切正常运作。不保证让您的运用可以优良兼容全部总体目标服务平台,大家不容易停住步伐。Flutter 可以为您给予所需适用,让您的运用不仅可以遮盖好几个总体目标服务平台,并且可以对于不一样的显示屏尺寸、键入方法及其各服务平台的不一样应用习惯性而作出适度的调节。

大量 Material 标志

谈起 Material 手册,此版本号还列入了2个单独的 PR,向 Flutter 中加上了大量 Material 标志。大家讨人喜欢的吉祥物设计 Dash 如今也是有专享的标志了!


再加上这种新标志,能够您的运用应用的 Material 标志数量已经提升 7,000 价位。假如您在这里大量标志中找寻所需标志时碰到了艰难,能够 浏览 fonts.Google.com/icons,按类型和名字来搜索图标。

寻找理想化的标志后,您能够 在新的 "Flutter" 标签页中查询相关怎么使用该标志的表明。您还可以独立免费下载这一标志,将其作为运用中的单独資源。在您的 Flutter 运用中添加 Dash 的讨人喜欢品牌形象从没这般简易。

通过名称搜索 Material 图标

根据名字检索 Material 标志

改善文本检索方法

伴随着大家持续改善 Flutter 令其其可以能够更好地兼容每个服务平台的实际特点,大家正逐渐进军一些在移动设备上不突显但在桌面上机器设备上很重要的新的领域,在其中之一便是文本检索。在这里版本号中,大家下手对文字键入的处理方法开展重新构建,以完成以下作用: 在功能键事情于 widget 结构分析内散播的过程中将其撤销,及其可以彻底自定与文字实际操作关联的功能键。

因为如今可以撤销功能键事情,Flutter 按住空白键和箭头键时不容易再开启翻转事情,进而让客户获享更形象化的感受。您还能够应用此作用来完成在一个功能键事情散播到您运用中的父级 widget 以前对其开展解决。另一个事例是,您能够 在您的 Flutter 运用中完成用 Tab 键在 TextField 和按键中间自动跳转,一切都可以按预估一切正常运行:

import 'package:flutter/material.dart';

void main() => runApp(App());

class App extends StatelessWidget {
 @override
 Widget build(BuildContext context) => MaterialApp(
       title: 'Flutter Text Editing Fun',
       home: HomePage(),
     );
}

class HomePage extends StatelessWidget {
 @override
 Widget build(BuildContext context) => Scaffold(
       body: Column(
         children: [
           TextField(),
           OutlinedButton(onPressed: () {}, child: const Text('Press Me')),
         ],
       ),
     );
}

Flutter 2.2 可在按键事件于 widget 层次结构内向上传播的过程中将其取消;例如,您可以将 TAB 键用于将焦点从 TextField 切换到其他元素

Flutter 2.2 可在功能键事情于 widget 结构分析内向型上散播的过程中将其撤销;比如,您能够 将 TAB 键用以将聚焦点从 TextField 转换到别的原素

自定文字实际操作让您能够 完成对 TextField 中的 Enter 功能键事情开展独特解决,比如,使 Enter 键在闲聊手机客户端中开启信息推送实际操作,另外让客户能够 按 Ctrl Enter 键来自动换行。该类文字实际操作 让 Flutter 自身也可以给予不一样的按键设置,进而使文本编辑个人行为与服务器电脑操作系统相一致,比如在 Windows 和 Linux 上应用 Ctrl C 拷贝文字,而在 macOS 上应用 Cmd C。

下边便是一个那样的事例,它遮盖了默认设置的向左箭头功能键实际操作,并为退格键和退格键设定了新的实际操作:

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
 @override
 Widget build(BuildContext context) => MaterialApp(
       title: 'Flutter TextField Key Binding Demo',
       home: Scaffold(body: UnforgivingTextField()),
     );
}

/// A text field that clears itself if the user tries to back up or correct
/// something.
class UnforgivingTextField extends StatefulWidget {
 @override
 State<UnforgivingTextField> createState() => _UnforgivingTextFieldState();
}

class _UnforgivingTextFieldState extends State<UnforgivingTextField> {
 // The text editing controller used to clear the text field.
 late TextEditingController controller;

 @override
 void initState() {
   super.initState();
   controller = TextEditingController();
 }

 @override
 Widget build(BuildContext context) => Shortcuts(
       shortcuts: <LogicalKeySet, Intent>{
         // This overrides the left arrow key binding that the text field normally
         // has in order to move the cursor back by a character. The default is
         // created by the MaterialApp, which has a DefaultTextEditingShortcuts
         // widget in it.
         LogicalKeySet(LogicalKeyboardKey.arrowLeft): const ClearIntent(),

         // This binds the delete and backspace keys to also clear the text field.
         // You can bind any key, not just those already bound in
         // DefaultTextEditingShortcuts.
         LogicalKeySet(LogicalKeyboardKey.delete): const ClearIntent(),
         LogicalKeySet(LogicalKeyboardKey.backspace): const ClearIntent(),
       },
       child: Actions(
         actions: <Type, Action<Intent>>{
           // This binds the intent that indicates clearing a text field to the
           // action that does the clearing.
           ClearIntent: ClearAction(controller: controller),
         },
         child: Center(child: TextField(controller: controller)),
       ),
     );
}

/// An intent that is bound to ClearAction.
class ClearIntent extends Intent {
 const ClearIntent();
}

/// An action that is bound to ClearIntent that clears the TextEditingController
/// passed to it.
class ClearAction extends Action<ClearIntent> {
 ClearAction({required this.controller});

 final TextEditingController controller;

 @override
 Object? invoke(covariant ClearIntent intent) {
   controller.clear();
 }
}

一个糟糕的 TextField 示例,按下左箭头键或 ESC 键会清除文本

一个槽糕的 TextField 实例,按住左箭头键或 ESC 键会消除文字

在这些方面,大家确实也有许多工作中要做,但大家将竭尽全力授予开发人员对文本编辑实际操作的彻底决策权。总体目标是在 Flutter pc端做到平稳时,终端用户将没法区别 Flutter 运用中的文本编辑作用与服务器电脑操作系统中的别的运用有哪些区别。

全自动翻转个人行为

大家一直专注于让 Flutter 运用的主要表现与每个服务平台上最出色的运用如出一辙,因此,我们在这一版本号中对下拉列表又干了进一步提升。在下拉列表的动态显示上,Android 和 iOS 将完全一致,即默认设置无法显示下拉列表。但在桌面应用中,只需內容超过器皿,一般便会全自动表明下拉列表。这就规定您加上一个种类为 Scrollbar 的父级 widget。为了更好地在移动设备和桌面上机器设备上面完成恰当的个人行为,此版本号会在必须时全自动加上一个 Scrollbar

下列是一段没有 Scrollbar 的编码:

import 'package:flutter/material.dart';

void main() => runApp(App());

class App extends StatelessWidget {
 @override
 Widget build(BuildContext context) => MaterialApp(
       title: 'Automatic Scrollbars',
       home: HomePage(),
     );
}

class HomePage extends StatelessWidget {
 @override
 Widget build(BuildContext context) => Scaffold(
       body: ListView.builder(
         itemCount: 100,
         itemBuilder: (context, index) => Text('Item $index'),
       ),
     );
}

以上编码在桌面上服务平台上运作时,可能表明一个下拉列表:

假如您讨厌下拉列表的外型或不愿让下拉列表一直表明,能够 设定 ScrollBarTheme。假如您讨厌该默认设置个人行为,能够 在运用等级或实际案例等级根据设定 ScrollBehavior 来对其开展变更。如需详尽掌握新的默认设置下拉列表个人行为及其怎样转移编码以遵照新的最佳实践,客户程序 Flutter 官方网文本文档。

TextSpan 上的鼠标箭头

在以前的 Flutter 版本号中,您能够 在一切 widget 上加上一个鼠标箭头 (比如用手形表针来表明原素可供点一下)。事实上,Flutter 会在绝大多数状况下替您加上该类鼠标箭头,比如在全部按键上加上手形鼠标箭头。但是,假如您是用好几个不一样款式的 TextSpan 来完成一段富文本,并且其长短很有可能长到必须自动换行,那么就没法给它加上鼠标箭头了,这是由于 TextSpan 不属于 widget,不可以用以定义鼠标箭头的视觉范畴。但如今不一样了!在最新版本中,假如您的 TextSpan 具有手式条形码扫描器 (GestureRecognizer),系统软件将全自动为其设定鼠标箭头:

import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:url_launcher/url_launcher.dart' as urlLauncher;

void main() => runApp(App());

class App extends StatelessWidget {
 static const title = 'Flutter App';
 @override
 Widget build(BuildContext context) => MaterialApp(
       title: title,
       home: HomePage(),
     );
}

class HomePage extends StatelessWidget {
 @override
 Widget build(BuildContext context) => Scaffold(
       appBar: AppBar(title: Text(App.title)),
       body: Center(
         child: RichText(
           text: TextSpan(
             style: TextStyle(fontSize: 48),
             children: [
               TextSpan(
                 text: 'This is not a link, ',
                 style: TextStyle(color: Colors.black),
               ),        TextSpan(
                 text: 'but this is',
                 style: TextStyle(color: Colors.blue),
                 recognizer: TapGestureRecognizer()
                   ..onTap = () {
                     urlLauncher.launch('https://flutter.dev');
                   },
               ),
             ],
           ),
         ),
       ),
     );
}

如今您能够 随意应用随意自动换行的 TextSpan,只需其具有手式条形码扫描器,系统软件即会为其设定适度的鼠标箭头。

在这里版本号中,TextSpan 除开适用 mouseCursor,还适用 onEnteronExit。这种改善看起来细微,对客户体验的危害却大,能让 Flutter 运用给予更接近客户预估的应用感受。

Flutter 2.2 中澳的预览版作用

除开适用工作环境的新作用,Flutter 2.2 还配用了多种新的预览版作用,包含 iOS 着色器编译程序特性改善、Android 延迟时间载入部件适用、Flutter 桌面上服务平台升级及其 Sony 奉献的 ARM64 Linux 服务器适用。欢迎你感受这种作用,并 在碰到难题时往大家汇报。

iOS 着色器编译程序改善

在图型3D渲染行业,"着色器" 指的是一个在终端产品用户机器设备可以用的 GPU 上编译程序并运作的程序流程。Flutter 自问世之际就在最底层的 Skia 图形库中应用着色器,进而在颜色、黑影、动漫等层面完成高品质图型实际效果的另外达到可匹敌原生态编码的优势能。归功于 Flutter API 的协调能力,着色器可以以 JIT 方法及时转化成和编译程序,并与必须他们的帧工作中负荷同歩。但是,当着色器的编译程序用时超过相对应帧的時间费用预算,便会导致用户感受到卡屏。

为了更好地防止这类卡屏,Flutter 让您能够 在训炼运作期内缓存文件着色器,并将其装包到运用中,随后于 Flutter 模块运作时的第一帧以前对其开展编译程序。这样一来,这种事先编译程序的着色器就无须在帧工作中负荷期内开展编译程序,也就不容易导致卡屏。但是,Skia 一开始只对于 OpenGL 完成了此作用。

这就造成,大家因 Apple 废料 OpenGL 而在 iOS 上默认设置开启 Metal 后端开发后,标准检测测出的最烂帧時间标值有一定的提高,客户汇报卡屏的状况也有一定的增加。历经调研,大家发觉该类卡屏通常由以下要素导致: 着色器编译程序時间提升、Skia 为 Metal 后端开发转化成的着色器总数增加,及其无法在数次运作中间对编译程序后的着色器开展缓存文件并因此造成运用在事后运作时依然发生卡屏。

到迄今为止,在 iOS 上避免该类卡屏的唯一方法便是对情景和动漫开展简单化,而这不是一个理想化的解决方法。

为处理这个问题,大家已在 dev 方式中公布 Skia 对于 Metal 增加对着色器加热的适用 这一预览版作用。Flutter 如今会根据 Skia 在第一个帧工作中负荷逐渐以前对捆缚的着色器开展编译程序。

应用启动期间的预编译操作的跟踪记录

运用运行期内的预编译实际操作的追踪纪录

但是,此解决方法存有一些存在的不足:

  • 对比 OpenGL 后端开发,Skia 仍会为 Metal 后端开发转化成大量的着色器。
  • 最后将着色器编译程序为序列号的实际操作依然与帧工作中负荷同歩产生,但这好过在帧3D渲染时间段内实行全部着色器转化成和编译程序实际操作。
  • 最后转化成的序列号会在运用初次运作后获得缓存文件,直至机器设备被重启。

假如您期待在自身的运用中应用此新作用,能够 参照 Flutter 官方网文本文档 上的表明开展实际操作。

大家将持续改善此完成计划方案。在 Android 和 iOS 上,它现阶段几个缺陷:

  • 因为捆缚了着色器,运用的布署容积更高。
  • 因为必须预编译捆缚的着色器,运用运行延迟更长。
  • 对开发人员感受很有可能存有不良影响。

在其中,大家更为高度重视最终一点。大家觉得开发人员不应该必须实行训炼运作,都不应当在运用容积和运行延迟层面担负成本。因而,大家仍在再次探寻是不是有不依靠此完成计划方案的别的方式来清除着色器编译程序卡屏及其其他类型的卡屏。大家已经与 Skia 精英团队携手并肩协作,减少 Flutter 要求造成的着色器总数,并讨论在 Flutter 模块中捆缚小量静态数据界定的着色器的可行性分析。

您能够 关心 Flutter 代码库中的有关新项目 掌握有关进度。

Android 延迟时间载入部件: 可免费下载的 AOT 编码和資源

在 Android 服务平台上,此版本号运用 Dart 的拆分式 AOT 编译程序作用来 让 Flutter 运用可以在运作时免费下载含有事先编译程序的编码和資源的控制模块。大家将这类可安裝的拆分控制模块称之为 "延迟时间载入部件"。因为可在必须时才免费下载编码和資源,运用的原始安裝容积明显变小。比如,大家完成了一个独特版本号的 Flutter Gallery 运用,将在其中全部实例和 demo 都设成延迟时间载入,进而将原始安裝容积减缩了 46%。

在 Flutter Gallery 应用中下载 Crane 案例

在 Flutter Gallery 运用中免费下载 Crane 实例

假如在搭建运用时开启延迟时间载入部件,Dart 会将这些独立用 deferred 关键词导进的编码编译程序到单独的共享资源库文件,并将这种库与有关資源一起装包为延迟时间载入部件。

该作用还处在初期浏览环节,现阶段只适用 Android。您能够 在 Flutter 官方网文本文档上架的 延迟时间载入部件 网页页面中掌握怎样完成该类部件。此网页页面还连接到 Flutter wiki 上的一个网页页面,后面一种详解了此作用的原理。假如发现问题,请根据 Flutter 难题定位追踪器 告之大家。

Flutter Windows UWP alpha 版

此版本号 Flutter 的另一项升级对于的是桌面上服务平台: 对 Windows UWP 的适用已经在 dev 方式中进到 alpha 版环节 (2.2 稳定版以后)。依靠 UWP,您的 Flutter 运用将能够 遮盖 Xbox 等没法运作规范 Windows 运用的机器设备。如需使用此作用,请先 达到 UWP 前提条件,随后转换到 dev 方式并开启 UWP 适用。

$ flutter channel dev
$ flutter upgrade
$ flutter config — enable-windows-uwp-desktop

开启后,建立的 Flutter 运用会包括一个新的 winuwp 文件夹名称,便于您在 UWP 器皿中搭建和运作您的运用:

$ flutter create uwp_fun
$ cd uwp_fun
$ flutter pub get
$ flutter run -d winuwp

因为搭建的是在 Windows 沙盒游戏环境中运行的 Windows UWP 运用,您必须在开发设计期内对运用的服务器防火墙开展 localhost 透过设定,以完成热轻载和程序调试中断点等作用。因此,您能够 依照 Flutter 桌面上文本文档网页页面 上的表明应用 checknetisolation 开展实际操作。进行有关实际操作后,您就可以在 Windows 内以 UWP 运用的方式运作您钟爱的 Flutter 运用了。

在 Windows UWP 器皿中运作您钟爱的 Flutter 运用

在 Windows UWP 器皿中运作您钟爱的 Flutter 运用

自然,您还可以运作一些更丰富有意思的 UWP 运用,比如下边这一 视頻 中在 Xbox 上运作的 Flutter 运用。

在 Xbox 上运作的 Flutter 运用

我们要专此感谢 clarkezone,从我添加 Flutter 精英团队时起,他就一直投身完成此项作用。如需详尽掌握 Windows UWP alpha 版适用,客户程序 官方网文本文档。

Sony 奉献的 ARM64 Linux 服务器适用

此项巨大贡献来自于 Flutter 小区的 Sony 前端工程师 HidenoriMatsubayashi。他递交的 ARM64 Linux 总体目标适用 这条 PR 让您能够 在 ARM64 Linux 设备上搭建和运作 Flutter 运用。

在 ARM64 Linux 机器上运行您喜爱的 Flutter 应用

在 ARM64 Linux 设备上运作您钟爱的 Flutter 运用

大家很高兴见到 Flutter 小区将 Flutter 移殖到远超 Google 精英团队想像的服务平台。HidenoriMatsubayashi,万分感激!

Flutter 生态体系和专用工具升级

Flutter 模块和架构仅仅总体感受的一部分,package 生态体系和专用工具层面的升级对 Flutter 开发人员的感受而言一样关键。我们在这一行业也是有几类非常好的升级与您共享。

在生态体系端,大家公布了好几个 Flutter Favorite package,并升级了 Flutter 的 Firebase 适用软件集 FlutterFire。FlutterFire 如今还适用新的 Firebase App Check 预览版,让 Flutter 开发人员自第一天起就可获益于这一商品。

在专用工具端,Flutter DevTools 干了多种升级以便捷您提升运用的运行内存应用方法,还为 Provider package 给予了一个标签页。适用 VS Code 和 Android Studio/IntelliJ 的 IDE 软件也是有重特大升级。除此之外,假如您是 Flutter 相关内容的原创者,大家还给予了一种全新升级方法让您将 DartPad 集成化到您的写作步骤中。

最终,Flutter 如今拥有一个新的低代码 (low-code) 运用设计方案和搭建专用工具,名叫 FlutterFlow。该专用工具在 web 上运作,自身也是应用 Flutter 搭建而成。

Flutter Favorite 升级

在这里版本号中,归功于 Flutter 生态体系联合会 (FEC) 的辛苦工作,大家提升了 24 个 Flutter Favorite 验证 package,称得上迄今为止脚步较大 的一次扩大。这种新公布的 Flutter Favorites package 包含:

  • FlutterFire package (最新版本) : cloud_firestorecloud_functionsfirebase_authfirebase_corefirebase_crashlyticsfirebase_messagingfirebase_storage
  • Flutter Community "plus" package: android_alarm_manager_plusandroid_intent_plusbattery_plusconnectivity_plusdevice_info_plusnetwork_info_pluspackage_info_plussensors_plusshare_plus
  • googleapis package
  • win32 package
  • Intlcharacters package
  • Sentry package: sentry 和 sentry_flutter
  • infinite_scroll_paginationflutter_native_splash package

全部这种 package 早已适用空 (null) 安全性特点,并尽量适用 Android、iOS 和 web 服务平台。在其中有一些除外,比如 firebase_crashlytics 沒有适用 web 服务平台的最底层 SDK,而 android_alarm_manager_plus 则是致力于 Android 服务平台设计方案。

Flutter Community "plus" package 在 Flutter 精英团队官方网 package 的基本上给予了大量特点。比如,Google 的 Flutter 精英团队给予的 battery package 能够 上溯第一版 Flutter 公布以前,它如今具有空安全性特点,但只适用 Android 和 iOS 服务平台。与此相对性,Flutter Community battery_plus package 则适用所有 6 个 Flutter 服务平台,包含 web、Windows、macOS 和 Linux。该模块内嵌的所有 9 个 "plus" package 都得到了 Flutter Favorite 认同,它是意味着全部 Flutter 小区迈进完善的重特大一步。Flutter 新项目早已远远地不止是 Google 工程项目精英团队独立迎战。您应尽早将您的编码转移至 "plus" package。在未来几个星期中,Google 的有关 package 可能升级,建议开展转移。

googleapis 软件为 185 个 Google API 给予了自动生成的 Dart 封裝,供您在手机客户端或服务端的 Dart 运用 (包含您的 Flutter 运用) 中应用。如需进一步掌握此 package,您能够 收看其创作者有关应用 Google API 为您的 Flutter 运用颠覆式创新的 I/O 交流会演说。

win32 package 称得上一件工程项目作品,它应用 Dart FFI 封裝了绝大多数常见 Win32 API 插口,让 Dart 编码不用依靠 C c语言编译器或 Windows SDK 就可以应用这种 API。伴随着 Flutter 在 Windows 服务平台上愈来愈受关心,win32 package 变成了很多受欢迎软件的重要依靠项,在其中包含最受欢迎 Flutter package 之一的 path_provider。为了更好地极限挑战,其创作者 timsneath 创出了一些令人震惊创举,比如应用纯 Win32 和纯 Dart 来完成 notepad (文本文档)、snake (贪食蛇) 和 tetris (方块游戏)。

仅使用 Dart FFI 和 Win32 接口实现的在 Windows 平台运行的俄罗斯方块游戏

仅应用 Dart FFI 和 Win32 插口完成的在 Windows 服务平台运作的乌克兰方块游戏

假如您有在 Windows 上开展一切 Dart 或 Flutter 开发设计,win32 package 非常值得您一探究竟。

FlutterFire 升级和 Firebase App Check

做为 Flutter 的 Firebase 适用软件集,FlutterFire 已位居最受欢迎 Flutter 软件之列。为了更好地让该软件集的最新版本可以与 Flutter 2 一道公布并在接着对其不断开展改善,其关键推动者 Invertase 精英团队干了很多优异的工作中。自 FlutterFire 的第一个最新版本公布以后,Invertase 将未解决困难的总数减少了 79%,并将未处理 PR 的总数减少了 88%。她们不但在最新版本软件的开发设计上成绩显著,还取得成功将全部 Beta 版软件都适用了空安全性体制,另外让这种软件在您很有可能碰到的各种各样关键上面能一切正常搭建和运作。

Invertase 仍在再次为 FlutterFire 软件增加更多用途,包含在新版本 Flutter 中对 Cloud Firebase 集成化做的多种升级:

  • 用以读写能力数据信息的 Typesafe API
  • 适用 Firebase Local Emulator Suite
  • 运用 data bundles 提升您的数据统计

FlutterFire 如今还适用 Firebase 新发布的 beta 版商品 Firebase App Check。Firebase App Check 可协助您维护 Cloud Storage 等后端开发資源,使其不会受到付钱诈骗或中间人攻击等乱用个人行为的损害。拥有 App Check,运作您的 Flutter 运用的机器设备会根据一个运用身份证件给予方来证实运用案例的就在真实身份,并可查验运用是不是运作在未受伪造的可靠机器设备上。一旦您开启 App Check,相对应证实信息内容会额外到您的运用向 Firebase 后端开发資源传出的每一个要求中。要掌握详细信息,客户程序 FlutterFire App Check 文本文档。

Flutter DevTools 升级

此版本号的 Flutter DevTools 产生了多种重特大升级,包含运行内存追踪层面的二项改善和一个 Provider 软件专享的浏览器主页。

运行内存追踪层面的第一项改善: 追踪目标的内存分配部位。这有利于找到造成内存泄漏的编码。

Flutter DevTools 内存标签页分配栈轨迹

Flutter DevTools 运行内存标签页分派栈运动轨迹

第二项改善: 向运行内存时间线中引入自定信息内容。这让您能够 依据运用的详细情况加上标明,比如标明运行内存密集式工作中的逐渐点和完毕点,以认证是不是适度地实行了清除。

Flutter DevTools 时间轴标签页自定义内存事件

Flutter DevTools 时间线标签页自定运行内存事情

伴随着 Flutter 运用的容积逐渐提高,大家将再接再厉为 Flutter 开发人员给予需要的专用工具,助其追踪和修补内存泄漏和别的各种各样运作时难题。

您必须清查的难题并不仅是这些与 Flutter 架构有关的运作时难题,有时候也有与所依靠 package 有关的难题。伴随着 pub.dev 上的 Flutter 兼容 package 总数提升 15,000 价位,您的运用应用的 package 总数也很可能随着提高。有鉴于此,Flutter DevTools 中澳添加了一个试验性的 Provider 标签页,由 provider package 自身以及他许多优异手机软件的开发人员 Remi Roussel 倾情打造出。假如您运作的是最新版本 Flutter,在您对一个包括 provider 软件的 Flutter 运用开展调节时,Provider 标签页便会全自动表明。

实战演示: Flutter DevTools Provider 标签页

实战演练演试: Flutter DevTools Provider 标签页

Provider 标签页会向您展现每一个 provider 的有关数据信息,并会即时体现您在运用运作全过程中作出的变更。非常好吧?值得一提的是,它还能够让您立即变更这种数据信息,进而对运用的边缘实例开展检测。太赞了!

在合力 Remi 开发设计此标签页的全过程中,大家也学得了一些珍贵工作经验,知道该怎样能够更好地为具备相近要求的 package 创作者服务项目。您能够 掌握 Remi 是怎样搭建出 Provider 标签页的,还能够根据 Flutter DevTools 软件提议掌握大家当今的改善构思。热烈欢迎向大家给予意见反馈;另外,假如您在 Flutter DevTools 增加大量标签页层面也是有自身的念头,大家也很希望听见您的想法。

以上改善仅仅此版本号 Flutter DevTools 诸多改善中的几类。如需详细目录,请查询以下公示:

  • Flutter DevTools 2.1 版本号表明
  • Flutter DevTools 2.2.1 版本号表明
  • Flutter DevTools 2.2.3 版本号表明

IDE 软件升级

在这里版本号中,对于 Flutter 的 Visual Studio Code 和 IntelliJ/Android Studio IDE 拓展也获得了升级。比如,Visual Studio Code 拓展如今适用二项附加的 Dart 代码优化: 内联函数和内联当地自变量。

实战演示: 新的 "内联函数" Dart 重构

实战演练演试: 新的 "内联函数" Dart 重新构建

在 Android Studio/IntelliJ 拓展中,大家增加了一个在控制面板中輸出全部局部变量运动轨迹的选择项。

您现在可以输出所有堆栈轨迹,而不仅限于第一条

您现在可以輸出全部局部变量运动轨迹,而不但仅限于第一条

假如新项目中某一难题的根本原因是在另一个 package,之前有关运动轨迹不容易列入到輸出中,此项新作用就可以派上大用场。但接踵而来的一个难题是,该怎么让运动轨迹信息内容更便于整理讲解?大家早已拥有一些念头,热烈欢迎关心事后有关修改。

如需此版本号中 IDE 拓展的详细变动目录,请查询以下公示:

  • VS Code 拓展 v3.21
  • VS Code 拓展 v3.22
  • Flutter IntelliJ 软件 M55 版本号
  • Flutter IntelliJ 软件 M56 版本号

DartPad 当堂实践活动

为了更好地保证 Flutter 开发者平台迅猛发展的另外让有关文本文档也可以紧跟步伐,Dart 和 Flutter 精英团队自始至终在想尽办法改善和扩展有关培训计划的做法。在这里版本号中,大家为 DartPad 加上了一个新的逐层式页面,让开发人员在学习培训老师核心的课程内容/专题讲座时能够 便捷地当堂动手能力实践活动。

实战演示: DartPad 课程/讲座随堂实践

实战演练演试: DartPad 课程内容/专题讲座当堂实践活动

根据将实践活动引导立即添加到 DartPad 中,我们在2020年的 I/O 交流会完成了 正确引导式专题讲座感受。但是,此作用并不是专为我们自己的要求而开发设计,假如您要在自身的 Dart 或 Flutter 课程内容/专题讲座中应用该专用工具,能够 按 DartPad 培训计划写作手册 中的表明实际操作。切勿将此作用与 在 Gist 中根据 DartPad 分享代码 和 在您的网址上置入 DartPad 这两项作用相搞混,后二者早已发布了一段时间。

大家期待全部 Dart 和 Flutter 內容创作者都可以为其受众群体带去丰富多彩的互动型感受。热烈欢迎使用并 向大家给予意见反馈。

小区聚焦点: FlutterFlow

FlutterFlow 是一个 "低代码" (low code) 运用设计方案和开发环境,用以在电脑浏览器中搭建运用。它给予了一个 "眼见为实" 自然环境,让您可依据具体 Firebase 数据信息设计制作跨过好几个网页页面的运用合理布局。此专用工具的总体目标是让您可以轻轻松松实行绝大多数普遍实际操作,并尽量避免您自身必须撰写的编码量。事实上,在一次演试中,演试者不上一个小时就应用此专用工具搭建出了一个包括好几个网页页面、可协助客户游玩通常会艺术博物馆的详细移动智能终端,全部全过程沒有写一行编码。您能够 在 YouTube 上收看全部全过程的 视頻纪录。

对兼容模式有影响的重大变更

一如既往,大家会尽量减少开展危害兼容模式的重大变更。在这里版本号中,该类变动仅限清除下边这种已废料的部件:

  • 73750 清除已废料的 BinaryMessages
  • 73751 清除已废料的 TypeMatcher 类

您能够 在 flutter.cn 上寻找这种变动相匹配的转移手册.

总结

Google Flutter 精英团队谨向谨此向大伙儿值此真挚感激!我们要谢谢 Flutter 小区的每一个人,Flutter 突出成绩离不了大伙儿的每一份奉献。现如今,Play 店铺中有超出八分之一的新运用是选用 Flutter 搭建而成,仅在 Play 店铺就百度收录了高达 20 万款 Flutter 运用。Flutter 的飞速发展趋势出人意表。世界各国许许多多的运用精英团队都应用 Flutter 开展开发设计,为众多服务平台上的客户打造出高品质感受。谢谢你们挑选 Flutter!

最终,以防您错过了,不必忘记了感受下到此次 I/O 交流会发布的 I/O Photo Booth web 运用,它是由 Flutter 和 Firebase 搭建而成的 web 运用,让您能够 和 Dash 合演萌萌哒的半身照。大家还 对外开放了其源码,便捷您进一步掌握 Flutter web 最佳实践、照相机软件 web 适用及其怎么使用 Cloud Functions 涵数来转化成自定社交媒体內容。心动不如行动,赶快一睹为快吧!

评论(0条)

刀客源码 游客评论