关于flutter:Flutter-22-升级了哪些东西

4次阅读

共计 17791 个字符,预计需要花费 45 分钟才能阅读完成。

老铁记得 转发,猫哥会出现更多 Flutter 好文~~~~

微信 flutter 研修群 ducafecat

原文

https://medium.com/flutter/wh…

注释

2.2 的公布侧重于改良和优化,包含 iOS 性能的晋升,Android 提早组件,为 Flutter web 更新服务工作者等等!

明天是咱们让 Flutter 2.2 可用的日子。您能够通过切换到 stable 通道并降级以后的 Flutter 装置,或者转到 Flutter.dev/docs/get-started 来启动新的装置。

只管间隔 Flutter 2 公布只有几个月的工夫,咱们在 2.2 中还是有很多改良能够分享。这个版本合并了 2,456 个 PRs,敞开了框架、引擎和插件库中的 3,105 个问题。特地大声呐喊 Flutter 社区在宽广提供了大量的公关和公关审查,包含 Abhishek01039 谁奉献了最多的 PRs (17)和 xu-baolin,谁审查了最多的 PRs (9) Flutter 2.2。感激所有贡献者的帮忙,使 Flutter 2.2 的稳固通道。没有你咱们做不到。

每一个 Flutter 公布到 stable 的新版本都会带来一组新的更新,无论是性能加强、新个性还是 bug 修复。此外,一个版本还包含一些尚未筹备好投入生产应用的个性,但咱们心愿您可能验证它们是否依照您心愿的形式工作。最初,每个新版本都附带了一组来自更大的 Flutter 社区的相干工具更新和更新。诚实说,最近 Flutter 的每一个新版本都产生了很多事件,咱们无奈在一篇博客文章中正当地捕捉到所有的内容,然而咱们会尽量突出重点。

在 stable 下 Flutter 2.2 更新

这个版本涵盖了 Flutter 2 之上的一系列改良,包含跨 Android,iOS 和 web 的更新,新材质图标,文本处理更新,滚动条行为,以及对 TextSpan 小部件的鼠标光标反对,以及如何从繁多源代码库中最好地反对多种平台的新指南。所有这些个性当初都能够稳固地应用,并且能够在生产应用程序中应用。它们都是建设在一个新的 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 发布公告中的详细信息。

https://medium.com/dartlang/a…

Flutter web 更新

Flutter 最新的稳固平台 web 曾经在这个版本中失去了改良。

首先,咱们应用新的服务工作者加载机制优化了缓存行为,并修复了 main.dart.js 的双重下载。在 Flutter web 的晚期版本中,服务工作者在后盾下载更新到您的应用程序,同时让您的用户拜访您的应用程序的古老版本。一旦更新被下载,用户将不会看到这些更改,直到他们刷新浏览器页面几次。在 Flutter 2.2 中,当新的服务工作者检测到一个变动时,用户会等到更新被下载后能力应用这个应用程序,然而之后他们会看到更新,而不须要第二次手动刷新页面。

启用此更改须要您从新生成您的 Flutter 应用程序的 index.html。要做到这一点,保留批改,删除 index.html,而后运行 flutter create。在你的我的项目目录中从新创立它。

咱们还对这两个网页渲染器进行了改良。对于 HTML,咱们增加了对字体个性的反对,以反对设置 FontFeature,并应用 canvas api 出现文本,以便文本在鼠标悬停时呈现在正确的地位。对于 HTML 和 CanvasKit,咱们减少了对着色遮罩和 computelinetrics 的反对,解决了 Flutter web 和挪动利用之间的平价差距。例如,开发人员当初能够应用不通明遮罩来应用着色遮罩执行淡出过渡,并且能够像应用挪动应用程序一样应用 computelinetrics。

对于 Flutter 网页,以及 Flutter general,可拜访性是咱们的最高优先事项之一。依据设计,Flutter 通过构建 SemanticsNode 树来实现可拜访性。一旦 Flutter web 利用用户启用了可拜访性,框架就会生成一个与 RenderObject DOM 树并行的 DOM 树,并将语义属性转换为 Aira。在这个版本中,咱们改良了语义节点的地位,以便在应用转换时放大挪动和桌面 web 应用程序之间的差距,这意味着当小部件应用转换设计时,焦点框应该正确地呈现在元素上。要看到这个成果,请看 Victor Tsaran 的视频,他领导了资料设计的可拜访性我的项目,应用 VoiceOver with Flutter Gallery App:

咱们还公开了语义节点调试树,在概要文件和开释模式中有一个命令行标记,通过可视化为 web 应用程序创立的语义节点来帮忙开发人员调试可拜访性。

为了使你本人的 Flutter web 应用程序可能应用这个性能,运行以下命令:

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

激活该标记后,您将可能看到小部件顶部的语义节点,这样您就能够调试并查看语义元素是否搁置在不应该搁置的地位。如果你找到这样的例子,请不要犹豫,提交一份错误报告。

https://goo.gle/flutter_web_i…

尽管咱们在反对一组外围可拜访性个性方面获得了重大进展,但咱们将持续改良可拜访性反对。在 2.2 稳定版之外的主版和开发版渠道中,咱们减少了一个 API,让开发者能够通过编程形式主动启用应用程序的可拜访性,并通过应用带有屏幕阅读器的 Tab 解决问题。

最初,但必定不是最不重要的,最新版本的 Flutter DevTools 当初反对您的 Flutter 网络应用程序的布局浏览器。

这个更新给你提供了和你的挪动和桌面应用程序一样的网页布局调试工具。

iOS 页面转换和增量装置

对于 iOS,在这个版本中,咱们通过缩小 75% 渲染动画画面所需的工夫,使 Cupertino 的页面转换更加晦涩,而且可能在低端手机上更多。咱们不只是寻找最终用户性能的改良,咱们也始终在寻找进步开发性能的办法。

在这个版本中,咱们在开发过程中实现了增量的 iOS 装置。在咱们的基准测试中,咱们发现装置升级版 iOS 应用程序的工夫缩小了 40%,这样在测试应用程序更改时就会缩小周转工夫。

应用 Flutter 构建平台自适应应用程序

随着 Flutter 扩大到反对更多稳固的平台,思考不仅反对不同模式因素的应用程序变得很有用,比方挪动设施、平板电脑和桌面,还有不同的输出类型 (触摸和鼠标 + 键盘) 和带有不同习惯用法的平台,比方导航抽屉和导航系统菜单。咱们把可能依据不同指标平台的细节进行调整的利用称为“平台自适应”利用。

为了介绍在构建平台自适应应用程序时须要留神的事项,咱们将向您介绍 Kevin Moore 的构建平台自适应应用程序会议。要理解更多详细信息,请查看 flutter.dev 上的平台自适应应用程序指南。

  • 构建平台自适应利用
    https://events.google.com/io/…
  • 指南
    https://flutter.dev/docs/deve…

最初,对于依据这些准则为多个平台编写的示例应用程序,咱们举荐来自 gSkinner 的 Flokk 和 Flutter Folio 应用程序。你能够下载 Flokk 和 Folio 的代码,也能够从各种应用程序商店下载 Flokk 和 Folio,或者间接从浏览器上运行它们。另一个很好的例子是用于创立指南自身的应用程序:

https://flutter.gskinner.com/…

https://flutter.gskinner.com/…

https://flutter.gskinner.com/…

https://github.com/gskinnerTe…

Flutter 平台自适应利用指南的 UX 局部是基于新的大屏幕资料指南。这个来自 Material 团队的新领导包含几个次要布局文章的返工,以及对几个组件的更新和更新的设计工具包,所有这些都思考到了大屏幕。

https://material.io/blog/mate…

Flutter 的指标始终是让应用程序不仅仅在多个平台上运行; 咱们还要等到你的应用程序在所有你的指标平台上运行良好之后能力实现。的反对不仅能够针对多个平台的应用程序,还能够依据屏幕大小、输出模式和每个平台的习惯调整应用程序。

更多 Material 图标

对于 Material guidance 的主题,在这个版本中,咱们曾经为 Flutter 增加了不止一个而是两个新的 Material 图标,包含一个 Dash 本人的图标!

https://github.com/flutter/fl…

这些更新使你的应用程序的材质图标总数超过 7000 个。如果你很难找到你想要的图标,那么在那些令人难堪的财产中 (谁不会呢?) 你可在此 fonts.google.com/icons 按类别及姓名搜查。

http://fonts.google.com/icons

一旦你找到了完满的图标,新的“Flutter”标签会通知你如何应用它,或者你能够下载这个图标作为应用程序中的独立资产。增加 Dash 到您的 Flutter 应用程序素来没有这么容易。

改良的文本处理

随着咱们持续改良 Flutter 以反对每个平台的细节,咱们持续推动新的畛域,这些畛域在挪动表单因素上不像在桌面表单因素上那么重要。其中一个畛域是文本处理。在这个版本中,咱们曾经开始重构咱们如何解决文本输出,以实现诸如勾销在小部件层次结构中冒泡的击键等性能,并通过引入齐全自定义与文本动作相干的击键性能。

可能勾销击键使得 Flutter 可能在不触发滚动事件的状况下实现诸如应用空格键和箭头键之类的货色,给你的最终用户一个更直观的体验。您能够应用同样的性能来解决击键,而后再将其发送到您本人的应用程序中的父窗口部件。另一个例子是,在这个版本中,你能够在 TextField 和 Flutter 应用程序中的一个按钮之间抉择 Tab,而且它失常工作:

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')),
         ],
       ),
     );
}

自定义文本操作容许你做一些事件,比方在 TextField 中非凡解决 Enter 键; 例如,你能够触发在聊天客户端发送音讯,同时依然容许通过 Ctrl + Enter 插入一个新行。这些雷同的文本操作容许 Flutter 自身提供不同的按键来匹配主机 OS 自身的文本编辑行为,例如,在 Windows 和 Linux 上应用 Ctrl + c,而在 macOS 上应用 Cmd + c。

https://github.com/flutter/fl…

作为一个例子,上面的示例重写了默认的左箭头操作,并为退格键和删除键提供了一个新的操作:

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();
 }
}

咱们依然有更多的工作要做,但咱们正在致力给你提供残缺的文本编辑操作。咱们的指标是,当 Flutter 桌面变得稳固时,你的用户将无奈分辨出 Flutter 应用程序中编辑文本与主机操作系统中其余应用程序之间的区别。

主动滚动行为

作为咱们继续谋求的一部分,让 Flutter 利用在每个平台上都体现得像最好的利用一样,咱们在这个版本中从新扫视了滚动条。当理论显示滚动条时,安卓和 iOS 是雷同的; 默认状况下它们不显示滚动条。另一方面,对于桌面应用程序,当内容大于容器时,通常会主动显示滚动条,这须要您增加一个滚动条父窗口小部件。为了在挪动或桌面上取得正确的行为,此版本在必要时主动增加滚动条。

思考上面的无滚动条代码:

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.dev 上的文档。

https://flutter.dev/docs/rele…

鼠标 cursors over text spans

在以前的 Flutter 版本中,您能够在任何小部件上增加一个鼠标光标(就像一只手批示可点击的货色)。实际上,Flutter 自身在大多数状况下为您增加那些鼠标光标,比方在所有按钮上增加一个手动鼠标光标。然而,如果你想要一系列富文本,它们具备不同的文本跨度和各自的款式,并且可能有足够长的工夫来包装,那么你就不太背运了ーー TextSpan 不是一个小部件,因而不能用作鼠标光标的视觉范畴 … … 直到现在!在这个版本中,当你有一个带有手势识别器的 TextSpan 时,你将主动取得相应的鼠标光标:

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 还反对 onEnter 和 onExit 以及 mouseCursor。像这样的货色可能看起来很小,但他们有很长的路要走,使 Flutter 应用程序感觉就像用户冀望它的感觉。

Flutter 2.2 updates in preview

除了可用于产品的新性能外,Flutter 2.2 在预览版中提供了一些性能,包含 iOS 着色器编译器性能的改良,Android 提早组件反对,Flutter 桌面更新,以及索尼的 ARM64 Linux 主机反对。请尝试一下,如果有任何问题请通知咱们。

http://github.com/flutter/flu…

Preview: iOS 着色器编译改良

在图形渲染术语中,“着色器”是一个在终端用户设施上可用的 GPU 上编译和运行的程序。自 Skia 图形库诞生以来,Flutter 就始终应用着色器来提供高质量的图形成果,包含色彩、暗影、动画等等。因为 Flutter 的 api 的灵活性,着色器生成和编译实时,与帧工作负载须要他们同步。当编译着色器的工夫超过帧估算时,后果对用户来说是不言而喻的“jank”

为了防止凌乱,Flutter 提供了在训练过程中缓存着色器的能力,而后打包并捆绑一个应用程序,在第一帧之前编译,同时 Flutter 引擎启动。这意味着预编译的着色器不用在框架工作负载期间进行编译,也不会造成凌乱。然而,Skia 最后只在 OpenGL 中实现了这个个性。

因而,当咱们在 iOS 上默认启用 Metal 后端以回应苹果不举荐应用 OpenGL 时,依据咱们的基准测量,最蹩脚的帧工夫有所增加,而且用户报告的 jank 也有所增加。咱们本人的测量表明,这些报告通常是因为减少了着色器编译工夫,减少了 Skia 为 Metal 后端生成的着色器数量,以及编译的着色器无奈在运行过程中缓存,以至于 jank 在第一次运行应用程序之后依然存在。

因而,到目前为止,防止 iOS 上这种凌乱的惟一办法是简化场景和动画,这并不现实。

https://github.com/flutter/fl…

然而,当初在开发通道是一个预览的新反对在 Skia 的着色器热身的金属。通过 Skia,Flutter 当初编译绑定着色器之前的第一帧工作量开始。

然而,这个解决方案也有一些正告:

  • Skia 依然为 Metal 后端生成比 OpenGL 后端更多的着色器
  • 最终的着色器编译到机器代码依然与框架工作负载同步进行,但这比作为框架渲染工夫的一部分进行整个着色器生成和编译要快
  • 生成的机器代码在应用程序第一次运行后被缓存,直到设施重新启动

如果您心愿利用应用程序中的这种新反对,能够依照 flutter.dev 上的阐明进行操作。

https://flutter.dev/docs/perf…

We’re not done with this work, however. On both Android and iOS, this implementation has a few drawbacks:

然而,咱们还没有实现这项工作,无论是在安卓还是 iOS 上,这个实现都有一些毛病:

  • 部署应用程序的大小更大,因为它蕴含捆绑着色器
  • 应用程序启动提早更长,因为捆绑着色器须要预编译
  • 咱们对这种实现所暗示的开发人员的体验并不称心

咱们认为最初一个问题是须要解决的最重要问题。特地是,咱们查看了执行训练运行的过程,并推理由应用程序大小和应用程序启动提早造成的衡量过于沉重。因而,咱们持续钻研如何打消不依赖于此实现的着色器编译 jank 和个别的所有 jank。特地是,咱们正在与 Skia 团队单干,以缩小它响应 Flutter 的要求所产生的着色器的数量,同时也在考察应用与 Flutter 引擎捆绑在一起的一小套动态定义着色器能够实现多少 Flutter。

你能够追随这个我的项目在 Flutter 回购看到咱们的停顿。

Android 提早组件

对于 Android,这个版本应用了 Dart 的拆散 AOT 编译个性,容许 Flutter 应用程序在运行时下载蕴含提前编译代码和资源的模块。咱们将这些可装置的组件中的每一个称为提早组件。通过将代码和资产的下载推延到仅在须要时进行,初始装置大小能够显著缩小。例如,咱们实现了 Flutter Gallery 的一个版本,所有的钻研和演示都被推延了,发现初始装置规模缩小了 46%。

https://github.com/flutter/fl…

在启用提早组件的状况下进行构建时,Dart 会将只应用 deferred 关键字导入的代码编译成独自的共享库,这些库与资产一起打包到提早组件中。

提早组件目前只能在 Android 上应用,这个个性是作为晚期预览提供的。理解如何在 flutter.dev 上的新 Deferred 组件页面中实现 Deferred 组件。这个页面还链接到 Flutter 维基上的一个页面,该页面蕴含了对于这个性能如何工作的深刻介绍。请在 Flutter 问题跟踪日志问题。

Flutter Windows UWP alpha

在这个版本中,Flutter 的另一个更新是针对桌面爱好者的; 对 Windows UWP 的反对在 dev 通道中曾经转移到 alpha 版本(稳固的 2.2 版本之外)。容许你把 Flutter 应用程序带到规范 Windows 应用程序不能运行的设施上,包含 Xbox。要进行尝试,首先须要设置 UWP 先决条件。而后,切换到开发通道,启用 UWP 反对:

https://flutter.dev/desktop#w…

$ 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 UWP 应用程序,它在 Windows 的沙箱环境中运行,所以在开发过程中,你须要在本地主机上的应用程序防火墙上打一个洞,以启用热重载和调试器断点等性能。你能够通过 checkknesolation 命令依照扑桌面文档页面上的阐明做到这一点。一旦你这样做了,你能够看到你最喜爱的 Flutter 利用程序运行作为一个 UWP 应用程序在 Windows 上。

你最喜爱的 Flutter 应用程序在 Windows UWP 容器中运行

当然,你能够运行更多乏味的 UWP 应用程序,比方这些 Flutter 利用程序运行在 Xbox 上。

我要特别感谢克拉克松,自从我退出 Flutter 队以来,他就始终致力于这项反对。无关 Windows UWP alpha 的更多细节,请查看 flutter.dev/desktop/# Windows-UWP。

http://flutter.dev/desktop/#w…

ARM64 Linux host support from Sony

另一个来自社区成员 HidenoriMatsubayashi 的卓越致力,他是索尼的软件工程师,为指标 ARM64 Linux 提供了反对。这个 PR 能够让你在 ARM64 Linux 机器上建设和运行 Flutter 应用程序。

您最喜爱的 Flutter 利用程序运行在 ARM64 Linux 机器上

https://github.com/HidenoriMa…

https://github.com/flutter/fl…

很快乐看到 Flutter 社区将 Flutter 带到了 Google 团队无奈设想的中央。持续好好干吧!

Flutter 生态系统和工具更新

Flutter 引擎和框架只是整体教训的一部分。对软件包生态系统和工具的更新对 Flutter 开发人员的体验同样重要。咱们在这些畛域有一些很棒的更新能够分享。

在生态系统方面,咱们有一些新的 Flutter 最喜爱的软件包,以及 FlutterFire 的几个更新,Flutter 对 Firebase 的反对。更好的是,FlutterFire 反对新的 Firebase App Check 预览,所以 Flutter 开发者能够在第一天就利用它。

在工具方面,Flutter DevTools 提供了新的更新,用于优化应用程序的内存占用和提供程序包的新标签。对于 VS Code 和 Android Studio/IntelliJ 的 IDE 插件都有一些值得注意的更新,如果你是一个以 Flutter 为指标的内容作者,那么有一种全新的形式将 DartPad 整合到你的写作中。

最初但并非最不重要的是,有一个新的低代码的利用程序设计和建设工具称为 FlutterFlow,指标 Flutter 和运行在网络上,因为它自身是建设了 Flutter。

Flutter Favorite updates

作为这次公布的一部分,Flutter 生态系统委员会始终在致力认证 24 个新的 Flutter 最喜爱的软件包,咱们最大的扩大。最新标记的 Flutter 珍藏包含:

  • 正在生产中:cloud_firestore, cloud_functions, firebase_auth, firebase_core, firebase_crashlytics, firebase_messaging, and 及 firebase_storage
  • Flutter Community packages: android_alarm_manager_plus, android_intent_plus, battery_plus, connectivity_plus, device_info_plus, network_info_plus, package_info_plus, sensors_plus, and 及 share_plus
  • googleapis package
  • win32 package
  • intl and 及 characters packages
  • Sentry and sentry_flutter
  • infinite_scroll_pagination and flutter_native_splash packages

所有这些软件包都曾经迁徙到 null 安全性,并且在适当的状况下反对 Android、iOS 和 web。例如,firebase crashlytics 在 web 上没有底层的 SDK,Android alarm manager plus 是专门为 Android 设计的。

Flutter 社区“加上”包提供了一个超集相应的包从 Flutter 小组。例如,电池组在 Flutter 公布之前就曾经由 Google 的 Flutter 团队提供,并且曾经迁徙到了 null 安全性,然而只反对安卓和 iOS。另一方面,Flutter 社区电池 + 软件包反对所有六个 Flutter 平台,包含 web、Windows、macOS 和 Linux。颁奖的 Flutter 最喜爱的奖项所有 9 个“加”包代表了一个成熟的 Flutter 社区作为一个整体向前迈出了一大步。比 Google 的工程师团队要大得多。您应该尽快将代码迁徙到“附加”包,在将来几周内,Google 的相应包将进行更新,以举荐您这样做。

Googleapi 插件提供了大概 185 个主动生成的 Dart 包装器,用于客户端或服务器端的 Dart 应用程序(包含 Flutter 应用程序)。如果你想理解更多对于这个软件包,作者有一个对于应用 Google api 启动 Flutter 应用程序的 i/o 演讲。

Win32 包是一个工程奇观,它应用 Dart FFI 包装了大多数罕用的 Win32 API 调用,使它们能够被 Dart 代码拜访,而不须要 c 编译器或 Windows SDK。随着 Flutter 在 Windows 平台上的风行,win32 包曾经成为许多风行插件的要害依赖,包含最风行的门路提供者。作为一个完整性的测试,作者 timsneath 做了一些疯狂的事件,比方在原始的 Win32 中应用原始的 Dart 来实现记事本、snake 和俄罗斯方块。

俄罗斯方块运行在 Windows 上,只应用 Dart FFI 和 Win32 调用

Win32 包是相对值得查看,如果你做任何与 Dart 或扑在 Windows。

更新和 Firebase 应用程序查看

FlutterFire,Flutter 对 Firebase 的反对,是 Flutter 应用的最风行的插件汇合之一。转化酶曾经做了一个微小的工作,让它生产的 Flutter 2 开释,并持续改善它,从那时起。事实上,自从 FlutterFire 的初始生产版本公布以来,转化酶曾经缩小了 79% 的未解决问题,并且缩小了 88% 的未解决问题。此外,他们不仅在产品质量插件方面做得十分杰出,他们还将 beta 品质插件迁徙到了空安全性,并且让它们在同一外围上构建和运行,这样你就能够混合和匹配了。

此外,Invertase 还持续为 FlutterFire 插件减少新的性能,包含一些 Flutter 与 Cloud Firebase 整合的更新:

  • Typesafe API 空气污染指数 用于读写数据
  • 反对 Firebase 本地模拟器套件
  • 优化您的数据查问 data bundles 数据包

最初,但并非最不重要的是,FlutterFire 提供了对新 Firebase 产品 beta 版本的反对: Firebase App Check。防火基地应用程序查看爱护你的后端资源,如云存储,免受滥用,如帐单欺诈或网络钓鱼。应用 App Check,运行你 Flutter 利用的设施应用一个应用程序身份认证提供商来确认它的确是你的应用程序,并且可能查看它是否运行在一个实在的、未被篡改的设施上。一旦你激活应用程序查看,这个认证就会附加到你的应用程序对 Firebase 后端资源提出的每个申请上。要理解更多信息,请参阅 FlutterFire App Check 文档。

Flutter DevTools updates

随着这个版本的公布,Flutter DevTools 有了一些值得注意的更新,包含两个内存跟踪改良和一个全新的选项卡专门为提供者插件。

DevTools 版本中的第一个内存跟踪改良提供了跟踪对象调配地位的能力。这对于在代码中找到内存透露的地位十分不便。
Flutter DevTools memory tab allocation stack trace Flutter DevTools 内存选项卡调配堆栈跟踪

第二个是将自定义音讯注入内存时间轴的能力。这样你就能够为你的应用程序提供特定的标记,比方在你实现一些内存密集型的工作之前和之后,这样你就能够查看你是否正确地清理了货色。

自定义内存事件

随着 Flutter 应用程序越来越大,咱们将持续确保 Flutter 开发者领有他们须要的工具来跟踪和修复内存透露和各种运行时问题。

在应用 Flutter 框架时,你不仅要追踪运行时问题,有时你还要追踪与软件包相干的问题。在 pub.dev 上有超过 15,000 个 flutter 兼容的软件包和插件,随着应用程序应用更多的软件包,这种状况越来越有可能产生。因而,思考到这一点,咱们始终在尝试为 Flutter DevTools 增加一个新的 Provider 标签。实际上,这个选项卡是由提供程序包自身的作者 Remi Roussel 创立的(还有许多其余好货色)。如果你正在运行最新版本的 Flutter DevTools,并且正在调试一个应用提供者插件的 Flutter 应用程序,你将主动取得新的 Provider 标签。

“提供者”选项卡显示与每个提供者关联的数据,包含运行应用程序时的实时更改。如果这还不够惊人的话,它能够让你间接扭转数据,作为一种测试你的应用程序的角落状况的办法!

通过应用 Remi 的这个标签,咱们学到了一些对于如何更好地反对其余想要做同样事件的软件包作者的常识; 你能够浏览 Remi 如何构建 Provider 标签,以及咱们目前对于如何在 Flutter DevTools Plugins 提案中启用更多标签的想法。请给咱们您的反馈,并随时分割通知咱们您的打算,一个新的标签在 Flutter 开发工具。

This is only a few of the cool new things in Flutter DevTools in this release. For the complete list, check out the individual announcements here:

这只是 Flutter DevTools 在这个版本中的一些很酷的新货色。残缺的列表请点击这里查看集体申明:

  • Flutter DevTools 2.1 Release Notes 2.1 发行阐明
    https://groups.google.com/g/f…
  • Flutter DevTools 2.2.1 Release Notes 2.2.1 发行阐明
    https://groups.google.com/g/f…
  • Flutter DevTools 2.2.3 Release Notes 2.2.3 发行阐明
    https://groups.google.com/g/f…

IDE 插件更新

Visual Studio Code 和 IntelliJ/Android Studio IDE 扩大 for Flutter 在这个版本中也进行了更新。例如,visualstudio 代码扩大当初反对两个附加的 Dart 代码重构: 内联办法和内联局部变量。

在 Android Studio/IntelliJ 扩大中,咱们增加了将所有堆栈跟踪打印到控制台的性能。

这对于那些根本原因可能在不同包中的我的项目很有帮忙,因为以前没有打印这些包。咱们曾经有了一些想法,能够让这篇文章不那么简短,所以在将来寻找更多的扭转。

无关此版本的 IDE 扩大更改的残缺列表,请查看以下布告:

  • VS Code extension v3.21 VS Code 扩大 v3.21
    https://groups.google.com/g/f…
  • VS Code extension v3.22 VS Code 扩大 v3.22
    https://groups.google.com/g/f…
  • Flutter IntelliJ Plugin M55 Release 55 Release
    https://groups.google.com/g/f…
  • Flutter IntelliJ Plugin M56 Release 56 公布
    https://groups.google.com/g/f…

DartPad workshops

为了确保咱们在疾速倒退的 Flutter 开发者社区中筹备好文档,Dart 和 Flutter 团队总是在寻找改良和扩大创立教育内容的办法。随着这个版本的公布,咱们为 DartPad 增加了一个新的、逐渐的 UI,开发人员能够应用它来追随讲师领导的工作坊。

通过间接在 DartPad 中增加阐明,咱们为 i/o 提供了一种有领导的工作坊体验。然而,咱们不仅仅是为咱们本人的工作坊创立它; 如果您想在您的 Dart 或 Flutter 工作坊中应用它,您能够通过遵循 DartPad 工作坊创作指南来实现。除此之外,你还能够在 Gist 中应用 DartPad 来共享代码,并在你本人的站点中嵌入 DartPad,这曾经有一段时间了。

咱们心愿每个制作 Dart 和 Flutter 内容的人都可能为他们的用户提供丰盛的交互式体验。请尝试一下这个新性能,让咱们晓得你的想法!

社区聚光灯: FlutterFlow

FlutterFlow 是一个“低代码”利用程序设计和开发工具,用于在浏览器中构建应用程序。它提供了一个所见即所得的环境,能够应用 Firebase 的理论数据在多个页面上展现你的应用程序。低代码工具的指标是轻松地实现大多数常见事件,容许您编写尽可能少的行自定义代码。事实上,作为一个演示,他们在不到一个小时的工夫里创立了一个整体的多页面挪动应用程序,能够用零代码浏览大都会艺术博物馆。

FlutterFlow 输入 Flutter 代码,所以如果你须要增加代码来进一步定制你的应用程序,你能够。你能够在 FlutterFlow.io 上浏览 FlutterFlow 产品的公布。

https://flutterflow.io/blog/l…

Breaking Changes

判若两人,咱们致力缩小破坏性更改的数量,在这个版本中,咱们曾经可能限度它去除这些拥护意见:

  • 73750 删除已弃用的 BinaryMessages
  • 73751 删除已弃用的 TypeMatcher 类

您能够在 flutter.dev 上找到针对这些突发变动的缓解办法。

摘要

像平常一样,来自谷歌 Flutter 团队的所有人,咱们想说ーー谢谢。感激你成为社区的一部分,让这所有成为可能。随着超过八分之一的新应用程序在播放商店正在建设 Flutter 和超过 200,000 个 Flutter 应用程序在播放商店,咱们的持续增长是令人兴奋的。世界各地的各种规模的应用程序都委托他们的用户界面,飞翼工艺漂亮的多平台体验,以满足用户可能在任何中央。


© 猫哥

https://ducafecat.tech/

https://github.com/ducafecat

往期

开源

GetX Quick Start

https://github.com/ducafecat/…

新闻客户端

https://github.com/ducafecat/…

strapi 手册译文

https://getstrapi.cn

微信探讨群 ducafecat

系列汇合

译文

https://ducafecat.tech/catego…

开源我的项目

https://ducafecat.tech/catego…

Dart 编程语言根底

https://space.bilibili.com/40…

Flutter 零根底入门

https://space.bilibili.com/40…

Flutter 实战从零开始 新闻客户端

https://space.bilibili.com/40…

Flutter 组件开发

https://space.bilibili.com/40…

Flutter Bloc

https://space.bilibili.com/40…

Flutter Getx4

https://space.bilibili.com/40…

Docker Yapi

https://space.bilibili.com/40…

正文完
 0