<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>CrazyCodeBoy的技术博客官网</title>
    <description>关于移动端技术 | Android&amp;iOS Development Manager | 这里是 CrazyCodeBoy@CrazyCodeBoy 的个人博客,分享技术干货。</description>
    <link>http://localhost:4000/</link>
    <atom:link href="http://localhost:4000/feed.xml" rel="self" type="application/rss+xml" />
    <pubDate>Thu, 14 Mar 2024 00:28:20 +0800</pubDate>
    <lastBuildDate>Thu, 14 Mar 2024 00:28:20 +0800</lastBuildDate>
    <generator>Jekyll v4.0.0</generator>
    
      <item>
        <title>Flutter 3.16 新特性介绍</title>
        <description>&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/20231118/fluter.3.16.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Flutter 3.16 默认采用 Material 3 主题，Android 平台预览 Impeller，DevTools 扩展等等&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Flutter在每个季度通常都会有个稳定版本的发布。在2023 Q4的更新中为大家带来的是Flutter 3.16。这个版本将 Material 3 设为新的默认主题，并为 Android 带来了 Impeller 预览，支持为 DevTools 添加扩展等等！与此同时，我们在这个版本还可以看到Flutter Casual Games Toolkit 的重大更新。&lt;/p&gt;

&lt;p&gt;在距离上一个版本发布仅三个月的时间里，共有145 位社区成员合并了 928 个拉取请求，其中有 40 位社区成员首次贡献了他们的 Flutter 代码！&lt;/p&gt;

&lt;p&gt;接下来，就跟我一起继续阅读，了解 Flutter 社区为这个最新版本做出的所有新增和改进吧！&lt;/p&gt;

&lt;h2 id=&quot;框架&quot;&gt;框架&lt;/h2&gt;

&lt;h3 id=&quot;material-3-成为新的默认主题&quot;&gt;Material 3 成为新的默认主题&lt;/h3&gt;

&lt;p&gt;从 3.10 版本（2023 年 5 月）开始，Material 库已更新以符合最新的 Material Design 规范。更改包括新的组件和组件主题，以及更新的组件外观。在 3.16 版本之前，这些更改是“选择加入”的，使用 &lt;code class=&quot;highlighter-rouge&quot;&gt;useMaterial3&lt;/code&gt; 主题标志。从此版本开始，默认情况下 &lt;code class=&quot;highlighter-rouge&quot;&gt;useMaterial3&lt;/code&gt; 为 true。（&lt;a href=&quot;https://github.com/flutter/flutter/pull/130764&quot;&gt;#130764&lt;/a&gt;）&lt;/p&gt;

&lt;p&gt;您仍然可以通过在 &lt;code class=&quot;highlighter-rouge&quot;&gt;MaterialApp&lt;/code&gt; 主题中指定 &lt;code class=&quot;highlighter-rouge&quot;&gt;useMaterial3: false&lt;/code&gt; 来选择退出 Material 库的 M3 版本，但 Material 2 最终将被弃用和移除。此外，一些小部件不仅需要更新，还需要一个全新的实现。因此，当您看到它作为 Material 3 运行时，您的 UI 可能会显得有些奇怪。为了解决这个问题，请手动迁移到新的小部件，例如 &lt;a href=&quot;https://api.flutter.dev/flutter/material/NavigationBar-class.html&quot;&gt;NavigationBar&lt;/a&gt;。有关更多详细信息，请查看 GitHub 上的 &lt;a href=&quot;https://github.com/flutter/flutter/issues/91605&quot;&gt;Material 3 综合问题&lt;/a&gt;。&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://flutter.github.io/samples/material_3.html&quot;&gt;demo 应用&lt;/a&gt;允许您尝试所有组件。该演示支持切换 &lt;code class=&quot;highlighter-rouge&quot;&gt;useMaterial3&lt;/code&gt;，以便您可以比较这些更改。&lt;/p&gt;

&lt;p&gt;Material 3 组件的外观主要由 [&lt;code class=&quot;highlighter-rouge&quot;&gt;ThemeData.colorScheme&lt;/code&gt;] 和 [&lt;code class=&quot;highlighter-rouge&quot;&gt;ThemeData.textTheme&lt;/code&gt;] 的值确定。创建 Material 3 颜色方案的首选方法是使用 &lt;code class=&quot;highlighter-rouge&quot;&gt;ColorScheme.fromSeed()&lt;/code&gt;，该方法创建出既美观又符合辅助功能对比要求的暗色和亮色方案。您还可以使用 &lt;code class=&quot;highlighter-rouge&quot;&gt;ColorScheme.fromImageProvider&lt;/code&gt; 从图像的主导颜色创建颜色方案。要进一步自定义 Material 3 组件的外观，请向您的 &lt;code class=&quot;highlighter-rouge&quot;&gt;ThemeData&lt;/code&gt; 添加组件主题，例如 &lt;code class=&quot;highlighter-rouge&quot;&gt;ThemeData.segmentedButtonTheme&lt;/code&gt; 或 &lt;code class=&quot;highlighter-rouge&quot;&gt;ThemeData.snackBarTheme&lt;/code&gt;。非空的组件主题属性将覆盖组件 API 文档中指定的默认值。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/20231118/ede269ce86d511eebcd1acde48001122.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;支持-material-3-动效&quot;&gt;支持 Material 3 动效&lt;/h3&gt;

&lt;p&gt;Material 3 动效的改进包括添加了 &lt;code class=&quot;highlighter-rouge&quot;&gt;Easing&lt;/code&gt; 和 &lt;code class=&quot;highlighter-rouge&quot;&gt;Durations&lt;/code&gt; 类。Material 2 曲线已重命名，以包含“legacy”一词，并最终将被弃用和移除。(&lt;a href=&quot;https://github.com/flutter/flutter/pull/129942&quot;&gt;#129942&lt;/a&gt;)&lt;/p&gt;

&lt;h3 id=&quot;编辑菜单中的额外选项&quot;&gt;编辑菜单中的额外选项&lt;/h3&gt;

&lt;p&gt;在原生 iOS 上，用户现在可以选择文本并启动共享菜单，提供了几个标准服务。在此版本中，我们添加了查找、搜索和共享选项。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/20231118/ee08a6d486d511eebcd1acde48001122.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;textscaler-用于指定全局文本缩放因子&quot;&gt;TextScaler 用于指定全局文本缩放因子&lt;/h3&gt;

&lt;p&gt;为了支持 Android 14 的&lt;a href=&quot;https://blog.google/products/android/android-14/#:~:text=Also%2C%20you%20can%20improve%20readability,rate%20than%20smaller%20font%20size.&quot;&gt;非线性字体缩放功能&lt;/a&gt;，新的 &lt;code class=&quot;highlighter-rouge&quot;&gt;TextScaler&lt;/code&gt; 类替代了 &lt;code class=&quot;highlighter-rouge&quot;&gt;Text.textScaleFactor&lt;/code&gt; 属性。(&lt;a href=&quot;https://github.com/flutter/flutter/pull/128522&quot;&gt;#128522&lt;/a&gt;)&lt;/p&gt;

&lt;h3 id=&quot;selectionarea-更新&quot;&gt;SelectionArea 更新&lt;/h3&gt;

&lt;p&gt;Flutter 的 &lt;code class=&quot;highlighter-rouge&quot;&gt;SelectionArea&lt;/code&gt; 已更新以支持与鼠标单击或双击以及触摸设备上的长按相关的本机手势。这些新手势默认情况下可用于 &lt;code class=&quot;highlighter-rouge&quot;&gt;SelectionArea&lt;/code&gt; 和 &lt;code class=&quot;highlighter-rouge&quot;&gt;SelectableRegion&lt;/code&gt;。&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;单击：在单击位置设置折叠选择。&lt;/li&gt;
  &lt;li&gt;双击：选择单击位置的单词。&lt;/li&gt;
  &lt;li&gt;双击 + 拖动：在单词块中扩展选择。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/20231118/ee3bd0ea86d511eebcd1acde48001122.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;长按 + 拖动：在单词块中扩展选择。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/20231118/ee74f61886d511eebcd1acde48001122.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;在焦点小部件上运行的菜单项&quot;&gt;在焦点小部件上运行的菜单项&lt;/h3&gt;

&lt;p&gt;这个版本主要清理了在使用菜单项时的焦点更改：&lt;code class=&quot;highlighter-rouge&quot;&gt;FocusManager&lt;/code&gt; 的 &lt;code class=&quot;highlighter-rouge&quot;&gt;applyFocusChangesIfNeeded&lt;/code&gt; 函数现在在用户点击菜单项时恢复菜单焦点 — 当用户点击菜单项时，焦点已经返回到在打开菜单之前具有焦点的项目。 (&lt;a href=&quot;https://github.com/flutter/flutter/pull/130536&quot;&gt;#130536&lt;/a&gt;)&lt;/p&gt;

&lt;h3 id=&quot;iosmacos中菜单项快捷键的自动重新排序&quot;&gt;iOS、macOS中菜单项快捷键的自动重新排序&lt;/h3&gt;

&lt;p&gt;在Mac平台上，Flutter应用现在按照苹果人机界面指南对菜单中的快捷键进行排序。 (&lt;a href=&quot;https://github.com/flutter/flutter/pull/129309&quot;&gt;#129309&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/20231118/ee998bb886d511eebcd1acde48001122.png&quot; alt=&quot;&quot; /&gt;之前&lt;img src=&quot;https://www.devio.org/img/post/20231118/eebd0b7e86d511eebcd1acde48001122.png&quot; alt=&quot;&quot; /&gt;之后MatrixTransition动画&lt;/p&gt;

&lt;p&gt;一个新的 &lt;code class=&quot;highlighter-rouge&quot;&gt;MatrixTransition&lt;/code&gt; 小部件允许在创建动画过渡时进行变换。根据当前的动画值，您可以提供一个矩阵变换，应用于子小部件以创建像下面GIF中的效果一样的效果。 (&lt;a href=&quot;https://dartpad.dev/?channel=beta&amp;amp;id=c82be58209035722f2cc7d78da855329&quot;&gt;DartPad中的示例&lt;/a&gt;) (&lt;a href=&quot;https://github.com/flutter/flutter/pull/131084&quot;&gt;#131084&lt;/a&gt;)&lt;/p&gt;

&lt;h3 id=&quot;在flutter_test中添加了paintpattern&quot;&gt;在&lt;code class=&quot;highlighter-rouge&quot;&gt;flutter_test&lt;/code&gt;中添加了PaintPattern&lt;/h3&gt;

&lt;p&gt;在&lt;code class=&quot;highlighter-rouge&quot;&gt;flutter_test&lt;/code&gt;包中，新的 &lt;code class=&quot;highlighter-rouge&quot;&gt;PaintPattern&lt;/code&gt; 类允许您验证由小部件（如&lt;code class=&quot;highlighter-rouge&quot;&gt;CustomPainter&lt;/code&gt;和&lt;code class=&quot;highlighter-rouge&quot;&gt;Decoration&lt;/code&gt;）在单元测试中向画布发出的绘制调用。&lt;/p&gt;

&lt;p&gt;以前，需要一个golden文件来验证正确的颜色和矩形是否被绘制，但现在您可以使用 &lt;code class=&quot;highlighter-rouge&quot;&gt;PaintPattern&lt;/code&gt;。以下示例验证了 &lt;code class=&quot;highlighter-rouge&quot;&gt;MyWidget&lt;/code&gt; 在画布上绘制了一个圆：&lt;/p&gt;

&lt;div class=&quot;language-dart highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;expect&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;find&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;byType&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MyWidget&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;),&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;paints&lt;/span&gt;
    &lt;span class=&quot;o&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;circle&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;
      &lt;span class=&quot;nl&quot;&gt;x:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;nl&quot;&gt;y:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;nl&quot;&gt;radius:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;nl&quot;&gt;color:&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Color&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mh&quot;&gt;0xFFF44336&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;),&lt;/span&gt;
    &lt;span class=&quot;o&quot;&gt;),&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// Multiple paint calls can even be chained together.&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;expect&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;find&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;byType&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MyWidget&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;),&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;paints&lt;/span&gt;
    &lt;span class=&quot;o&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;circle&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;
      &lt;span class=&quot;nl&quot;&gt;x:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;nl&quot;&gt;y:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;nl&quot;&gt;radius:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;nl&quot;&gt;color:&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Color&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mh&quot;&gt;0xFFF44336&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;),&lt;/span&gt;
    &lt;span class=&quot;o&quot;&gt;),&lt;/span&gt;
    &lt;span class=&quot;o&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;
      &lt;span class=&quot;nl&quot;&gt;image:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;MyImage&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;nl&quot;&gt;x:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;nl&quot;&gt;y:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;o&quot;&gt;),&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;此API以前存在于框架测试文件中，我们注意到一些开发人员发现它非常有用，将其复制到了自己的项目中。如果这适用于您，升级到Flutter 3.16后，您可以从项目中删除该复制。&lt;/p&gt;

&lt;h3 id=&quot;滚动更新&quot;&gt;滚动更新&lt;/h3&gt;

&lt;p&gt;在Flutter 3.13首次发布了二维滚动基础之后，此版本带来了更多功能和优化。Flutter 3.16现在支持&lt;code class=&quot;highlighter-rouge&quot;&gt;KeepAlive&lt;/code&gt;小部件，以及默认焦点遍历和隐式滚动。基于该基础构建的二维滚动小部件将自动采用此支持。有关在二维基础上构建的详细指南，请参见&lt;a href=&quot;https://www.youtube.com/watch?v=ppEdTo-VGcg&quot;&gt;Flutter Build Show的最新一集&lt;/a&gt;。&lt;/p&gt;

&lt;p&gt;在3.13版本发布后不久，&lt;a href=&quot;https://pub.dev/packages/two_dimensional_scrollables&quot;&gt;two_dimensional_scrollables&lt;/a&gt;包发布了。这个包由Flutter团队维护，包含了构建在框架基础上的第一个二维滚动小部件 — &lt;code class=&quot;highlighter-rouge&quot;&gt;TableView&lt;/code&gt;。自初始发布以来，已添加了更多的装饰和样式支持，并进行了额外的错误修复。&lt;/p&gt;

&lt;h2 id=&quot;引擎&quot;&gt;引擎&lt;/h2&gt;

&lt;h3 id=&quot;impeller&quot;&gt;Impeller&lt;/h3&gt;

&lt;h4 id=&quot;android&quot;&gt;Android&lt;/h4&gt;

&lt;p&gt;在此版本中，我们很高兴地宣布Impeller在Android上已经准备好在稳定通道上进行预览反馈。从今年初以来，团队一直在为Impeller开发Vulkan后端，此预览版本包括收集关于Impeller在支持Vulkan的设备上的特性的反馈。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/20231118/eee9746686d511eebcd1acde48001122.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;这张图表展示了在Flutter Gallery过渡性能基准测试中，Impeller的Vulkan后端在过去一年中在99%、90%和平均帧光栅化时间上的改进，用户将观察到更少的卡顿和更高的稳定帧率。在这段时间的末尾，我们从Samsung S10设备切换到Pixel 7 Pro设备，这导致数字大幅下降。尽管如此，我们发现趋势和整体结果非常令人鼓舞。*Impeller尚未在不支持Vulkan的设备上表现良好。随着我们在未来几个月将Impeller的OpenGL后端完善到功能完备，我们计划在未来的稳定版本中也收集关于在这些设备上的Impeller特性的反馈。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Flutter开发者可以通过在&lt;code class=&quot;highlighter-rouge&quot;&gt;flutter run&lt;/code&gt;命令中添加&lt;code class=&quot;highlighter-rouge&quot;&gt;--enable-impeller&lt;/code&gt;标志，或在项目的&lt;code class=&quot;highlighter-rouge&quot;&gt;AndroidManifest.xml&lt;/code&gt;文件的``标签下添加以下设置，尝试在支持Vulkan的Android设备上使用Impeller：&lt;/p&gt;

&lt;p&gt;为了确定设备是否支持Vulkan，Impeller使用了在&lt;a href=&quot;https://github.com/flutter/engine/blob/main/impeller/docs/android.md#rendering-backend-selection&quot;&gt;Impeller仓库文档&lt;/a&gt;中讨论的测试。通常，Impeller在运行64位操作系统且Android API级别为29或更高的设备上使用Vulkan后端。用户还可以通过按照&lt;a href=&quot;https://docs.vulkan.org/guide/latest/checking_for_support.html#_android&quot;&gt;检查Vulkan支持&lt;/a&gt;中的建议来确定他们的设备是否支持Vulkan。&lt;/p&gt;

&lt;p&gt;尽管我们对Impeller的Vulkan后端取得的进展感到满意，但在预览期间存在一些已知问题：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;平台视图尚未实现，否则会执行相对较差的包含平台视图的帧。&lt;/li&gt;
  &lt;li&gt;自定义着色器尚未实现。&lt;/li&gt;
  &lt;li&gt;完整的&lt;a href=&quot;https://github.com/orgs/flutter/projects/21/views/1?filterQuery=-status%3A%22%E2%9C%85+Done%22+status%3A%22%F0%9F%90%9E+Bugs%22&quot;&gt;已知问题&lt;/a&gt;和&lt;a href=&quot;https://github.com/orgs/flutter/projects/21/views/11&quot;&gt;缺失功能&lt;/a&gt;列表，最新信息请参阅GitHub上Impeller的&lt;a href=&quot;https://github.com/orgs/flutter/projects/21&quot;&gt;项目板&lt;/a&gt;。许多问题已经在3.17 beta中得到修复，所以请也尝试一下。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;我们对在支持Vulkan的Android设备上尝试Impeller的忠实度、性能感到满意。然而，与iOS相比，Android硬件生态系统更加多样化，我们预计在iOS之前，在Android上会有一个较长的预览期。因此，有关Impeller最有帮助的反馈应包括有关出现问题的具体设备和Android版本的详细信息。&lt;/p&gt;

&lt;p&gt;此外，Impeller的Vulkan后端在“debug”构建中提供了比Skia更多的调试功能，并且这些功能具有额外的运行时开销。因此，关于Impeller性能的反馈必须来自于配置文件或发布构建，并且应包括来自DevTools的时间轴以及与同一设备上Skia后端的比较。最后，一如既往，我们非常感激包含一个小而可重现问题的测试用例的反馈。&lt;/p&gt;

&lt;h4 id=&quot;impeller性能忠实度和稳定性&quot;&gt;Impeller性能、忠实度和稳定性&lt;/h4&gt;

&lt;p&gt;除了关注Vulkan后端之外，从今年初开始，团队还对Impeller的文本性能进行了一些改进，这些改进对Android和iOS都有益。特别是，我们对Impeller的字形图集管理和文本工作负载在引擎的UI和光栅线程之间的分配方式进行了改进。因此，用户将在文本重负载中注意到更少的卡顿。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/20231118/ef0f1f2c86d511eebcd1acde48001122.png&quot; alt=&quot;&quot; /&gt;&lt;em&gt;这张图表显示了在iPhone 11上使用Impeller进行的我们的一个文本重负载基准测试中，99%、90%和平均帧光栅化时间在毫秒上的减少，特别是90%和平均帧光栅化时间几乎减半。&lt;/em&gt;团队还在为Android和iOS的忠实度和稳定性做出了努力，特别是用户报告的问题。在这个稳定版本周期的三个月里，团队为flutter/engine repo做出了209个与Impeller相关的提交，关闭了217个问题，其中包括42个用户报告的忠实度、稳定性或性能问题。&lt;/p&gt;

&lt;h4 id=&quot;引擎性能&quot;&gt;引擎性能&lt;/h4&gt;

&lt;p&gt;为了在具有异构多处理的移动设备上实现更好的性能，我们&lt;a href=&quot;https://github.com/flutter/engine/pull/45673&quot;&gt;修改了&lt;/a&gt;引擎，使对性能敏感的线程，如UI和光栅线程，与设备更强大的核心有关联。我们观察到这个改变在各种基准测试和设备上都产生了积极的影响。在某些情况下，改进效果显著，使99%或90%的帧时间减半或更好。我们预计用户在这个改变后，无论是在Android上使用Skia还是Impeller后端，都将注意到更少的卡顿。在iOS设备上效果较小，更强大和较弱的核心之间的差异较小。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/20231118/ef352bd686d511eebcd1acde48001122.png&quot; alt=&quot;&quot; /&gt;&lt;em&gt;这张图表显示了在几乎所有我们的Android基准测试和设备上，最差、99%、90%和平均帧构建和帧光栅化时间的改进。&lt;/em&gt;&lt;/p&gt;

&lt;h3 id=&quot;api和忠实度改进&quot;&gt;API和忠实度改进&lt;/h3&gt;

&lt;h4 id=&quot;impeller性能叠加&quot;&gt;Impeller性能叠加&lt;/h4&gt;

&lt;p&gt;在先前的版本中，Flutter的&lt;a href=&quot;https://docs.flutter.dev/perf/ui-performance#the-performance-overlay&quot;&gt;性能叠加&lt;/a&gt;功能在Impeller上未显示。此版本修复了这个问题。性能叠加&lt;a href=&quot;https://github.com/flutter/engine/pull/45259&quot;&gt;现在在启用Impeller的情况下正确显示&lt;/a&gt;。&lt;/p&gt;

&lt;h4 id=&quot;抖动现在正确显示&quot;&gt;抖动现在正确显示&lt;/h4&gt;

&lt;p&gt;在此版本中，&lt;code class=&quot;highlighter-rouge&quot;&gt;Paint.enableDithering&lt;/code&gt;属性被设置为true，并根据&lt;a href=&quot;https://docs.flutter.dev/release/compatibility-policy#deprecation-policy&quot;&gt;Flutter的弃用政策&lt;/a&gt;已被弃用。现在，默认启用抖动（不再支持开发者配置的抖动），您将不再看到带状问题。有关此更改的完整说明和迁移指南，请参阅docs.flutter.dev上的&lt;a href=&quot;https://docs.flutter.dev/release/breaking-changes/paint-enableDithering&quot;&gt;破坏性变更页面&lt;/a&gt;。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/20231118/ef595d1286d511eebcd1acde48001122.png&quot; alt=&quot;&quot; /&gt;之前&lt;img src=&quot;https://www.devio.org/img/post/20231118/ef7d9e9886d511eebcd1acde48001122.png&quot; alt=&quot;&quot; /&gt;之后游戏&lt;/p&gt;

&lt;h2 id=&quot;游戏&quot;&gt;游戏&lt;/h2&gt;

&lt;h3 id=&quot;flutter-games-toolkit&quot;&gt;Flutter Games Toolkit&lt;/h3&gt;

&lt;p&gt;在过去的几年里，我们看到了围绕休闲游戏开发的不断增长的社区。已经有数万款游戏使用Flutter发布，从简单但有趣的拼图到更复杂的街机游戏。其中一些我们喜欢的游戏包括Etermax的&lt;a href=&quot;https://triviacrack.com/&quot;&gt;Trivia Crack&lt;/a&gt;，Lotum的&lt;a href=&quot;https://flutter.dev/showcase/lotum&quot;&gt;4 Pics 1 Word&lt;/a&gt;（猜词游戏），Dong Digital的&lt;a href=&quot;https://play.google.com/store/apps/details?id=net.countrymania.brick&amp;amp;hl=en&quot;&gt;Brick Mania&lt;/a&gt;（街机游戏），Onrizon的&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.gartic.StopotS&amp;amp;hl=en&quot;&gt;StopotS&lt;/a&gt;（类别游戏），我们为I/O构建的&lt;a href=&quot;https://pinball.flutter.dev/&quot;&gt;复古弹球游戏&lt;/a&gt;以及在其社交和菜单屏幕中使用Flutter的&lt;a href=&quot;https://flutter.dev/showcase/pubg-mobile&quot;&gt;PUBG&lt;/a&gt;手机。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/20231118/f0163cca86d511eebcd1acde48001122.gif&quot; alt=&quot;&quot; /&gt;为了帮助游戏开发者更高效，Flutter今天推出了其&lt;a href=&quot;http://flutter.dev&quot;&gt;休闲游戏工具包的重大更新。&lt;/a&gt;这是一系列新资源，帮助您从概念到发布，包括更多特定于流派的模板，如卡片游戏、无尽奔跑游戏，以及Play Games Services、应用内购买、广告、成就、Crashlytics和多人支持等服务集成。要了解更多信息，请查看由Zoey Fan发布的游戏工具包启动帖。&lt;/p&gt;

&lt;h2 id=&quot;web&quot;&gt;Web&lt;/h2&gt;

&lt;h3 id=&quot;在chrome-devtools的flutter时间轴事件&quot;&gt;在Chrome DevTools的Flutter时间轴事件&lt;/h3&gt;

&lt;p&gt;Flutter时间轴事件现在在Chrome DevTools的性能面板中公开显示。 (&lt;a href=&quot;https://github.com/flutter/flutter/issues/130132&quot;&gt;#130132&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;要了解更多，请查看&lt;a href=&quot;https://docs.flutter.dev/perf/web-performance&quot;&gt;Web应用程序性能调试&lt;/a&gt;。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/20231118/f04d0ffc86d511eebcd1acde48001122.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;android-1&quot;&gt;Android&lt;/h2&gt;

&lt;h3 id=&quot;鼠标滚轮支持&quot;&gt;鼠标滚轮支持&lt;/h3&gt;

&lt;p&gt;在优化&lt;a href=&quot;/flutter/developing-flutter-apps-for-large-screens-53b7b0e17f10&quot;&gt;Wonderous以符合Android的大屏幕指南&lt;/a&gt;时，我们发现的一个问题是在平板电脑或可折叠设备上，鼠标滚轮的效果不佳。众所周知的是，用户必须移动滚轮相当多的距离才能使屏幕响应。&lt;/p&gt;

&lt;p&gt;通过此版本，在Flutter视图上使用鼠标滚轮滚动的速度与Android设备上的滚动速度匹配。 (&lt;a href=&quot;https://github.com/flutter/engine/pull/44724&quot;&gt;44724&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/20231118/f0eb1d4686d511eebcd1acde48001122.gif&quot; alt=&quot;&quot; /&gt;之前&lt;img src=&quot;https://www.devio.org/img/post/20231118/f143794686d511eebcd1acde48001122.gif&quot; alt=&quot;&quot; /&gt;之后预测性的后退导航&lt;/p&gt;

&lt;h2 id=&quot;ios&quot;&gt;iOS&lt;/h2&gt;

&lt;h3 id=&quot;app-extensions&quot;&gt;App extensions&lt;/h3&gt;

&lt;p&gt;Flutter现在可以用于定位一些&lt;a href=&quot;https://developer.apple.com/app-extensions/&quot;&gt;iOS应用扩展&lt;/a&gt;。这意味着您可以使用Flutter小部件为某些类型的iOS应用扩展绘制UI。这并不适用于所有类型的应用扩展，因为可能存在API（例如主屏幕小部件）或内存的限制。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/20231118/f169051286d511eebcd1acde48001122.png&quot; alt=&quot;&quot; /&gt;了解更多并查看有关如何定位共享扩展的示例，请访问docs.flutter.dev上的&lt;a href=&quot;https://docs.flutter.dev/platform-integration/ios/app-extensions&quot;&gt;添加iOS应用扩展&lt;/a&gt;。&lt;/p&gt;

&lt;h2 id=&quot;包生态系统&quot;&gt;包生态系统&lt;/h2&gt;

&lt;h3 id=&quot;新的flutter收藏夹&quot;&gt;新的Flutter收藏夹&lt;/h3&gt;

&lt;p&gt;我们重新启动了&lt;a href=&quot;https://docs.flutter.dev/packages-and-plugins/favorites&quot;&gt;Flutter收藏夹&lt;/a&gt;计划！在此周期内，Flutter生态系统委员会指定了&lt;a href=&quot;https://pub.dev/packages/flame&quot;&gt;flame&lt;/a&gt;、&lt;a href=&quot;https://pub.dev/packages/flutter_animate&quot;&gt;flutter_animate&lt;/a&gt;、&lt;a href=&quot;https://pub.dev/packages/flutter_rust_bridge&quot;&gt;flutter_rust_bridge&lt;/a&gt;、&lt;a href=&quot;https://pub.dev/packages/riverpod&quot;&gt;riverpod&lt;/a&gt;、&lt;a href=&quot;https://pub.dev/packages/video_player&quot;&gt;video_player&lt;/a&gt;、&lt;a href=&quot;https://pub.dev/packages/macos_ui&quot;&gt;macos_ui&lt;/a&gt;和&lt;a href=&quot;https://pub.dev/packages/fpdart&quot;&gt;fpdart&lt;/a&gt;等包为新的Flutter收藏夹。祝贺所有获选者！&lt;/p&gt;

&lt;p&gt;请期待将来的新的Flutter收藏夹。要提名包或插件作为潜在的未来Flutter收藏夹，或将任何其他问题带到委员会的注意，请发送电子邮件至。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/20231118/f18c559486d511eebcd1acde48001122.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;首次包生态系统虚拟峰会&quot;&gt;首次包生态系统虚拟峰会&lt;/h3&gt;

&lt;p&gt;在8月，我们举办了第一次虚拟峰会，参与者包括50多名&lt;a href=&quot;https://pub.dev&quot;&gt;pub.dev&lt;/a&gt;的非Google和Google贡献者。目标是在非正式的会议中将贡献者聚集起来，计划、教育、学习和分享。在后续调查中，对活动的满意度达到了100%。我们计划与社区合作，在将来的包生态系统活动（线下和线上）中推出类似的活动。在即将发布的包生态系统更新博客文章中了解更多信息。&lt;/p&gt;

&lt;h3 id=&quot;基于云的google地图样式&quot;&gt;基于云的Google地图样式&lt;/h3&gt;

&lt;p&gt;Google Maps平台提供了从Google Cloud控制台的Map Styles页面自定义地图样式的能力。这使您可以在每次进行样式更改时，无需更新应用代码，创建自定义体验。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/20231118/f1c4f18886d511eebcd1acde48001122.png&quot; alt=&quot;&quot; /&gt;要在Flutter中使用此功能，您只需使用控制台中设置的Map ID引用您的地图：&lt;/p&gt;

&lt;div class=&quot;language-dart highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;GoogleMap&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;
        &lt;span class=&quot;nl&quot;&gt;onMapCreated:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_onMapCreated&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;nl&quot;&gt;initialCameraPosition:&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;CameraPosition&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;
          &lt;span class=&quot;nl&quot;&gt;target:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_kMapCenter&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
          &lt;span class=&quot;nl&quot;&gt;zoom:&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;7.0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;o&quot;&gt;),&lt;/span&gt;
        &lt;span class=&quot;nl&quot;&gt;key:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_key&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;nl&quot;&gt;cloudMapId:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_mapId&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;摄像头-x-改进&quot;&gt;摄像头 X 改进&lt;/h3&gt;

&lt;p&gt;在3.10稳定版本中，我们为Flutter相机插件添加了对Camera X的初步支持。&lt;a href=&quot;https://developer.android.com/training/camerax&quot;&gt;Camera X&lt;/a&gt;是一个Jetpack库，简化了将丰富的相机功能添加到Android应用程序的过程。&lt;/p&gt;

&lt;p&gt;通过此发布，我们已添加了任何使用相机的应用程序所需的大多数功能。CameraX解决了插件的Camera 2实现存在的许多问题。&lt;/p&gt;

&lt;p&gt;我们鼓励您使用CameraX插件。要选择加入，请在pubspec.yaml文件中添加以下行。&lt;/p&gt;

&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;Dependencies&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;camera&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;^0.10.4&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# 或尝试最新的相机版本 camera_android_camerax: ^0.5.0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;我们期待着您的反馈，因为我们计划在将来的发布中将CameraX作为默认实现。&lt;/p&gt;

&lt;h3 id=&quot;macos视频播放器&quot;&gt;macOS视频播放器&lt;/h3&gt;

&lt;p&gt;我们已将&lt;a href=&quot;https://pub.dev/packages/video_player&quot;&gt;视频播放器插件&lt;/a&gt;添加到macOS支持，允许开发人员在小部件表面上播放视频。&lt;/p&gt;

&lt;p&gt;要了解更多信息，请查看&lt;a href=&quot;http://pub.dev&quot;&gt;pub.dev&lt;/a&gt;上的&lt;a href=&quot;https://pub.dev/packages/video_player&quot;&gt;视频播放器插件&lt;/a&gt;。&lt;/p&gt;

&lt;h2 id=&quot;devtools&quot;&gt;DevTools&lt;/h2&gt;

&lt;h3 id=&quot;devtools扩展&quot;&gt;DevTools扩展&lt;/h3&gt;

&lt;p&gt;新的&lt;a href=&quot;https://pub.dev/packages/devtools_extensions&quot;&gt;DevTools扩展框架&lt;/a&gt;使以下内容成为可能：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;包作者可以为其包构建自定义工具，这些工具直接在DevTools中显示。&lt;/li&gt;
  &lt;li&gt;包作者可以编写利用DevTools中的现有框架和实用程序的强大工具。&lt;/li&gt;
  &lt;li&gt;在使用DevTools调试应用程序的Dart和Flutter开发人员可以访问特定于其用例的工具（由其应用程序的依赖项确定，并提供DevTools扩展的依赖项）。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;感谢&lt;a href=&quot;https://pub.dev/packages/provider&quot;&gt;Provider&lt;/a&gt;、&lt;a href=&quot;https://pub.dev/packages/drift&quot;&gt;Drift&lt;/a&gt;和&lt;a href=&quot;https://pub.dev/packages/patrol&quot;&gt;Patrol&lt;/a&gt;的包作者，这个生态系统已经在建设中，您今天就可以使用这些包的DevTools扩展！&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/20231118/f1f5876c86d511eebcd1acde48001122.png&quot; alt=&quot;&quot; /&gt;Provider&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/20231118/f22108f686d511eebcd1acde48001122.png&quot; alt=&quot;&quot; /&gt;Patrol&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/20231118/f248398086d511eebcd1acde48001122.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Drift深入了解DevTools扩展，请查看Kenzie Davisson的Dart和Flutter DevTools扩展公告。&lt;/p&gt;

&lt;h3 id=&quot;devtools更新&quot;&gt;DevTools更新&lt;/h3&gt;

&lt;p&gt;此发布的DevTools的一些亮点包括：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;增加了对DevTools扩展的支持&lt;/li&gt;
  &lt;li&gt;增加了一个新的“主页”屏幕，显示您连接的应用程序的摘要。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/20231118/f26c4dd486d511eebcd1acde48001122.png&quot; alt=&quot;&quot; /&gt;其他改进还包括：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;总体性能&lt;/li&gt;
  &lt;li&gt;热重新启动的健壮性&lt;/li&gt;
  &lt;li&gt;文本选择和复制行为&lt;/li&gt;
  &lt;li&gt;网络分析器响应查看器的优化&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;要了解更多信息，请查看DevTools的发布说明&lt;a href=&quot;https://docs.flutter.dev/tools/devtools/release-notes/release-notes-2.26.1&quot;&gt;2.26.1&lt;/a&gt;、&lt;a href=&quot;https://docs.flutter.dev/tools/devtools/release-notes/release-notes-2.27.0&quot;&gt;2.27.0&lt;/a&gt;和&lt;a href=&quot;https://docs.flutter.dev/tools/devtools/release-notes/release-notes-2.28.1&quot;&gt;2.28.1&lt;/a&gt;。&lt;/p&gt;

&lt;h3 id=&quot;vs-code-ui可发现性&quot;&gt;VS Code UI可发现性&lt;/h3&gt;

&lt;p&gt;由于Flutter社区成员&lt;a href=&quot;https://github.com/DanTup&quot;&gt;DanTup&lt;/a&gt;的出色工作，Flutter VS Code扩展现在具有Flutter侧边栏，可轻松访问：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;打开Flutter DevTools屏幕&lt;/li&gt;
  &lt;li&gt;查看活动调试会话&lt;/li&gt;
  &lt;li&gt;查看可用设备&lt;/li&gt;
  &lt;li&gt;创建新项目&lt;/li&gt;
  &lt;li&gt;热重载和重启&lt;/li&gt;
  &lt;li&gt;运行Flutter Doctor -v&lt;/li&gt;
  &lt;li&gt;等等&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/20231118/f292ed2286d511eebcd1acde48001122.jpeg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;弃用和重大更改&quot;&gt;弃用和重大更改&lt;/h2&gt;

&lt;h3 id=&quot;弃用和重大更改-1&quot;&gt;弃用和重大更改&lt;/h3&gt;

&lt;p&gt;此版本中的重大更改包括在v3.13发布后过期的已弃用API。要查看所有受影响的API以及其他上下文和迁移指南，请参阅&lt;a href=&quot;https://docs.flutter.dev/release/breaking-changes/3-13-deprecations&quot;&gt;此版本的弃用指南&lt;/a&gt;。其中许多都受到&lt;a href=&quot;https://docs.flutter.dev/development/tools/flutter-fix&quot;&gt;Flutter修复&lt;/a&gt;的支持，包括IDE中的快速修复。可以使用&lt;code class=&quot;highlighter-rouge&quot;&gt;dart fix&lt;/code&gt;命令评估和应用批量修复。&lt;/p&gt;

&lt;p&gt;一如既往，感谢社区为&lt;a href=&quot;https://github.com/flutter/tests/blob/master/README.md&quot;&gt;贡献测试&lt;/a&gt; — 这有助于我们识别这些重大更改。要了解更多信息，请查看&lt;a href=&quot;https://github.com/flutter/flutter/wiki/Tree-hygiene#handling-breaking-changes&quot;&gt;Flutter的重大更改政策&lt;/a&gt;。&lt;/p&gt;

&lt;p&gt;在我们的下一个发布版本中，我们计划将弃用策略扩展到&lt;code class=&quot;highlighter-rouge&quot;&gt;flutter_driver&lt;/code&gt;包，除了已支持的&lt;code class=&quot;highlighter-rouge&quot;&gt;flutter&lt;/code&gt;和&lt;code class=&quot;highlighter-rouge&quot;&gt;flutter_test&lt;/code&gt;包。&lt;/p&gt;

&lt;h2 id=&quot;最后&quot;&gt;最后&lt;/h2&gt;

&lt;p&gt;要查看此版本中包含的所有PRs，请查看发布说明和更改日志：https://docs.flutter.dev/release/release-notes。&lt;/p&gt;

&lt;p&gt;Flutter 3.16已发布到稳定通道上，并包括Dart 3.2。&lt;/p&gt;

&lt;p&gt;小伙伴们如果想抢先体验Flutter 3.16的新特性，只需运行&lt;code class=&quot;highlighter-rouge&quot;&gt;flutter upgrade&lt;/code&gt;即可。&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;就让我们在Flutter精彩课程中再见吧！&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://u.cboy.me/ss/u?cid=672&amp;amp;aid=9&amp;amp;platform=devio&quot;&gt;ChatGPT + Flutter快速开发多端聊天机器人App&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://api.devio.org/ss/u?cid=487&amp;amp;aid=9&amp;amp;platform=devio&quot;&gt;Flutter高级进阶实战 仿哔哩哔哩APP&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://api.devio.org/ss/u?cid=741&amp;amp;aid=9&amp;amp;platform=devio&quot;&gt;全新Flutter从入门到进阶，实战仿携程网App&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Sat, 18 Nov 2023 00:00:00 +0800</pubDate>
        <link>http://localhost:4000/2023/11/18/whats-new-in-flutter-3-16/</link>
        <guid isPermaLink="true">http://localhost:4000/2023/11/18/whats-new-in-flutter-3-16/</guid>
        
        <category>Flutter更新</category>
        
        <category>Flutter 3.16</category>
        
        
      </item>
    
      <item>
        <title>一个功能强大的Flutter开源聊天列表插件</title>
        <description>&lt;p&gt;&lt;a href=&quot;https://github.com/crazycodeboy/flutter_im_list&quot;&gt; &lt;img src=&quot;https://img.shields.io/badge/English-feb252.svg&quot; alt=&quot;English&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;https://pub.dartlang.org/packages/flutter_im_list&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Download-ff69b4.svg&quot; alt=&quot;Download&quot; /&gt; &lt;/a&gt;
&lt;a href=&quot;https://github.com/crazycodeboy/flutter_im_list/pulls&quot;&gt; &lt;img src=&quot;https://img.shields.io/badge/PRs-Welcome-brightgreen.svg&quot; alt=&quot;PRs Welcome&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;https://github.com/crazycodeboy/flutter_im_list/releases&quot;&gt; &lt;img src=&quot;https://img.shields.io/github/release/crazycodeboy/flutter_im_list.svg?maxAge=2592000?style=flat-square&quot; alt=&quot;flutter_im_list release&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;https://raw.githubusercontent.com/crazycodeboy/flutter_im_list/master/LICENSE&quot;&gt;&lt;img src=&quot;http://img.shields.io/badge/license-MIT-orange.svg?style=flat&quot; alt=&quot;License MIT&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/crazycodeboy/flutter_im_list&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;flutter_im_list&lt;/code&gt;&lt;/a&gt;是一款高性能、轻量级的Flutter聊天列表插件。可以帮助你快速创建出类微信的聊天列表的效果。&lt;/p&gt;

&lt;h2 id=&quot;目录&quot;&gt;目录&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;#预览图&quot;&gt;预览图&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#示例&quot;&gt;示例&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://coding.imooc.com/class/672.html&quot;&gt;视频教程&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#如何使用&quot;&gt;如何使用&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#api&quot;&gt;API&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;预览图&quot;&gt;预览图&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;整体&lt;/th&gt;
      &lt;th&gt;长按&lt;/th&gt;
      &lt;th&gt;输入中&lt;/th&gt;
      &lt;th&gt;动图&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;img src=&quot;https://raw.githubusercontent.com/crazycodeboy/flutter_im_list/master/example/Screenshots/1.pic.jpg&quot; alt=&quot;flutter_im_list&quot; /&gt;&lt;/td&gt;
      &lt;td&gt;&lt;img src=&quot;https://raw.githubusercontent.com/crazycodeboy/flutter_im_list/master/example/Screenshots/2.pic.jpg&quot; alt=&quot;flutter_im_list&quot; /&gt;&lt;/td&gt;
      &lt;td&gt;&lt;img src=&quot;https://raw.githubusercontent.com/crazycodeboy/flutter_im_list/master/example/Screenshots/3.pic.jpg&quot; alt=&quot;flutter_im_list&quot; /&gt;&lt;/td&gt;
      &lt;td&gt;&lt;img src=&quot;https://raw.githubusercontent.com/crazycodeboy/flutter_im_list/master/example/Screenshots/4.gif&quot; alt=&quot;flutter_im_list&quot; /&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;示例&quot;&gt;示例&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/crazycodeboy/flutter_im_list/tree/master/example&quot;&gt;Examples&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;视频教程&quot;&gt;&lt;a href=&quot;https://coding.imooc.com/class/672.html&quot;&gt;视频教程&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;欢迎通过&lt;a href=&quot;https://coding.imooc.com/class/672.html&quot;&gt;视频教程&lt;/a&gt;学习交流。&lt;/p&gt;

&lt;h2 id=&quot;如何使用&quot;&gt;如何使用&lt;/h2&gt;

&lt;h3 id=&quot;第一步添加依赖&quot;&gt;第一步添加依赖&lt;/h3&gt;

&lt;p&gt;在项目根目录下运行：&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;flutter pub add flutter_im_list
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h3 id=&quot;第二步初始化chatcontroller&quot;&gt;第二步：初始化ChatController&lt;/h3&gt;

&lt;div class=&quot;language-dart highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nd&quot;&gt;@override&lt;/span&gt;
&lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;initState&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;super&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;initState&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;();&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;chatController&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ChatController&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;initialMessageList:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_messageList&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;timePellet:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;60&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;scrollController:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ScrollController&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;());&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;第三步在布局中添加chatlist&quot;&gt;第三步：在布局中添加ChatList&lt;/h3&gt;

&lt;div class=&quot;language-dart highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;  &lt;span class=&quot;nd&quot;&gt;@override&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;Widget&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;build&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;BuildContext&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;context&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Scaffold&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;
        &lt;span class=&quot;nl&quot;&gt;appBar:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;AppBar&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;
          &lt;span class=&quot;nl&quot;&gt;title:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Text&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;widget&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;title&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;),&lt;/span&gt;
        &lt;span class=&quot;o&quot;&gt;),&lt;/span&gt;
        &lt;span class=&quot;nl&quot;&gt;body:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ChatList&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;
          &lt;span class=&quot;nl&quot;&gt;chatController:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;chatController&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;o&quot;&gt;));&lt;/span&gt;
  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;第四步设置初始化数据&quot;&gt;第四步：设置初始化数据&lt;/h3&gt;

&lt;div class=&quot;language-dart highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;final&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MessageModel&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_messageList&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;MessageModel&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;id:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;content:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;介绍下《ChatGPT + Flutter快速开发多端聊天机器人App》&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;ownerType:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;OwnerType&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;sender&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;createdAt:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1696142392000&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;avatar:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'https://o.devio.org/images/o_as/avatar/tx18.jpeg'&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;ownerName:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;Jack&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;),&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;MessageModel&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;id:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;content:&lt;/span&gt;
        &lt;span class=&quot;s&quot;&gt;&quot;当前ChatGPT应用如雨后春笋般应运而生，给移动端开发者也带来了极大的机会。本课程将整合ChatGPT与Flutter高级技术，手把手带你从0到1开发一款可运行在多端的聊天机器人App，帮助你抓住机遇，快速具备AI运用能力，成为移动端领域的AI高手。@https://coding.imooc.com/class/672.html&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;ownerType:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;OwnerType&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;receiver&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;createdAt:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1696142393000&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;avatar:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'https://o.devio.org/images/o_as/avatar/tx2.jpeg'&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;ownerName:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;ChatGPT&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;),&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;如果没有，可以将_messageList赋值为[]。&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;了解更多请查看&lt;a href=&quot;https://coding.imooc.com/class/672.html&quot;&gt;视频教程&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;api&quot;&gt;API&lt;/h2&gt;

&lt;h3 id=&quot;ichatcontroller&quot;&gt;IChatController&lt;/h3&gt;
&lt;div class=&quot;language-dart highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;abstract&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;IChatController&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;c1&quot;&gt;/// 在列表中添加消息&lt;/span&gt;
  &lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;addMessage&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MessageModel&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;c1&quot;&gt;/// 在列表中删除消息&lt;/span&gt;
  &lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;deleteMessage&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MessageModel&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;c1&quot;&gt;/// 批量添加消息（适用于下来加载更多的场景）&lt;/span&gt;
  &lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;loadMoreData&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MessageModel&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;messageList&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;chatcontroller&quot;&gt;ChatController&lt;/h3&gt;

&lt;div class=&quot;language-dart highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;ChatController&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;implements&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;IChatController&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;c1&quot;&gt;/// 列表的初始化数据可以为[]&lt;/span&gt;
  &lt;span class=&quot;kd&quot;&gt;final&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MessageModel&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;initialMessageList&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;kd&quot;&gt;final&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ScrollController&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;scrollController&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;c1&quot;&gt;///支持提供一个MessageWidgetBuilder来自定义气泡样式&lt;/span&gt;
  &lt;span class=&quot;kd&quot;&gt;final&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;MessageWidgetBuilder&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;messageWidgetBuilder&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;c1&quot;&gt;///设置显示的时间分组的间隔，单位秒&lt;/span&gt;
  &lt;span class=&quot;kd&quot;&gt;final&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;timePellet&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pelletShow&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;[];&lt;/span&gt;

  &lt;span class=&quot;n&quot;&gt;ChatController&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;({&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;required&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;initialMessageList&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;required&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;scrollController&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;required&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;timePellet&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;messageWidgetBuilder&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;})&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;message&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;initialMessageList&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;reversed&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;n&quot;&gt;inflateMessage&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;chatlist&quot;&gt;ChatList&lt;/h3&gt;

&lt;div class=&quot;language-dart highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;ChatList&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;StatefulWidget&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;c1&quot;&gt;/// ChatList的控制器&lt;/span&gt;
  &lt;span class=&quot;kd&quot;&gt;final&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ChatController&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;chatController&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;c1&quot;&gt;/// 插入子项的空间大小&lt;/span&gt;
  &lt;span class=&quot;kd&quot;&gt;final&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;EdgeInsetsGeometry&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;padding&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;c1&quot;&gt;/// 气泡点击事件&lt;/span&gt;
  &lt;span class=&quot;kd&quot;&gt;final&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;OnBubbleClick&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;onBubbleTap&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;c1&quot;&gt;/// 奇葩长按事件&lt;/span&gt;
  &lt;span class=&quot;kd&quot;&gt;final&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;OnBubbleClick&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;onBubbleLongPress&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;c1&quot;&gt;/// 文本选择回调&lt;/span&gt;
  &lt;span class=&quot;kd&quot;&gt;final&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;HiSelectionArea&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;hiSelectionArea&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ChatList&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;
      &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;super&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;key&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;n&quot;&gt;required&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;chatController&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;padding&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;onBubbleTap&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;onBubbleLongPress&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;hiSelectionArea&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;});&lt;/span&gt;

  &lt;span class=&quot;nd&quot;&gt;@override&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;State&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ChatList&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;createState&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_ChatListState&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;();&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;了解更多请查看&lt;a href=&quot;https://coding.imooc.com/class/672.html&quot;&gt;视频教程&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;contribution&quot;&gt;Contribution&lt;/h2&gt;

&lt;p&gt;欢迎在&lt;a href=&quot;https://github.com/crazycodeboy/flutter_im_list/issues&quot;&gt;issues&lt;/a&gt;上报告问题。请附上bug截图和代码片段。解决问题的最快方法是在示例中重现它。&lt;/p&gt;

&lt;p&gt;欢迎提交拉取请求。如果您想更改API或执行重大操作，最好先创建一个问题并进行讨论。&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/crazycodeboy/flutter_im_list/blob/master/LICENSE&quot;&gt;MIT Licensed&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
</description>
        <pubDate>Sun, 22 Oct 2023 00:00:00 +0800</pubDate>
        <link>http://localhost:4000/2023/10/22/flutter-im-list/</link>
        <guid isPermaLink="true">http://localhost:4000/2023/10/22/flutter-im-list/</guid>
        
        <category>Flutter</category>
        
        
      </item>
    
      <item>
        <title>万字长文，为你送上全网最全Flutter学习资料！</title>
        <description>&lt;blockquote&gt;
  &lt;p&gt;话不多说直接上目录，干货较多内容很长，建议先收藏供以后慢慢查阅。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;目录&quot;&gt;目录&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;#文章&quot;&gt;文章&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#视频&quot;&gt;视频&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#组件&quot;&gt;组件&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#导航&quot;&gt;导航&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#模板&quot;&gt;模板&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#插件&quot;&gt;插件&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#框架&quot;&gt;框架&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#实验性&quot;&gt;实验性&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#游戏&quot;&gt;游戏&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#开源app&quot;&gt;开源App&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#实用工具&quot;&gt;实用工具&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#社区&quot;&gt;社区&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#书籍&quot;&gt;书籍&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#福利&quot;&gt;福利&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;文章&quot;&gt;文章&lt;/h2&gt;

&lt;h3 id=&quot;介绍&quot;&gt;介绍&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://medium.com/flutter-io/building-beautiful-flexible-user-interfaces-with-flutter-material-theming-and-official-material-13ae9279ef19&quot;&gt;Google IO 2018&lt;/a&gt; [1.1K👏] - 构建美观，灵活的用户界面。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://speakerdeck.com/hjjunior/why-i-chose-flutter&quot;&gt;Presentation&lt;/a&gt; - 为什么我会选择Flutter 由&lt;a href=&quot;https://github.com/hjJunior&quot;&gt;Helio S. Junior&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://medium.com/flutter-community/ins-and-outs-of-flutter-web-7a82721dc19a&quot;&gt;Flutter Web&lt;/a&gt;  - Flutter Web的来龙去脉 by &lt;a href=&quot;https://nash0x7e2.github.io/&quot;&gt;Nash&lt;/a&gt;提供.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;网站博客&quot;&gt;网站/博客&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.devio.org/tags/#Flutter&quot;&gt;Flutter技术专栏&lt;/a&gt;&lt;img src=&quot;http://www.devio.org/img/ico/ico_new.gif&quot; alt=&quot; new&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://didierboelens.com&quot;&gt;Welcome to Flutter&lt;/a&gt; - 英文和法文博客，致力于为Ditter Boelens提出的有关Flutter的最常见问题提供实用的解决方案。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://marcinszalek.pl/&quot;&gt;SZAŁKO-BLOG&lt;/a&gt; - 渐进式高级设计，由&lt;a href=&quot;https://marcinszalek.pl/&quot;&gt;Marcin Szalek&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://flutterbyexample.com/&quot;&gt;Flutter by Example&lt;/a&gt; - 基于Redux，Firebase，自定义动画和UI的教程。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://flutter.institute/&quot;&gt;Flutter Institute&lt;/a&gt; - 非常原创的内容和教程，由 &lt;a href=&quot;https://twitter.com/flutterinst&quot;&gt;Brian Armstrong&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://iirokrankka.com/&quot;&gt;Iirokrankka.com&lt;/a&gt; - 关于Flutter，Dart和任何相关的文章和教程，由&lt;a href=&quot;https://twitter.com/koorankka&quot;&gt;Iiro Krankka&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://medium.com/@norbertkozsir&quot;&gt;Norbert&lt;/a&gt; - 深度文章、特色与应用创建，由 &lt;a href=&quot;https://github.com/Norbert515&quot;&gt;Norbert515&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://medium.com/@diegoveloper&quot;&gt;Flutter Tips&lt;/a&gt; - 开发中的文章，提示和技巧 由&lt;a href=&quot;https://twitter.com/diegoveloper&quot;&gt;Diego Velásquez&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.filledstacks.com/&quot;&gt;FilledStacks&lt;/a&gt; - 开发教程和指南 by &lt;a href=&quot;https://www.instagram.com/filledstacks/&quot;&gt;Dane Mackier&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/erluxman/awesomefluttertips/&quot;&gt;Awesome Flutter tips&lt;/a&gt; - 由 &lt;a href=&quot;https://twitter.com/erluxman/&quot;&gt;erluxman&lt;/a&gt; 提供的帮助开发人员提高生产力的提示。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;教程&quot;&gt;教程&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://u.cboy.me/ss/u?cid=672&amp;amp;aid=8&amp;amp;platform=devio&quot;&gt;ChatGPT + Flutter快速开发多端聊天机器人App&lt;/a&gt; - 整合ChatGPT与Flutter高级技术，手把手带你从0到1开发一款可运行在多端的聊天机器人App，帮助你抓住机遇，快速具备AI运用能力，成为移动端领域的AI高手&lt;img src=&quot;http://www.devio.org/img/ico/ico_new.gif&quot; alt=&quot;new&quot; /&gt;。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://api.devio.org/ss/u?cid=487&amp;amp;aid=3&amp;amp;platform=github&quot;&gt;Flutter高级进阶实战 仿哔哩哔哩APP&lt;/a&gt; - 一次性深度掌握Flutter高阶技能+商业级复杂项目架构设计与开发方案&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://api.devio.org/ss/u?cid=741&amp;amp;aid=3&amp;amp;platform=github&quot;&gt;Flutter从入门到进阶&lt;/a&gt; - 解锁Flutter开发新姿势，一网打尽Flutter核心技术。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.imooc.com/article/334835&quot;&gt;Flutter 3.7更新详解&lt;/a&gt; - 全局文本选择、Impeller 渲染速度、DevTools，为开发者们带来一个更好用的 Flutter 3.7！&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.devio.org/2022/11/06/whats-new-in-flutter-3-3/&quot;&gt;Flutter 3.3更新详解&lt;/a&gt; - 文字处理、性能提升和其他改进和更新，为开发者们带来一个更好用的 Flutter 3.3！&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.imooc.com/article/325757&quot;&gt;Flutter 3更新详解&lt;/a&gt; - 深入了解最新版本，包括 macOS 和 Linux 平台的稳定支持、多项性能改进等！&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.imooc.com/article/323459&quot;&gt;一文掌握Flutter 2.10新特性&lt;/a&gt; - Flutter 2.10 包括 Flutter 对 Windows ⽀持的重⼤更新、⼏项重⼤的性能改进、框架中图标和颜⾊的新⽀持以及一些⼯具改进等。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.imooc.com/article/324225&quot;&gt;Flutter for Windows桌面端稳定版发布&lt;/a&gt; - 它使 Windows 开发者也能享受到移动开发的相同生产力和功能。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.imooc.com/article/324225&quot;&gt;Flutter 2.8 更新特性一览&lt;/a&gt; - Flutter 2.8正式版重磅发布，还不来看看？&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.imooc.com/article/315453&quot;&gt;Flutter2重磅发布支持Web和桌面应用&lt;/a&gt; - Flutter正式迎来了它的的第二个大版本，增加了对桌面和Web 应用程序的支持。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.imooc.com/article/281683&quot;&gt;革命性移动端开发框架-Flutter时间简史&lt;/a&gt; - 一文读懂Flutter前世今生。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://codelabs.developers.google.com/codelabs/flutter/#0&quot;&gt;Animated Chat&lt;/a&gt; - 通过Google Code Labs构建漂亮的用户界面。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://codelabs.developers.google.com/codelabs/flutter-firebase/#0&quot;&gt;Firebase Chat&lt;/a&gt; - Google Code Labs整合Firebase。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://sergiandreplace.com/2017/09/planets-flutter-from-design-to-app&quot;&gt;Planets-Flutter: from design to app&lt;/a&gt; - 详细的planets设计教程。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/lesnitsky/todolist_flutter&quot;&gt;Todo List&lt;/a&gt; [196⭐] – 一步步带你如何使用Flutter构建待办事项列表，由&lt;a href=&quot;https://twitter.com/lesnitsky_a&quot;&gt;Andrei Lesnitsky&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://suragch.medium.com/flutter-and-dart-development-articles-981be9ef7b23&quot;&gt;Flutter and Dart development&lt;/a&gt; - &lt;a href=&quot;https://twitter.com/Suragch1&quot;&gt;Suragch&lt;/a&gt;撰写的文章和教程。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;初学者&quot;&gt;初学者&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.imooc.com/article/315337&quot;&gt;给Android开发者的Flutter入门指南&lt;/a&gt; - 一份面向Android开发者的Flutter入门指南。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.imooc.com/article/312207&quot;&gt;初学者如何高效学习Flutter开发？&lt;/a&gt; - 一份指导初学者快速高效上手Flutter的指南。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/olexale/flutter_roadmap&quot;&gt;Flutter开发路线图&lt;/a&gt; [2795⭐] - 由&lt;a href=&quot;https://github.com/olexale&quot;&gt;Olexandr Leuschenko&lt;/a&gt;制作的Flutter新手可视化路线图，包含原则、模式和框架。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://medium.com/flutter-community/flutter-layout-cheat-sheet-5363348d037e&quot;&gt;布局速查表&lt;/a&gt; - &lt;a href=&quot;https://github.com/tomaszpolanski&quot;&gt;Tomek Polański&lt;/a&gt;提供的布局小部件的详细示例。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.raywenderlich.com/24499516-getting-started-with-flutter&quot;&gt;入门Flutter&lt;/a&gt; - 来自&lt;a href=&quot;https://www.raywenderlich.com&quot;&gt;raywenderlich.com&lt;/a&gt;的指南。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/antz22/ultimate-guide-to-flutter&quot;&gt;初学者指南&lt;/a&gt; [123⭐] - &lt;a href=&quot;https://github.com/antz22&quot;&gt;Anthony&lt;/a&gt;编写的关于Flutter和Firebase基础知识的综合指南。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;中级&quot;&gt;中级&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://suragch.medium.com/flutter-state-management-for-minimalists-4c71a2f2f0c1?sk=6f9cedfb550ca9cc7f88317e2e7055a0&quot;&gt;Flutter极简状态管理&lt;/a&gt; - 通过了解应用程序架构，无需依赖第三方框架。作者：&lt;a href=&quot;https://twitter.com/Suragch1&quot;&gt;Suragch&lt;/a&gt;。另请参阅&lt;a href=&quot;#state-management&quot;&gt;状态管理&lt;/a&gt;。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;高级&quot;&gt;高级&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=UUfXWzp0-DU&quot;&gt;渲染流水线&lt;/a&gt; [799👍] 和 &lt;a href=&quot;https://www.youtube.com/watch?v=VsYbFnucHsU&quot;&gt;让我们构建渲染树&lt;/a&gt; - 由Adam Barth介绍的引擎架构。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://medium.com/flutter-community/flutter-what-are-widgets-renderobjects-and-elements-630a57d05208&quot;&gt;渲染对象&lt;/a&gt; - 什么是Widgets、渲染对象和元素？作者：&lt;a href=&quot;https://github.com/Norbert515&quot;&gt;Norbert515&lt;/a&gt;。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://skillsmatter.com/skillscasts/12254-flutter-with-streams-and-rxdart&quot;&gt;流和RxDart&lt;/a&gt; - 由&lt;a href=&quot;https://github.com/brianegan&quot;&gt;Brian Egan&lt;/a&gt;在Skillmatters上的演讲。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://medium.com/flutter-community/flutter-deep-dive-gestures-c16203b3434f&quot;&gt;手势系统&lt;/a&gt; - Flutter深入剖析：手势。作者：&lt;a href=&quot;https://github.com/nash0x7e2&quot;&gt;Nash&lt;/a&gt;。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.didierboelens.com/2018/06/widget---state---context---inheritedwidget/&quot;&gt;模式&lt;/a&gt; - 由&lt;a href=&quot;https://didierboelens.com&quot;&gt;Didier Boelens&lt;/a&gt;解释的Widget、状态、上下文和InheritedWidget。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://medium.com/saugo360/flutters-rendering-engine-a-tutorial-part-1-e9eff68b825d&quot;&gt;渲染引擎教程&lt;/a&gt; - Flutter的渲染引擎教程。作者：&lt;a href=&quot;https://github.com/AbdulRahmanAlHamali/&quot;&gt;AbdulRahman AlHamali&lt;/a&gt;。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://medium.com/@chemamolins/is-flutters-inheritedwidget-a-good-fit-to-hold-app-state-2ec5b33d023e&quot;&gt;InheritedWidget&lt;/a&gt; - 使用Flutter的InheritedWidget来保存应用状态。作者：&lt;a href=&quot;https://github.com/jmolins&quot;&gt;Chema Molins&lt;/a&gt;。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://medium.com/flutter-community/flutter-from-mobile-to-desktop-93635e8de64e&quot;&gt;从移动到桌面&lt;/a&gt; - 构建适用于智能手机和桌面的应用程序。作者：&lt;a href=&quot;https://neppel.com.br&quot;&gt;Marcelo Henrique Neppel&lt;/a&gt;。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://medium.com/flutter-community/a-deep-dive-into-flutters-accessibility-widgets-eb0ef9455bc&quot;&gt;辅助功能小部件&lt;/a&gt; - 关于辅助功能的各个方面的深入信息。作者：&lt;a href=&quot;https://twitter.com/salihgueler&quot;&gt;Muhammed Salih Güler&lt;/a&gt;。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://medium.com/flutter-io/profiling-flutter-applications-using-the-timeline-a1a434964af3&quot;&gt;使用时间线进行性能分析&lt;/a&gt; - 使用时间线可以找出和解决应用程序中特定的性能问题。作者：&lt;a href=&quot;https://medium.com/@chinmaygarde&quot;&gt;Chinmay Garde&lt;/a&gt;。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;howto文档&quot;&gt;HOWTO文档&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://marcinszalek.pl/flutter/tickets-challenge-parallax&quot;&gt;视差效果&lt;/a&gt; - &lt;a href=&quot;https://marcinszalek.pl&quot;&gt;Marcin Szalek&lt;/a&gt;创建的视差和非线性动画。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://medium.com/@salvatoregiordanoo/flavoring-flutter-392aaa875f36&quot;&gt;构建变体&lt;/a&gt; - &lt;a href=&quot;https://medium.com/@salvatoregiordanoo&quot;&gt;Salvatore Giordano&lt;/a&gt;介绍了如何定义构建配置并在Flutter中进行切换。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://medium.com/@angeloavv/easily-build-flavors-in-flutter-android-and-ios-with-flutter-flavorizr-d48cbf956e4&quot;&gt;构建变体&lt;/a&gt; - &lt;a href=&quot;https://medium.com/@angeloavv&quot;&gt;Angelo Cassano&lt;/a&gt;使用flutter_flavorizr轻松在Flutter（Android和iOS）中构建变体。&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;视频&quot;&gt;视频&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://u.cboy.me/ss/u?cid=672&amp;amp;aid=8&amp;amp;platform=devio&quot;&gt;ChatGPT + Flutter快速开发多端聊天机器人App&lt;/a&gt; - 整合ChatGPT与Flutter高级技术，手把手带你从0到1开发一款可运行在多端的聊天机器人App，帮助你抓住机遇，快速具备AI运用能力，成为移动端领域的AI高手&lt;img src=&quot;http://www.devio.org/img/ico/ico_new.gif&quot; alt=&quot;new&quot; /&gt;。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://api.devio.org/ss/u?cid=741&amp;amp;aid=3&amp;amp;platform=github&quot;&gt;全新Flutter从入门到进阶，实战仿携程网App&lt;/a&gt; - 一门涵盖入门 -&amp;gt; 进阶 -&amp;gt; 实战 -&amp;gt; 拔高拓展的视频教程。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=CPmN4-i9zC8&amp;amp;list=PLOU2XLYxmsIK0r_D-zWcmJ1plIcDNnRkK&quot;&gt;Boring Show&lt;/a&gt; - 与Flutter团队一起探索的视频系列。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=WwhyaqNtNQY&amp;amp;list=PLJbE2Yu2zumDqr_-hqpAN0nIr6m14TAsd&quot;&gt;Tensor Programming&lt;/a&gt; [86🎬] - &lt;a href=&quot;http://tensor-programming.com/&quot;&gt;Tensor Programming&lt;/a&gt;提供的内容非常丰富。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=qWL1lGchpRA&amp;amp;list=PLR2qQy0Zxs_UdqAcaipPR3CG1Ly57UlhV&quot;&gt;Mtechviral&lt;/a&gt; [245🎬] - [印地语/英语] &lt;a href=&quot;https://github.com/iampawan&quot;&gt;Pawan Kumar&lt;/a&gt;的Mtechviral系列视频。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/playlist?list=PLhXZp00uXBk5TSY6YOdmpzp1yG3QbFvrN&quot;&gt;Flutter in Practice&lt;/a&gt; - 面向初学者和非程序员的视频课程，由&lt;a href=&quot;https://zaiste.net/&quot;&gt;Zaiste&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/c/whatsupcoders&quot;&gt;Whatsupcoders&lt;/a&gt; [82🎬] - 由&lt;a href=&quot;https://github.com/whatsupcoders&quot;&gt;Kamal&lt;/a&gt;提供的关于Flutter小部件的免费视频系列。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/channel/UCSIvrn68cUk8CS8MbtBmBkA&quot;&gt;Reso Coder&lt;/a&gt; - &lt;a href=&quot;https://github.com/ResoCoder&quot;&gt;Matej Rešetár&lt;/a&gt;提供的中级和高级视频。&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;组件&quot;&gt;组件&lt;/h2&gt;

&lt;h3 id=&quot;演示&quot;&gt;演示&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/flutter/gallery&quot;&gt;官方展示库&lt;/a&gt; - Flutter团队提供的材料设计小部件演示。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/nisrulz/flutter-examples&quot;&gt;Flutter示例&lt;/a&gt; [5861⭐] - &lt;a href=&quot;https://github.com/nisrulz&quot;&gt;Nishant Srivastava&lt;/a&gt;编写的简单基础的独立应用程序示例。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/X-Wei/flutter_catalog&quot;&gt;Flutter目录&lt;/a&gt; [1601⭐] - &lt;a href=&quot;https://github.com/X-Wei&quot;&gt;X-Wei&lt;/a&gt;展示Flutter组件，同时显示源代码。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Solido/flutter-d-art&quot;&gt;生成艺术&lt;/a&gt; [401⭐] - &lt;a href=&quot;https://github.com/Solido&quot;&gt;Robert Felker&lt;/a&gt;创建的生成艺术作品。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;ui&quot;&gt;UI&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/letsar/flutter_staggered_grid_view&quot;&gt;StaggeredGridView&lt;/a&gt; [2292⭐] - 可变大小瓦片的网格视图，由&lt;a href=&quot;https://github.com/letsar&quot;&gt;Romain Rastel&lt;/a&gt;创建。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/xqwzts/flutter_radial_menu&quot;&gt;Radial Menu&lt;/a&gt; [401⭐] - 动画径向菜单，由&lt;a href=&quot;https://github.com/xqwzts&quot;&gt;Victor Choueiri&lt;/a&gt;创建。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Ivaskuu/tinder_cards&quot;&gt;Tinder Cards&lt;/a&gt; [646⭐] - 类似Tinder的卡片滑动效果，由&lt;a href=&quot;https://github.com/Ivaskuu&quot;&gt;Ivascu Adrian&lt;/a&gt;创建。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/hnvn/flutter_flip_panel&quot;&gt;Flip Panel&lt;/a&gt; [461⭐] - 带有内置动画的翻转面板，由&lt;a href=&quot;https://github.com/hnvn&quot;&gt;HungHD&lt;/a&gt;创建。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/duytq94/facebook-reaction-animation&quot;&gt;Facebook Reactions&lt;/a&gt; [261⭐] - Facebook反应小部件，由&lt;a href=&quot;https://github.com/duytq94&quot;&gt;Duy Tran&lt;/a&gt;创建。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/AndreHaueisen/flushbar&quot;&gt;Flushbar&lt;/a&gt; [818⭐] - 高度可配置的Snackbar，由&lt;a href=&quot;https://github.com/AndreHaueisen&quot;&gt;Andre Haueisen&lt;/a&gt;创建。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Rahiche/stepper_touch&quot;&gt;Stepper Touch&lt;/a&gt; [238⭐] - 漂亮动画的侧面值步进器，由&lt;a href=&quot;https://github.com/Rahiche&quot;&gt;Raouf Rahiche&lt;/a&gt;创建。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/AbdulRahmanAlHamali/flutter_typeahead&quot;&gt;Typeahead&lt;/a&gt; [560⭐] - 用户输入时显示覆盖建议的小部件，由&lt;a href=&quot;https://github.com/AbdulRahmanAlHamali&quot;&gt;Abdul Rahman Al Hamali&lt;/a&gt;创建。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/ariedov/flutter_snaplist&quot;&gt;Snaplist&lt;/a&gt; [366⭐] - 创建可捕捉的列表视图，由&lt;a href=&quot;https://github.com/ariedov&quot;&gt;David Leibovych&lt;/a&gt;创建。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/LiewJunTung/pin_code_text_field&quot;&gt;Pin Code&lt;/a&gt; [252⭐] - 用于登录和OTP的动画和可定制的Pin码，由&lt;a href=&quot;https://github.com/liewjuntung&quot;&gt;Liew Jun Tung&lt;/a&gt;创建。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/faob-dev/folding_cell&quot;&gt;Folding Cell&lt;/a&gt; [430⭐] - 折叠小部件，由&lt;a href=&quot;https://github.com/faob-dev&quot;&gt;Faob&lt;/a&gt;创建。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/aagarwal1012/Liquid-Pull-To-Refresh&quot;&gt;Liquid Pull To Refresh&lt;/a&gt; [922⭐] - 美观和可定制的刷新指示器，由&lt;a href=&quot;https://github.com/aagarwal1012&quot;&gt;Ayush Agarwal&lt;/a&gt;创建。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://pub.dev/packages/slide_container&quot;&gt;Slide Container&lt;/a&gt; - 以平滑阻尼运动的方式垂直和水平滑动，由&lt;a href=&quot;https://github.com/quentinleguennec&quot;&gt;Quentin Le Guennec&lt;/a&gt;创建。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/LanarsInc/direct-select-flutter&quot;&gt;Direct Select&lt;/a&gt; - 全屏模态弹出的选择小部件，由&lt;a href=&quot;https://github.com/iyatsouba&quot;&gt;Ivan Yatsouba&lt;/a&gt;创建。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/xsahil03x/before_after&quot;&gt;Before After&lt;/a&gt; [580⭐] - 美观的滑块，方便展示两张图片之间的差异，由&lt;a href=&quot;https://github.com/xsahil03x&quot;&gt;Sahil Kumar&lt;/a&gt;创建。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/vintage/scratcher&quot;&gt;Scratcher&lt;/a&gt; [306⭐] - 刮刮卡小部件，临时隐藏用户内容，由&lt;a href=&quot;https://github.com/vintage&quot;&gt;Kamil Rykowski&lt;/a&gt;创建。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/aliyigitbireroglu/flutter-image-sequence-animator&quot;&gt;Image Sequence Animator&lt;/a&gt; [104⭐] - 一款简单的小部件，用于动画化一组图片，提供完全自定义控制，作为使用GIF文件的替代方案，由&lt;a href=&quot;https://github.com/aliyigitbireroglu&quot;&gt;Ali Yigit Bireroglu&lt;/a&gt;创建。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/jaweii/Flutter_beautiful_popup&quot;&gt;Beautiful_Popup&lt;/a&gt; [452⭐] - 美化应用弹出窗口，由&lt;a href=&quot;https://github.com/jaweii&quot;&gt;jaweii&lt;/a&gt;创建。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Origogi/Flutter-Credit-Card-Input&quot;&gt;Credit Card Form&lt;/a&gt; [317⭐] - 动画信用卡输入表单，由&lt;a href=&quot;https://github.com/Origogi&quot;&gt;Origogi&lt;/a&gt;创建。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/sbilketay/animated_selection_slide&quot;&gt;Animated Selection Slide&lt;/a&gt; - 通过滑动实现动画化的选择小部件，由&lt;a href=&quot;https://github.com/sbilketay&quot;&gt;Sezgin Bilgetay&lt;/a&gt;创建。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Dn-a/flutter_tags&quot;&gt;Flutter Tags&lt;/a&gt; [332⭐] - 带有不同自定义选项的标签小部件，由&lt;a href=&quot;https://github.com/Dn-a&quot;&gt;Di Natale Antonino&lt;/a&gt;创建。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Idean/Flutter-Neumorphic&quot;&gt;Flutter Neumorphic&lt;/a&gt; [1329⭐] - 用于Flutter的现成Neumorphic套件，支持🕶️暗黑模式。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/HatFeather/flutter_dough&quot;&gt;Dough&lt;/a&gt; [388⭐] - 创建可压缩用户界面的小部件，由&lt;a href=&quot;https://github.com/HatFeather&quot;&gt;Josiah Saunders&lt;/a&gt;创建。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/codegrue/card_settings&quot;&gt;Card Settings&lt;/a&gt; [356⭐] - 用于构建设置表单的包，由&lt;a href=&quot;https://github.com/codegrue&quot;&gt;codegrue&lt;/a&gt;创建。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/chulwoo-park/timelines&quot;&gt;Timelines&lt;/a&gt; [413⭐] - 强大且易于使用的时间轴包，由&lt;a href=&quot;https://github.com/chulwoo-park&quot;&gt;Chulwoo Park&lt;/a&gt;创建。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/JHBitencourt/timeline_tile&quot;&gt;Timeline Tile&lt;/a&gt; [446⭐] - 用于构建美观和可自定义时间轴的瓷砖小部件，由&lt;a href=&quot;https://github.com/JHBitencourt&quot;&gt;Julio Bitencourt&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/chrisedg87/flutter_rounded_loading_button&quot;&gt;Rounded Loading Button&lt;/a&gt; [127⭐] - 带有加载指示器的按钮，包括成功和错误动画，由&lt;a href=&quot;https://twitter.com/ChrisTheEdg&quot;&gt;Chris Edgington&lt;/a&gt;创建。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/bosskmk/pluto_grid&quot;&gt;PlutoGrid&lt;/a&gt; [182⭐] - 可以通过键盘控制的Web和桌面数据表格，由&lt;a href=&quot;https://github.com/bosskmk&quot;&gt;bosskmk&lt;/a&gt;创建。&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;粘粘头部&quot;&gt;粘粘头部&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/TatsuUkraine/flutter_sticky_infinite_list&quot;&gt;Sticky Infinite List&lt;/a&gt; [128⭐] - 带有粘性标题的高度可配置的多向无限列表，由&lt;a href=&quot;https://github.com/TatsuUkraine&quot;&gt;TatsuUkraine&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/letsar/flutter_sticky_header&quot;&gt;Sticky Header&lt;/a&gt; [534⭐] - 带有粘性头部效果的组件，由&lt;a href=&quot;https://github.com/letsar&quot;&gt;Romain Rastel&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/slightfoot/flutter_sticky_headers&quot;&gt;Sticky Headers&lt;/a&gt; [539⭐] - 可配置的带粘粘头部效果的组件，由 &lt;a href=&quot;http://www.devangels.london/&quot;&gt;Simon Lightfoot&lt;/a&gt;提供。&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;抽屉&quot;&gt;抽屉&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/RafaelBarbosatec/hidden_drawer_menu&quot;&gt;Hidden Drawer Menu&lt;/a&gt; [164⭐] - 漂亮的抽屉模式菜单功能带有透视动画，由&lt;a href=&quot;https://github.com/RafaelBarbosatec&quot;&gt;Rafael Almeida Barbosa&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Dn-a/flutter_inner_drawer&quot;&gt;Flutter Inner Drawer&lt;/a&gt; [211⭐] - 创建内部抽屉（左/右）的简单方法，您可以在其中输入列表菜单，由&lt;a href=&quot;https://github.com/Dn-a&quot;&gt;Di Natale Antonino&lt;/a&gt;提供。&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;底栏&quot;&gt;底栏&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/tunitowen/fancy_bottom_navigation&quot;&gt;Fancy Bottom Navigation&lt;/a&gt; [404⭐] - 动画底部导航，由&lt;a href=&quot;https://github.com/tunitowen&quot;&gt;Tony Owen&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/imaNNeoFighT/circular_bottom_navigation&quot;&gt;Circular Bottom Navigation&lt;/a&gt; [314⭐] - 漂亮的动画底部导航栏，由&lt;a href=&quot;https://github.com/imaNNeoFighT&quot;&gt;Iman Khoshabi&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/pedromassango/bottom_navy_bar&quot;&gt;Bottom Navy Bar&lt;/a&gt; [550⭐] - 美丽多彩的动画底部导航栏，由&lt;a href=&quot;https://github.com/pedromassango&quot;&gt;Pedro Massango&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/pedromassango/titled_navigation_bar&quot;&gt;Titled Navigation Bar&lt;/a&gt; [184⭐] - 动画底部导航栏，可在图标和标题之间切换，由&lt;a href=&quot;http://github.com/pedromassango&quot;&gt;Pedro Massango&lt;/a&gt;提供。&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;底部表单&quot;&gt;底部表单&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/mcrovero/rubber&quot;&gt;Rubber Bottom Sheet&lt;/a&gt; [298⭐] - 弹性材料设计的底部表单，由&lt;a href=&quot;https://github.com/mcrovero&quot;&gt;Mattia Crovero&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/jamesblasco/modal_bottom_sheet&quot;&gt;Modal Bottom Sheet&lt;/a&gt; [536⭐] - 带材料设计，Cupertino iOS 13或自定义外观的模态底部表单，由&lt;a href=&quot;https://github.com/jamesblasco&quot;&gt;Jaime Blasco&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/sooxt98/google_nav_bar&quot;&gt;Google Nav Bar&lt;/a&gt; [409⭐] - 一款现代化的 Google 风格导航栏，由 &lt;a href=&quot;http://github.com/sooxt98&quot;&gt;Sooxt98&lt;/a&gt; 创建。&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;滑块&quot;&gt;滑块&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/boeledi/RangeSlider&quot;&gt;RangeSlider&lt;/a&gt; [237⭐] - 滑动选择范围的Flutter组件，由&lt;a href=&quot;https://www.didierboelens.com&quot;&gt;Didier Boelens&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/rvamsikrishna/flutter_fluid_slider&quot;&gt;Fluid Slider&lt;/a&gt; [211⭐] - 具有最小设计和流体状动画的滑块，由 &lt;a href=&quot;https://github.com/rvamsikrishna&quot;&gt;Vamsi  Krishna&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Ali-Azmoud/flutter_xlider&quot;&gt;Flutter Xlider&lt;/a&gt; [216⭐] - 具有RTL支持的水平和垂直材料设计滑块和范围滑块，由&lt;a href=&quot;https://github.com/Ali-Azmoud&quot;&gt;Ali-Azmoud&lt;/a&gt;提供。&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;ui-助手&quot;&gt;UI 助手&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/hanshengchiu/reorderables&quot;&gt;可重新排序&lt;/a&gt; [442⭐] - 通过拖放实现表格、行、列、Wrap(Grid)和SliverList元素的重新排序，由&lt;a href=&quot;https://github.com/hanshengchiu&quot;&gt;Hansheng Chiu&lt;/a&gt;开发。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/aagarwal1012/Liquid-Pull-To-Refresh&quot;&gt;液体下拉刷新&lt;/a&gt; [922⭐] - 一个美观且可自定义的刷新指示器，由&lt;a href=&quot;https://github.com/aagarwal1012/&quot;&gt;Ayush Agarwal&lt;/a&gt;开发。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/fluttercommunity/flutter_infinite_listview&quot;&gt;无限列表视图&lt;/a&gt; [206⭐] - 可在两个方向上进行无限滚动的列表视图，由&lt;a href=&quot;https://github.com/slightfoot&quot;&gt;Simon Lightfoot&lt;/a&gt;开发。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/jogboms/flutter_offline&quot;&gt;离线&lt;/a&gt; [742⭐] - 用于处理离线/在线连接的整洁工具，由&lt;a href=&quot;https://twitter.com/jogboms&quot;&gt;Jeremiah Ogbomo&lt;/a&gt;开发。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/quire-io/scroll-to-index&quot;&gt;滚动到索引&lt;/a&gt; [332⭐] - 为SliverList/ListView滚动到指定索引的子元素，由&lt;a href=&quot;https://github.com/jerrywell/&quot;&gt;Jerry Chen&lt;/a&gt;开发。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/rvamsikrishna/inview_notifier_list&quot;&gt;可见区域通知列表&lt;/a&gt; - 当小部件在提供的区域内可见时，通知的列表视图，由&lt;a href=&quot;https://github.com/rvamsikrishna&quot;&gt;Vamsi Krishna&lt;/a&gt;开发。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/simformsolutions/flutter_showcaseview&quot;&gt;展示视图&lt;/a&gt; [687⭐] - 在iOS和Android上展示应用程序功能的方式，由&lt;a href=&quot;https://github.com/simformsolutions&quot;&gt;Simform&lt;/a&gt;开发。&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;材料设计&quot;&gt;材料设计&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/tiagojencmartins/unicornspeeddial&quot;&gt;Unicorn Speed Dial&lt;/a&gt; [229⭐] - 带有快速拨号Flutter浮动动作按钮 ，由 &lt;a href=&quot;https://github.com/tiagojencmartins&quot;&gt;Tiago Martins&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/letsar/flutter_slidable&quot;&gt;Slidable&lt;/a&gt; [1473⭐] - 带有左右滑动操作的可滑动列表项组件，由 &lt;a href=&quot;https://github.com/letsar&quot;&gt;Romain Rastel&lt;/a&gt;提供。&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;cupertino-设计&quot;&gt;Cupertino 设计&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/aliyigitbireroglu/flutter-peek-and-pop&quot;&gt;Peek &amp;amp; Pop&lt;/a&gt; [138⭐] - 基于iOS功能的Peek＆Pop实现，由&lt;a href=&quot;https://github.com/aliyigitbireroglu&quot;&gt;Ali Yigit Bireroglu&lt;/a&gt;提供。&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;效果&quot;&gt;效果&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://stackoverflow.com/questions/43550853/how-do-i-do-the-frosted-glass-effect-in-flutter&quot;&gt;磨砂玻璃&lt;/a&gt; - 由&lt;a href=&quot;http://www.collinjackson.com&quot;&gt;Collin Jackson&lt;/a&gt;创建的渲染效果。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/FlutterRocks/page-transformer&quot;&gt;视差效果&lt;/a&gt; [735⭐] - 由&lt;a href=&quot;https://github.com/roughike&quot;&gt;Iiro Krankka&lt;/a&gt;创建的ViewPager。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/hnvn/flutter_shimmer&quot;&gt;闪光效果&lt;/a&gt; [1387⭐] - 在内容加载时显示闪光效果，由&lt;a href=&quot;https://github.com/hnvn&quot;&gt;HungHD&lt;/a&gt;创建。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/i-protoss/wave&quot;&gt;波浪效果&lt;/a&gt; [742⭐] - 显示带有自定义颜色、持续时间、浮动和模糊效果的波浪效果，由&lt;a href=&quot;https://github.com/RockerFlower&quot;&gt;RockerFlower&lt;/a&gt;创建。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/iamSahdeep/liquid_swipe_flutter&quot;&gt;液体滑动&lt;/a&gt; - 使用液体滑动切换堆叠的容器，由&lt;a href=&quot;https://github.com/iamSahdeep&quot;&gt;Sahdeep Singh&lt;/a&gt;创建。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/skkallayath/photofilters&quot;&gt;图片滤镜&lt;/a&gt; [297⭐] - 对图像应用滤镜，由&lt;a href=&quot;https://github.com/skkallayath&quot;&gt;Sharafudheen KK&lt;/a&gt;创建。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/JonathanMonga/flutter_shine.dart&quot;&gt;闪耀效果&lt;/a&gt; [137⭐] - 通过动态光源位置创建漂亮的阴影效果，由&lt;a href=&quot;https://github.com/JonathanMonga/&quot;&gt;Jonathan Monga&lt;/a&gt;创建。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/mcaubrey/clay_containers&quot;&gt;Clay Containers&lt;/a&gt; [369⭐] - 用于创建自定义设计的Neumorphic小部件基础，由&lt;a href=&quot;https://github.com/mcaubrey&quot;&gt;Michael Charles&lt;/a&gt;创建。
    &lt;h4 id=&quot;日历&quot;&gt;日历&lt;/h4&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/pinkfish/flutter_calendar&quot;&gt;日历小部件&lt;/a&gt; [162⭐] - 由 &lt;a href=&quot;https://github.com/pinkfish&quot;&gt;David Bennett&lt;/a&gt; 制作的日历小部件。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/dooboolab/flutter_calendar_carousel&quot;&gt;日历轮播小部件&lt;/a&gt; &lt;!-- stargazers:dooboolab/flutter_calendar_carousel--&gt; - 由 &lt;a href=&quot;https://github.com/dooboolab/flutter_calendar_carousel&quot;&gt;dooboolab&lt;/a&gt; 制作的日历轮播小部件。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/aleksanderwozniak/table_calendar&quot;&gt;表格日历&lt;/a&gt; [1167⭐] - 由 &lt;a href=&quot;https://github.com/aleksanderwozniak&quot;&gt;Aleksander Woźniak&lt;/a&gt; 制作的整洁组织的表格日历，具有垂直自动调整大小的功能。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Jamalianpour/time_planner&quot;&gt;时间计划表&lt;/a&gt; [66⭐] - 由 &lt;a href=&quot;https://github.com/Jamalianpour&quot;&gt;Mohammad Jamalianpour&lt;/a&gt; 制作的美观、易于使用和可定制的时间计划表，适用于Flutter移动、桌面和Web端。&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;登录&quot;&gt;登录&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/GeekyAnts/flutter-login-home-animation&quot;&gt;登录动画&lt;/a&gt; [1044⭐] - 由 &lt;a href=&quot;https://github.com/geekruchika&quot;&gt;Ruchika Gupta&lt;/a&gt; 制作的从登录到主页的平滑动画。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/NearHuscarl/flutter_login&quot;&gt;Flutter登录&lt;/a&gt; - 具有平滑动画效果的登录小部件，从开始到结束都很流畅，由 &lt;a href=&quot;https://github.com/NearHuscarl&quot;&gt;NearHuscarl&lt;/a&gt; 制作。&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;基于后端驱动&quot;&gt;基于后端驱动&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/dengyin2000/dynamic_widget&quot;&gt;动态小部件&lt;/a&gt; [1100⭐] - 使用JSON构建动态用户界面，JSON格式与Flutter小部件代码非常相似，由 &lt;a href=&quot;https://github.com/dengyin2000&quot;&gt;Denny Deng&lt;/a&gt; 制作。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;图片&quot;&gt;图片&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/serenader2014/flutter_carousel_slider&quot;&gt;轮播滑块&lt;/a&gt; [1178⭐] - 由 &lt;a href=&quot;https://github.com/serenader2014&quot;&gt;serenader&lt;/a&gt; 制作的轮播滑块小部件，支持无限滚动和自定义子部件。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/pulyaevskiy/parallax-image&quot;&gt;视差图片&lt;/a&gt; [238⭐] - 由 &lt;a href=&quot;https://github.com/pulyaevskiy&quot;&gt;Anatoly Pulyaevskiy&lt;/a&gt; 制作的视差图片效果。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/renancaraujo/photo_view&quot;&gt;照片查看&lt;/a&gt; [1478⭐] - 可缩放的图片查看器，带有加载占位符，由 &lt;a href=&quot;https://github.com/renancaraujo&quot;&gt;Renan C. Araújo&lt;/a&gt; 制作。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/dnfield/flutter_svg&quot;&gt;SVG&lt;/a&gt; [1270⭐] - SVG解析、渲染和小部件库，由 &lt;a href=&quot;https://github.com/dnfield&quot;&gt;Dan Field&lt;/a&gt; 制作。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/hnvn/flutter_image_cropper&quot;&gt;图片裁剪&lt;/a&gt; [814⭐] - 支持比例、旋转和缩放的图片裁剪，由 &lt;a href=&quot;https://github.com/hnvn&quot;&gt;HungHD&lt;/a&gt; 制作。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/renefloor/flutter_cached_network_image&quot;&gt;缓存网络图片&lt;/a&gt; [1911⭐] - 显示来自互联网的图片并将它们保存在缓存目录中。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/xvrh/lottie-flutter&quot;&gt;Lottie&lt;/a&gt; [665⭐] - 使用airbnb流行的&lt;a href=&quot;https://airbnb.design/lottie/&quot;&gt;After Effects动画库&lt;/a&gt;，由 &lt;a href=&quot;https://github.com/xvrh/lottie-flutter&quot;&gt;xvrh&lt;/a&gt; 制作。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/renancaraujo/bitmap&quot;&gt;位图&lt;/a&gt; [128⭐] - 使用Dart FFI进行位图操作（如对比度和曝光），由 &lt;a href=&quot;https://github.com/renancaraujo&quot;&gt;Renan C. Araújo&lt;/a&gt; 制作。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/xclud/flutter_crop&quot;&gt;裁剪&lt;/a&gt; [171⭐] - 在Android、iOS、Web和桌面上裁剪任何小部件/图片，由 &lt;a href=&quot;https://github.com/xclud/&quot;&gt;Mahdi K. Fard&lt;/a&gt; 制作。&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;图片选择器&quot;&gt;图片选择器&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/flutter/plugins/tree/master/packages/image_picker&quot;&gt;图片选择器&lt;/a&gt; - 图片选择，由 &lt;a href=&quot;http://www.collinjackson.com&quot;&gt;Collin Jackson&lt;/a&gt; 制作。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/fluttercandies/flutter_wechat_assets_picker&quot;&gt;微信资产选择器&lt;/a&gt; [811⭐] - 微信风格的资产选择器，支持多个资产，由 &lt;a href=&quot;https://github.com/AlexV525&quot;&gt;Alex Li&lt;/a&gt; 制作。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;地图&quot;&gt;地图&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/apptreesoftware/flutter_google_map_view&quot;&gt;Google Map View&lt;/a&gt; [404⭐] - Google地图插件，由 &lt;a href=&quot;https://www.linkedin.com/company/apptree-software/&quot;&gt;AppTree Software&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/aloisdeniel/flutter_geocoder&quot;&gt;GeoCoder&lt;/a&gt; [122⭐] - 提供正向和反向地理编码库，由 &lt;a href=&quot;https://aloisdeniel.github.com&quot;&gt;Aloïs Deniel&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/apptreesoftware/flutter_map&quot;&gt;Map&lt;/a&gt; [416⭐] - 基于&lt;a href=&quot;http://leafletjs.com/&quot;&gt;Leaflet&lt;/a&gt;的，可定制的地图解决方案，由 &lt;a href=&quot;https://github.com/apptreesoftware&quot;&gt;AppTree Software&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/mapbox/flutter-mapbox-gl&quot;&gt;Mapbox GL&lt;/a&gt; [239⭐] - 交互式，可定制的矢量地图。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/fluttify-project/amap_map_fluttify&quot;&gt;AMap&lt;/a&gt; [421⭐] - 高德地图插件，由&lt;a href=&quot;https://github.com/fluttify-project&quot;&gt;fluttify-project&lt;/a&gt;。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;图表&quot;&gt;图表&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/xqwzts/flutter_circular_chart&quot;&gt;环形图&lt;/a&gt; [355⭐] - 由 &lt;a href=&quot;https://github.com/xqwzts&quot;&gt;Victor Choueiri&lt;/a&gt; 制作的动画径向和饼图。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/xqwzts/flutter_sparkline&quot;&gt;Sparkline&lt;/a&gt; [245⭐] - 由 &lt;a href=&quot;https://github.com/xqwzts&quot;&gt;Victor Choueiri&lt;/a&gt; 制作的Sparkline图表。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/google/charts&quot;&gt;Charts&lt;/a&gt; [2505⭐] - Google Charts团队制作。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/trentpiercy/flutter-candlesticks&quot;&gt;蜡烛图&lt;/a&gt; [358⭐] - OHLC和交易量图表，由 &lt;a href=&quot;https://github.com/trentpiercy&quot;&gt;Trent Piercy&lt;/a&gt; 制作。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/thekeenant/fcharts&quot;&gt;FCharts&lt;/a&gt; [321⭐] - 美观、响应式、动画效果的图表，由 &lt;a href=&quot;https://keenant.com&quot;&gt;Keenan Thompson&lt;/a&gt; 制作。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/imaNNeoFighT/fl_chart&quot;&gt;FL Chart&lt;/a&gt; [3846⭐] - 在Flutter中绘制出色的图表，由 &lt;a href=&quot;http://www.ikhoshabi.com&quot;&gt;Iman Khoshabi&lt;/a&gt; 制作。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/aeyrium/bezier-chart&quot;&gt;贝塞尔图表&lt;/a&gt; [401⭐] - Flutter中美观的贝塞尔线图小部件，具有高度交互和可配置性，由 &lt;a href=&quot;https://twitter.com/diegoveloper&quot;&gt;Diego Velasquez&lt;/a&gt; 制作。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/entronad/flutter_echarts&quot;&gt;Echarts&lt;/a&gt; [533⭐] - 大量高级响应式图表集合，由 &lt;a href=&quot;https://github.com/entronad&quot;&gt;LIN Chen&lt;/a&gt; 制作。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/entronad/graphic&quot;&gt;Graphic&lt;/a&gt; [383⭐] - 基于图形语法的数据可视化库，由 &lt;a href=&quot;https://github.com/entronad&quot;&gt;LIN Chen&lt;/a&gt; 制作。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;导航&quot;&gt;导航&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/goposse/fluro&quot;&gt;Fluro&lt;/a&gt; [3362⭐] - Flutter中最亮、最时尚、最酷的路由器，具有导航、通配符、查询和过渡效果，由 &lt;a href=&quot;http://goposse.com&quot;&gt;Posse&lt;/a&gt; 制作。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/leocavalcante/page_view_indicator&quot;&gt;PageView Indicator&lt;/a&gt; [132⭐] - 为PageView构建页面指示器，由 &lt;a href=&quot;https://github.com/leocavalcante&quot;&gt;Leo Cavalcante&lt;/a&gt; 制作。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Dennis-Krasnov/Flutter-Deep-Link-Navigation&quot;&gt;深层链接导航&lt;/a&gt; [53⭐] - 在Flutter中实现完整的深层链接导航的优雅抽象，由 &lt;a href=&quot;https://denniskrasnov.com&quot;&gt;Dennis Krasnov&lt;/a&gt; 制作。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/jonataslaw/get&quot;&gt;Get&lt;/a&gt; [1219⭐] - 一个应用于Flutter的高性能状态管理，智能依赖性注入和路由管理的插件，由&lt;a href=&quot;https://github.com/jonataslaw&quot;&gt;Jonny Borges&lt;/a&gt;。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;验证&quot;&gt;验证&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/flutter/plugins/tree/master/packages/local_auth&quot;&gt;Local Auth&lt;/a&gt; - 支持Touch ID, 指纹，锁屏识别验证的Flutter库。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/AppleEducate/flutter_login&quot;&gt;Login&lt;/a&gt; [545⭐] - 自持Face ID, Touch ID, 和 指纹识别验证的Flutter库，由&lt;a href=&quot;http://appleeducate.com&quot;&gt;Rody Davis&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/flutter/plugins/tree/master/packages/google_sign_in&quot;&gt;Google Sign-In&lt;/a&gt; - Google 登录SDK.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/flutter/plugins/tree/master/packages/firebase_auth&quot;&gt;Firebase Auth&lt;/a&gt; - Firebase 登录SDK.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/roughike/flutter_facebook_login&quot;&gt;Facebook Login&lt;/a&gt; [374⭐] - 使用原生Android和iOS的Facebook登录SDK进行身份验证 &lt;a href=&quot;https://github.com/roughike&quot;&gt;Iiro Krankka&lt;/a&gt;。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/tomgilder/flutter_apple_sign_in&quot;&gt;Apple Sign-In&lt;/a&gt; [145⭐] - 苹果登录插件，由&lt;a href=&quot;https://github.com/tomgilder&quot;&gt;Tom Gilder&lt;/a&gt;。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/hitherejoe/FlutterOAuth&quot;&gt;OAuth&lt;/a&gt; [74⭐] - Buffer, Strava, Unsplash, Github 登录验证，由 &lt;a href=&quot;http://www.hitherejoe.com&quot;&gt;Joe Birch&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://hackernoon.com/instagram-authentication-with-flutter-df6424d2d56c&quot;&gt;Instagram&lt;/a&gt; - Instagram 登录验证由 &lt;a href=&quot;http://developer-journey.com/&quot;&gt;Wilfried Mbouenda Mbogne&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://medium.com/@gildaswise/flutter-adding-sign-in-with-google-and-phone-authentication-to-your-app-69f681518f9b&quot;&gt;Firebase Phone Auth&lt;/a&gt; [266👏] - 电话号码通过短信身份验证，由 &lt;a href=&quot;https://github.com/gildaswise&quot;&gt;Gildásio Filho&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Clancey/simple_auth&quot;&gt;SimpleAuth&lt;/a&gt; [56⭐] - Azure Active Directory, Amazon, Dropbox, Facebook, Github, Google, Instagram, Linked In, Microsoft Live Connect, Github的登录验证，由 &lt;a href=&quot;https://github.com/Clancey&quot;&gt;James Clancey&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/MaikuB/flutter_appauth&quot;&gt;Flutter AppAuth&lt;/a&gt; [120⭐] - 提供围绕AppAuth iOS和Android SDK的包装的插件，由&lt;a href=&quot;https://github.com/MaikuB&quot;&gt;Michael Bui&lt;/a&gt;提供。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;文字和富文本&quot;&gt;文字和富文本&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/flutter/flutter_markdown&quot;&gt;Markdown&lt;/a&gt; null - Flutter的Markdown渲染器。它支持原始格式，但不支持内联HTML。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/benhurott/flutter-masked-text&quot;&gt;Masked Text&lt;/a&gt; [244⭐] - 由 &lt;a href=&quot;https://github.com/benhurott&quot;&gt;Ben-hur Santos Ott&lt;/a&gt; 制作的带有自定义和货币格式的蒙版文本。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/memspace/zefyr&quot;&gt;Zefyr&lt;/a&gt; [2016⭐] - 由 &lt;a href=&quot;https://github.com/memspace/zefyr&quot;&gt;Memspace&lt;/a&gt; 制作的柔和且温和的富文本编辑器。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/leisim/auto_size_text&quot;&gt;AutoSizeText&lt;/a&gt; [1496⭐] - 自动调整文本大小，使其完美适应边界，由 &lt;a href=&quot;https://github.com/leisim&quot;&gt;Simon Leier&lt;/a&gt; 制作。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/fayeed/flutter_parsed_text&quot;&gt;Parsed Text&lt;/a&gt; [190⭐] - 基于内容识别的交互式文本，还支持正则表达式，由 &lt;a href=&quot;https://github.com/fayeed/&quot;&gt;Fayeed Pawaskar&lt;/a&gt; 制作。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/shah-xad/flutter_tex&quot;&gt;TeX&lt;/a&gt; [186⭐] - 使用完整的HTML和JavaScript支持来渲染数学方程式，由 &lt;a href=&quot;https://github.com/shah-xad&quot;&gt;Shahzad Akram&lt;/a&gt; 制作。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/BertrandBev/code_field&quot;&gt;Code Field&lt;/a&gt; - 可定制的代码字段小部件，支持语法高亮，由 &lt;a href=&quot;https://github.com/BertrandBev&quot;&gt;Bertrand Bevillard&lt;/a&gt; 制作。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;表单&quot;&gt;表单&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/danvick/flutter_form_builder&quot;&gt;Form Builder&lt;/a&gt; [935⭐] - 简化构建表单、验证字段、对变化做出反应和收集最终用户输入的框架，由 &lt;a href=&quot;https://github.com/danvick&quot;&gt;Danvick Miller&lt;/a&gt; 制作。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/joanpablo/reactive_forms&quot;&gt;Reactive Forms&lt;/a&gt; [233⭐] - 基于模型驱动的方法处理表单输入和验证，受到 Angular 的 Reactive Forms 的启发。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;分析&quot;&gt;分析&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/dart-lang/usage&quot;&gt;Usage&lt;/a&gt; [123⭐] - 用于命令行、Web 和 Flutter 应用程序的 Google Analytics 封装。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/FirebaseExtended/flutterfire/tree/master/packages/firebase_analytics&quot;&gt;Firebase Analytics&lt;/a&gt; - 连接到 Firebase Analytics API。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/seenickcode/pure_mixpanel&quot;&gt;Pure Mixpanel&lt;/a&gt; [21⭐] - 用于流行的 &lt;a href=&quot;https://mixpanel.com&quot;&gt;Mixpanel.com&lt;/a&gt; 的分析工具，由 &lt;a href=&quot;https://twitter.com/seenickcode&quot;&gt;Nick Manning&lt;/a&gt; 制作。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;国际化&quot;&gt;国际化&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/KingWu/gen_lang&quot;&gt;GenLang&lt;/a&gt; [88⭐] - 国际化代码生成器，由 &lt;a href=&quot;https://github.com/KingWu&quot;&gt;King Wu&lt;/a&gt; 制作。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/bratan/flutter_translate&quot;&gt;Flutter Translate&lt;/a&gt; [279⭐] - 国际化（i18n）库，由 &lt;a href=&quot;http://bratan.me&quot;&gt;Florin Bratan&lt;/a&gt; 制作。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/fkirc/attranslate&quot;&gt;attranslate&lt;/a&gt; - 通过 &lt;a href=&quot;https://github.com/fkirc&quot;&gt;fkirc&lt;/a&gt; 制作的自动化翻译 ARB 或 JSON 文件工具。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;样式&quot;&gt;样式&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/rxlabz/flutterial&quot;&gt;Flutterial&lt;/a&gt; [1437⭐] - Flutter 材料主题浏览器，由 &lt;a href=&quot;https://twitter.com/rxlabz&quot;&gt;Erick Ghaumez&lt;/a&gt; 制作。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/bregydoc/pigment&quot;&gt;Pigment&lt;/a&gt; [184⭐] - 在 Flutter 中使用颜色的简单但实用的包。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;媒体&quot;&gt;媒体&lt;/h3&gt;
&lt;h4 id=&quot;音频&quot;&gt;音频&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/shadow-app/flutter_audio_recorder&quot;&gt;Flutter Audio Recorder&lt;/a&gt; - 提供完整的录音控制和访问录音详细信息，如电平测量，由 &lt;a href=&quot;https://github.com/nikli2009&quot;&gt;Wenyan Li&lt;/a&gt; 制作。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/ZaraclaJ/audio_recorder&quot;&gt;Audio Recorder&lt;/a&gt; [169⭐] - 录制音频并将其存储在本地，由 &lt;a href=&quot;https://twitter.com/jordanalcrz&quot;&gt;Jordan Alcaraz&lt;/a&gt; 制作。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/dooboolab/flutter_sound&quot;&gt;Flutter Sound&lt;/a&gt; [666⭐] - 一手掌握的 Flutter 音频录制和播放器，由 &lt;a href=&quot;https://github.com/dooboolab&quot;&gt;dooboolab&lt;/a&gt; 制作。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/florent37/Flutter-AssetsAudioPlayer&quot;&gt;AssetsAudioPlayer&lt;/a&gt; [567⭐] - 同时播放来自资源/网络/文件的音频，并显示通知 [android / ios / web / macos]。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://pub.dev/packages/audio_service&quot;&gt;Audio Service&lt;/a&gt; - 系统后台音频支持，由 &lt;a href=&quot;https://github.com/ryanheise&quot;&gt;Ryan Heise&lt;/a&gt; 制作。 &lt;a href=&quot;https://suragch.medium.com/background-audio-in-flutter-with-audio-service-and-just-audio-3cce17b4a7d?sk=0837a1b1773e27a4f879ff3072e90305&quot;&gt;教程&lt;/a&gt; 由 &lt;a href=&quot;https://twitter.com/Suragch1&quot;&gt;Suragch&lt;/a&gt; 提供。&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;视频-1&quot;&gt;视频&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/cloudwebrtc/flutter-webrtc&quot;&gt;WebRTC&lt;/a&gt; [2747⭐] - iOS/Android 的 WebRTC 插件，由 &lt;a href=&quot;https://github.com/cloudwebrtc&quot;&gt;CloudWebRtc&lt;/a&gt; 制作。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/brianegan/chewie&quot;&gt;Chewie&lt;/a&gt; [1353⭐] - 提供对视频播放的低级访问，由 &lt;a href=&quot;https://github.com/brianegan&quot;&gt;Brian Egan&lt;/a&gt; 制作。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/sbis04/video_trimmer&quot;&gt;Video Trimmer&lt;/a&gt; [276⭐] - 可视化和修剪视频，由 &lt;a href=&quot;https://github.com/sbis04&quot;&gt;Souvik Biswas&lt;/a&gt; 制作。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Apparence-io/camera_awesome&quot;&gt;CamerAwesome&lt;/a&gt; [295⭐] - 社区相机插件改版，由 &lt;a href=&quot;https://apparence.io&quot;&gt;Apparence.io studio&lt;/a&gt; 制作。&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;语音&quot;&gt;语音&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/rxlabz/speech_recognition&quot;&gt;Speech Recognition&lt;/a&gt; [323⭐] - 语音转文本，由 &lt;a href=&quot;https://twitter.com/rxlabz&quot;&gt;Erick Ghaumez&lt;/a&gt; 制作。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://marcinszalek.pl/flutter/ok-google-flutter/&quot;&gt;OK Google&lt;/a&gt; - 集成 Google 助手，由 &lt;a href=&quot;https://marcinszalek.pl/&quot;&gt;Marcin Szalek&lt;/a&gt; 制作。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;存储&quot;&gt;存储&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/flutter/plugins/tree/master/packages/firebase_storage&quot;&gt;Firebase Storage&lt;/a&gt; - Firebase作为数据存储的插件。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/mogol/flutter_secure_storage&quot;&gt;Secure Storage&lt;/a&gt; [490⭐] - 提供钥匙串和密钥库存储，由 &lt;a href=&quot;https://github.com/mogol&quot;&gt;German Saprykin&lt;/a&gt;提供。&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;首选项&quot;&gt;首选项&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/roughike/streaming_shared_preferences&quot;&gt;Streaming Shared Preferences&lt;/a&gt; - 基于流的键值存储，通过流实现共享首选项，由 &lt;a href=&quot;https://github.com/roughike&quot;&gt;Iiro Krankka&lt;/a&gt; 制作。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;赚钱&quot;&gt;赚钱&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://pub.dev/packages/admob&quot;&gt;Admob&lt;/a&gt; - 支持 iOS 和 Android 的插页式广告，由 Brett Nesbitt 制作。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/FirebaseExtended/flutterfire/tree/master/packages/firebase_admob&quot;&gt;Firebase AdMob&lt;/a&gt; - 使用 Firebase 进行广告集成。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/dooboolab/flutter_inapp_purchase&quot;&gt;Inapp Purchase&lt;/a&gt; [464⭐] - 从 &lt;a href=&quot;https://github.com/dooboolab/react-native-iap&quot;&gt;react-native-iap&lt;/a&gt; 派生的“应用内购买”功能集合，由 &lt;a href=&quot;https://github.com/dooboolab&quot;&gt;dooboolab&lt;/a&gt; 制作。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/kmcgill88/admob_flutter&quot;&gt;Admob Flutter&lt;/a&gt; - 使用原生平台视图显示横幅广告的 Admob 插件，由 &lt;a href=&quot;https://github.com/YoussefKababe&quot;&gt;Youssef Kababe&lt;/a&gt; 和 &lt;a href=&quot;https://github.com/kmcgill88&quot;&gt;Kevin McGill&lt;/a&gt; 制作。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/dreamsoftin/facebook_audience_network&quot;&gt;Facebook Audience Network&lt;/a&gt; - 显示横幅广告、插页式广告、流式视频广告、激励视频广告和原生广告的 Facebook Audience Network 广告插件，由 &lt;a href=&quot;https://github.com/dreamsoftin&quot;&gt;Dreamsoft Innovations&lt;/a&gt; 制作。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/square/in-app-payments-flutter-plugin&quot;&gt;Square In-App Payments SDK&lt;/a&gt; [283⭐] - 在应用中嵌入卡片输入表单以生成顾客提供的卡片信息或数字钱包的 Nonce，以进行支付，由 &lt;a href=&quot;https://github.com/orgs/square&quot;&gt;Square&lt;/a&gt; 制作。&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;模板&quot;&gt;模板&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/FlutterRocks/movie-details-ui&quot;&gt;电影详情&lt;/a&gt; [372⭐] - 由 &lt;a href=&quot;https://github.com/roughike&quot;&gt;Iiro Krankka&lt;/a&gt; 制作的电影详情页面。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/CodemateLtd/FlutterMates&quot;&gt;Mates&lt;/a&gt; [482⭐] - 如何从 randomuser.me API 加载个人资料和一个漂亮的个人资料详情页面，由 &lt;a href=&quot;https://github.com/roughike&quot;&gt;Iiro Krankka&lt;/a&gt; 制作。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/alessandroaime/Weather&quot;&gt;天气应用&lt;/a&gt; [141⭐] - 使用 Canvas 和动画的天气应用，由 &lt;a href=&quot;https://github.com/alessandroaime&quot;&gt;Alessandro Aime&lt;/a&gt; 制作。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/brianegan/flutter_architecture_samples&quot;&gt;TodoMVC&lt;/a&gt; [7528⭐] - 包含不同风格（Vanilla、Redux、built_redux）的 TODO 应用程序，由 &lt;a href=&quot;https://github.com/brianegan&quot;&gt;Brian Egan&lt;/a&gt; 制作。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/braulio94/menu_flutter&quot;&gt;餐厅菜单&lt;/a&gt; [553⭐] - 餐厅菜单，由 &lt;a href=&quot;https://github.com/braulio94&quot;&gt;Braulio Cassule&lt;/a&gt; 制作。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/tomialagbe/flutter_ui_challenges&quot;&gt;UI 挑战&lt;/a&gt; [1272⭐] - 个人资料、旅行、美食应用，由 &lt;a href=&quot;https://github.com/tomialagbe&quot;&gt;Tomi Alagbe&lt;/a&gt; 制作。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/matthinc/flutter_cupertino_settings&quot;&gt;Cupertino 设置&lt;/a&gt; [219⭐] - iOS 设置，由 &lt;a href=&quot;https://github.com/matthinc&quot;&gt;Matthias Rupp&lt;/a&gt; 制作。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/thosakwe/flutter_music_player&quot;&gt;音乐播放器&lt;/a&gt; [205⭐] - 音乐播放器组件，由 &lt;a href=&quot;https://thosakwe.com/&quot;&gt;Tobe O&lt;/a&gt; 制作。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Ivaskuu/dashboard&quot;&gt;仪表盘&lt;/a&gt; [814⭐] - 仪表盘和商店项目，由 &lt;a href=&quot;https://github.com/Ivaskuu&quot;&gt;Ivascu Adrian&lt;/a&gt; 制作。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/littlemarc2011/FlutterTodo&quot;&gt;Todo&lt;/a&gt; [519⭐] - 来自 Dribble 的 TODO 模板，由 &lt;a href=&quot;https://www.marc-little.com/&quot;&gt;Marc L&lt;/a&gt; 制作。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/geekruchika/FlutterCardSwipe&quot;&gt;卡片滑动动画&lt;/a&gt; [462⭐] - 卡片滑动模板，由 &lt;a href=&quot;https://github.com/geekruchika&quot;&gt;Ruchika Gupta&lt;/a&gt; 制作。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/iampawan/Flutter-UI-Kit&quot;&gt;UI 工具包&lt;/a&gt; [5707⭐] - 一套有用的 UI 工具包，由 &lt;a href=&quot;https://github.com/iampawan&quot;&gt;Pawan Kumar&lt;/a&gt; 制作。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/putraxor/flutter-book-app&quot;&gt;图书&lt;/a&gt; [300⭐] - 由 &lt;a href=&quot;https://github.com/putraxor&quot;&gt;Ardiansyah Putra&lt;/a&gt; 制作的书架应用。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/huextrat/TheGorgeousLogin&quot;&gt;漂亮的登录界面&lt;/a&gt; [1497⭐] - 设计优美且流畅的登录模板，由 &lt;a href=&quot;https://github.com/huextrat&quot;&gt;Hugo Extrat&lt;/a&gt; 制作。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/longhoang2984/flutter_payment_app_ui&quot;&gt;Liquid Pay 支付应用&lt;/a&gt; [251⭐] - 由 &lt;a href=&quot;https://github.com/longhoang2984&quot;&gt;Long Hoang&lt;/a&gt; 制作的 Liquid Pay 应用概念。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/SnakeyHips/drawapp&quot;&gt;绘图应用&lt;/a&gt; [208⭐] - 示例绘图应用，展示如何允许用户在画布上绘图，并提供颜色选择器和画笔粗细调节器，由 &lt;a href=&quot;https://github.com/SnakeyHips&quot;&gt;Jake Gough&lt;/a&gt; 制作。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/KingWu/flutter_starter_kit&quot;&gt;入门套件&lt;/a&gt; [596⭐] - App Store 实现，用于学习 Bloc、RxDart、Sqflite、Fluro 和 Dio，由 &lt;a href=&quot;https://github.com/KingWu&quot;&gt;King Wu&lt;/a&gt; 制作。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/jhomlala/feather&quot;&gt;Feather&lt;/a&gt; [472⭐] - 美观的天气应用程序，包含 RxDart、Dio、BLoC、i18n、单元测试和小部件测试，由 &lt;a href=&quot;https://github.com/jhomlala&quot;&gt;Jakub Homlala&lt;/a&gt; 制作。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/javico2609/flutter-challenges&quot;&gt;克隆 UI 挑战&lt;/a&gt; [1280⭐] - 一系列有用的 UI 克隆，由 &lt;a href=&quot;https://github.com/javico2609&quot;&gt;Javier González&lt;/a&gt; 制作。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/JideGuru/FlutterFoodybite&quot;&gt;FlutterFoodybite&lt;/a&gt; [1113⭐] - 优美的美食应用 UI 模板，由 &lt;a href=&quot;https://github.com/JideGuru&quot;&gt;JideGuru&lt;/a&gt; 制作。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/diegoveloper/flutter-samples&quot;&gt;Flutter 示例&lt;/a&gt; [2464⭐] - 一系列优秀的 Flutter 示例，由 &lt;a href=&quot;https://github.com/diegoveloper&quot;&gt;Diego Velásquez&lt;/a&gt; 制作。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gregertw/actingweb_firstapp&quot;&gt;ActingWeb First_App&lt;/a&gt; [285⭐] - 初学者应用程序，包含用于团队开发的生产级应用程序的基本元素，由 &lt;a href=&quot;https://github.com/gregertw&quot;&gt;Greger Wedel&lt;/a&gt; 制作。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/pawlik92/flutter_whirlpool&quot;&gt;智能洗衣机&lt;/a&gt; [590⭐] - 由 &lt;a href=&quot;https://github.com/pawlik92&quot;&gt;Tomasz Pawlikowski&lt;/a&gt; 制作的智能洗衣机 UI 挑战应用，采用 Box2D 物理引擎。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/JHBitencourt/beautiful_timelines&quot;&gt;美观的时间轴&lt;/a&gt; [186⭐] - 一组美观的时间轴，由 &lt;a href=&quot;https://github.com/JHBitencourt&quot;&gt;Julio Bitencourt&lt;/a&gt; 制作。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;clone&quot;&gt;Clone&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/pd4d10/git-touch&quot;&gt;GitTouch&lt;/a&gt; [979⭐] - GitHub，GitLab，Bitbucket和Gitea的开源移动客户端，由&lt;a href=&quot;https://github.com/pd4d10&quot;&gt;Rongjian Zhang&lt;/a&gt;提供。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;机器学习&quot;&gt;机器学习&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/azihsoyn/flutter_mlkit&quot;&gt;MLKit&lt;/a&gt; [329⭐] - Firebase 机器学习套件，由&lt;a href=&quot;https://github.com/azihsoyn&quot;&gt;Naoya Yoshizawa&lt;/a&gt;。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/BayesWitnesses/m2cgen&quot;&gt;m2gen&lt;/a&gt; [1667⭐] - CLI工具可将ML模型转换为本地Dart代码，由&lt;a href=&quot;https://github.com/BayesWitnesses&quot;&gt;BayesWitnesses&lt;/a&gt;。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;视觉识别&quot;&gt;视觉识别&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/santetis/flutter_camera_ml_vision&quot;&gt;ML Vision Camera Stream&lt;/a&gt; [218⭐] - 由 &lt;a href=&quot;https://github.com/jaumard&quot;&gt;Aumard Jimmy&lt;/a&gt; 和 &lt;a href=&quot;https://github.com/santetis&quot;&gt;Santetis&lt;/a&gt; 制作的 ML Vision 相机流应用，可进行 QR 码、人脸等识别。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/edufolly/flutter_mobile_vision&quot;&gt;Google Mobile Vision&lt;/a&gt; [433⭐] - 由 &lt;a href=&quot;https://github.com/edufolly&quot;&gt;Eduardo Folly&lt;/a&gt; 制作的 Google Mobile Vision 库。&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;augmented-reality&quot;&gt;Augmented Reality&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/olexale/arkit_flutter_plugin&quot;&gt;ARKit Plugin&lt;/a&gt; [470⭐] - ARKit包装器-苹果的iOS增强现实平台，由&lt;a href=&quot;https://github.com/olexale&quot;&gt;Olexandr Leuschenko&lt;/a&gt;。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/giandifra/arcore_flutter_plugin&quot;&gt;ARCore Plugin&lt;/a&gt; [201⭐] - 使用ARCore平台增强现实，由&lt;a href=&quot;https://github.com/giandifra&quot;&gt;Gian Marco Di Francesco&lt;/a&gt;。&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;插件&quot;&gt;插件&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://pub.dev/flutter/packages&quot;&gt;Pub packages&lt;/a&gt; - Dart Pub 仓库的包筛选器。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/flutter/plugins/tree/master/packages&quot;&gt;Plugins&lt;/a&gt; - 官方 Flutter 团队的插件。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;设备&quot;&gt;设备&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/dart-flitter/flutter_webview_plugin&quot;&gt;WebView&lt;/a&gt; [1232⭐] - 一个WebView插件， 由&lt;a href=&quot;https://twitter.com/HadrienLejard&quot;&gt;Hadrien Lejard&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Lyokone/flutterlocation&quot;&gt;Location&lt;/a&gt; [595⭐] - 位置服务，提供位置，以及连续位置的回调，由 &lt;a href=&quot;https://github.com/Lyokone&quot;&gt;Lyokone&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://pub.dartlang.org/packages/battery&quot;&gt;Battery&lt;/a&gt; - 提供访问有关电池的各种信息。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://pub.dartlang.org/packages/proximity_plugin&quot;&gt;Proximity Sensor Plugin&lt;/a&gt; - 提供访问接近传感器也叫近距离传感器的能力，比如手机靠近脸后屏蔽操作之类的，由 &lt;a href=&quot;https://github.com/Samaritan1011001&quot;&gt;Manoj NB&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/loup-v/geolocation&quot;&gt;Geolocation&lt;/a&gt; [196⭐] - 功能齐全的地理定位插件：当前位置，位置更新，地理编码，地点等，由 &lt;a href=&quot;http://intheloup.io&quot;&gt;Loup&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/MaikuB/flutter_local_notifications&quot;&gt;Local Notifications&lt;/a&gt; [1203⭐] - 用于显示本地通知的插件，由 &lt;a href=&quot;https://github.com/MaikuB&quot;&gt;Michael Bui&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/builttoroam/flutter_plugins/tree/develop/device_calendar&quot;&gt;Device Calendar&lt;/a&gt; - 提供修改用户日历能力的插件，由&lt;a href=&quot;http://builttoroam.com&quot;&gt;Built to Roam&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/g123k/flutter_app_badger&quot;&gt;Badger&lt;/a&gt; [175⭐] - 提供更新APP启动图标上的小红点能力的插件，由 &lt;a href=&quot;https://twitter.com/g123k&quot;&gt;Edouard Marquez&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/GigaDroid/flutter_udid&quot;&gt;UDID&lt;/a&gt; [135⭐] - 用于在Android/iOS设备上获取一个持久的 UDID，即使重新安装App，由  &lt;a href=&quot;https://kukuk.me&quot;&gt;Leon Kukuk&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/hnvn/flutter_downloader&quot;&gt;Downloader&lt;/a&gt; [472⭐] - 下载器，创建和管理下载任务，由 &lt;a href=&quot;https://github.com/hnvn&quot;&gt;HungHD&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/pichillilorenzo/flutter_inappbrowser&quot;&gt;InAppBrowser&lt;/a&gt; [1002⭐] - 添加内联WebView小部件或打开应用程序内浏览器窗口，由 &lt;a href=&quot;https://github.com/pichillilorenzo&quot;&gt;Lorenzo Pichilli&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/pichillilorenzo/flutter_appavailability&quot;&gt;AppAvailability&lt;/a&gt; [57⭐] - 列出，启动并检查已安装的应用，由 &lt;a href=&quot;https://github.com/pichillilorenzo&quot;&gt;Lorenzo Pichilli&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/aeyrium/aeyrium-sensor&quot;&gt;Aeyrium Sensor&lt;/a&gt; [49⭐] - 一个插件，可以轻松访问Android和iOS设备上的Pitch and Roll， &lt;a href=&quot;https://github.com/aeyrium&quot;&gt;Diego Velásquez&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/miguelpruivo/plugins_flutter_file_picker&quot;&gt;File Picker&lt;/a&gt; [392⭐] - 本机文件浏览器加载，支持绝对文件路径，由&lt;a href=&quot;https://github.com/miguelpruivo&quot;&gt;Miguel Ruivo&lt;/a&gt;。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/X-dea/Flutter_VPN&quot;&gt;VPN&lt;/a&gt;&lt;!--stargazers:X-dea/Flutter_VPN--&gt; - 访问 VPN 服务，由&lt;a href=&quot;https://github.com/ctrysbita&quot;&gt;Jason C.H&lt;/a&gt;。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/baseflow/flutter-geolocator&quot;&gt;Geolocator&lt;/a&gt;&lt;!--stargazers:baseflow/flutter-geolocator--&gt; - Flutter地理位置插件，可轻松访问特定于平台的位置服务，由&lt;a href=&quot;https://baseflow.com&quot;&gt;Baseflow&lt;/a&gt;。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/baseflow/flutter-permission-handler&quot;&gt;Permission Handler&lt;/a&gt;&lt;!--stargazers:baseflow/flutter-permission-handler--&gt; - Flutter权限插件，提供跨平台（iOS，Android）API来请求和检查权限，由&lt;a href=&quot;https://baseflow.com&quot;&gt;Baseflow&lt;/a&gt;。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;扫码器&quot;&gt;扫码器&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/villela/flutter_qrcode_reader&quot;&gt;QR Code Reader&lt;/a&gt; [197⭐] - QR 扫描插件，由&lt;a href=&quot;https://github.com/villela&quot;&gt;Matheus Villela&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/facundomedica/fast_qr_reader_view&quot;&gt;Fast QR Reader View&lt;/a&gt; [236⭐] - 快速的QR扫码插件，由 &lt;a href=&quot;https://github.com/facundomedica&quot;&gt;Facundo Medica&lt;/a&gt;提供。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;蓝牙--nfc--信号灯&quot;&gt;蓝牙 / NFC / 信号灯&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/pauldemarco/flutter_blue&quot;&gt;Blue&lt;/a&gt; [1423⭐] - FlutterBlue是Flutter的蓝牙插件，由&lt;a href=&quot;https://github.com/pauldemarco&quot;&gt;Paul DeMarco&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/loup-v/beacons&quot;&gt;Beacons&lt;/a&gt; [64⭐] - Flutter beacons 插件，由 &lt;a href=&quot;http://intheloup.io&quot;&gt;Loup&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/matteocrippa/flutter-nfc-reader&quot;&gt;NFC Reader&lt;/a&gt; [203⭐] - NFC 读取器，由&lt;a href=&quot;https://github.com/matteocrippa&quot;&gt;Matteo Crippa&lt;/a&gt;。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/pszklarska/beacon_broadcast&quot;&gt;Beacon broadcast&lt;/a&gt; [54⭐] - 将手机变成信标的库，由&lt;a href=&quot;https://github.com/pszklarska/&quot;&gt;Paulina Szklarska&lt;/a&gt;。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/PhilipsHue/flutter_reactive_ble&quot;&gt;Reactive Ble&lt;/a&gt; [84⭐] - 处理多个设备的BLE操作，由&lt;a href=&quot;https://github.com/PhilipsHue&quot;&gt;Philips Hue&lt;/a&gt;。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/okadan/flutter-nfc-manager&quot;&gt;NFC Manager&lt;/a&gt; [29⭐] - 适用于iOS和Android的通用NFC插件，由&lt;a href=&quot;https://github.com/okadan&quot;&gt;Naoki Okada&lt;/a&gt;。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;存储-1&quot;&gt;存储&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/tekartik/sqflite&quot;&gt;Sqflite&lt;/a&gt; [2289⭐] - SQLite Flutter 插件，由 &lt;a href=&quot;https://www.linkedin.com/in/alextekartik/&quot;&gt;Alexandre Roux&lt;/a&gt; 开发。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/simolus3/moor&quot;&gt;Moor&lt;/a&gt; - Moor 是一个易于使用、反应式、类型安全的 Dart 和 Flutter 持久化库，由 &lt;a href=&quot;https://github.com/simolus3&quot;&gt;Simon Binder&lt;/a&gt; 开发。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;服务&quot;&gt;服务&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/VictorRancesCode/flutter_dialogflow&quot;&gt;Dialogflow&lt;/a&gt; [186⭐] - 用于与 Dialogflow 轻松集成的插件，由 &lt;a href=&quot;https://github.com/VictorRancesCode/&quot;&gt;Victor Rances&lt;/a&gt; 开发。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://pub.dev/packages/intercom&quot;&gt;Intercom&lt;/a&gt; [23⭐] - 将 Intercom 集成到你的应用程序中，由 &lt;a href=&quot;https://github.com/v3rm0n&quot;&gt;Maido Kaara&lt;/a&gt; 开发。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/OneSignal/OneSignal-Flutter-SDK&quot;&gt;OneSignal&lt;/a&gt; [497⭐] - 推送通知服务，由 &lt;a href=&quot;https://github.com/OneSignal&quot;&gt;OneSignal&lt;/a&gt; 开发。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/pinkfish/flutter_places_dialog&quot;&gt;Place Dialog&lt;/a&gt; [45⭐] - 返回应用程序的地点的地点选择对话框，由 &lt;a href=&quot;https://github.com/pinkfish&quot;&gt;David Bennett&lt;/a&gt; 开发。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/AppleEducate/app_review&quot;&gt;App Rating&lt;/a&gt; [30⭐] - 请求和撰写应用商店和 Google Play 的评论，由 &lt;a href=&quot;http://appleeducate.com&quot;&gt;Rody Davis&lt;/a&gt; 开发。&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;框架&quot;&gt;框架&lt;/h2&gt;

&lt;h3 id=&quot;状态管理&quot;&gt;状态管理&lt;/h3&gt;

&lt;h4 id=&quot;standard&quot;&gt;Standard&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/felangel/bloc&quot;&gt;Bloc&lt;/a&gt; [8181⭐] - 一套帮助实现 BLoC 设计模式的包集合，由 &lt;a href=&quot;https://github.com/felangel&quot;&gt;Felix Angelov&lt;/a&gt; 开发。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/mobxjs/mobx.dart&quot;&gt;MobX&lt;/a&gt; [2037⭐] - 使用透明功能响应式编程（TFRP）来增强应用程序中的状态管理。从 Js/React 领域移植的 MobX。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/rrousselGit/provider&quot;&gt;Provider&lt;/a&gt; [3974⭐] - Flutter 的状态管理库，由 &lt;a href=&quot;https://github.com/rrousselGit&quot;&gt;Remi Rousselet&lt;/a&gt; 开发。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/rrousselGit/river_pod&quot;&gt;RiverPod&lt;/a&gt; [2214⭐] - Provider 的不同实现，由 &lt;a href=&quot;https://github.com/rrousselGit&quot;&gt;Remi Rousselet&lt;/a&gt; 开发。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/jonataslaw/getx&quot;&gt;GetX&lt;/a&gt; &lt;!--jonataslaw/getx--&gt; - 无需上下文的状态管理和导航，由 &lt;a href=&quot;https://github.com/jonataslaw&quot;&gt;Jonny Borges&lt;/a&gt; 开发。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/letsar/binder&quot;&gt;Binder&lt;/a&gt; [167⭐] - 一种轻量而强大的将应用程序状态与业务逻辑绑定的方式，由 &lt;a href=&quot;https://github.com/letsar&quot;&gt;Romain Rastel&lt;/a&gt; 开发。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;redux--elm--依赖注入&quot;&gt;Redux / ELM / 依赖注入&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/davidmarne/flutter_built_redux&quot;&gt;Built redux&lt;/a&gt; [81⭐] - 自动订阅 Redux Store 的包。基于 Built 模式，由 &lt;a href=&quot;https://github.com/davidmarne&quot;&gt;David Marne&lt;/a&gt; 开发。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/johnpryan/redux.dart&quot;&gt;Redux.dart&lt;/a&gt; [486⭐] - Redux 在 Dart 中的移植版本，包括一系列的中间件、Flutter 集成和时间旅行开发工具，由 &lt;a href=&quot;https://github.com/johnpryan&quot;&gt;John Ryan&lt;/a&gt; 和 &lt;a href=&quot;https://gitlab.com/users/brianegan/projects&quot;&gt;Brian Egan&lt;/a&gt; 开发。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/brianegan/flutter_redux&quot;&gt;Redux&lt;/a&gt; [1522⭐] - 与 &lt;a href=&quot;https://github.com/johnpryan/redux.dart&quot;&gt;redux.dart&lt;/a&gt; 配合使用的工具，可以轻松使用 Redux Store 构建 Widgets。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/google/inject.dart&quot;&gt;Inject&lt;/a&gt; [847⭐] - 编译时依赖注入，由 Google 开发。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/google/flutter_flux&quot;&gt;Flux&lt;/a&gt; [368⭐] - Google 的 Flux 框架的实现。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/alibaba/fish-redux&quot;&gt;Fish&lt;/a&gt; [7214⭐] - 阿里巴巴的 Redux 实现。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://pub.dev/packages/async_redux&quot;&gt;Async Redux&lt;/a&gt; [199⭐] - 无需样板代码的 Redux。支持同步和异步的 reducer，由 &lt;a href=&quot;https://github.com/marcglasberg/&quot;&gt;Marcelo Glasberg&lt;/a&gt; 开发。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;widgets&quot;&gt;Widgets&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/rrousselGit/flutter_hooks&quot;&gt;Hooks&lt;/a&gt; [1366⭐] - 小部件之间的高级代码共享，由&lt;a href=&quot;https://github.com/rrousselGit&quot;&gt;Remi Rousselet&lt;/a&gt;。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/rrousselGit/functional_widget&quot;&gt;Functional widget&lt;/a&gt; [321⭐] - 代码生成器将小部件作为带有注释的函数编写，由&lt;a href=&quot;https://github.com/rrousselGit&quot;&gt;Remi Rousselet&lt;/a&gt;。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;数据&quot;&gt;数据&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/zino-app/graphql-flutter&quot;&gt;Graphql&lt;/a&gt; [2796⭐] - GraphQL 规范的实现，由 &lt;a href=&quot;https://github.com/zino-app&quot;&gt;Zino App B.V.&lt;/a&gt; 开发。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/DarshanGowda0/GeoFlutterFire&quot;&gt;GeoFlutterFire&lt;/a&gt; [244⭐] - Flutter 的 GeoFirestore 实现，由 &lt;a href=&quot;https://darshann.me/&quot;&gt;Darshan Gowda&lt;/a&gt; 开发。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gql-dart/ferry&quot;&gt;Ferry&lt;/a&gt; [334⭐] - 强大且可扩展的 GraphQL 客户端，由 &lt;a href=&quot;https://github.com/smkhalsa&quot;&gt;Sat Mandir Khalsa&lt;/a&gt; 开发。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;后端&quot;&gt;后端&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/dengyin2000/dynamic_widget&quot;&gt;Dynamic Widget&lt;/a&gt; [1100⭐] - 使用 JSON 构建动态 UI，JSON 格式与 Flutter Widget 代码非常相似，由 &lt;a href=&quot;https://github.com/dengyin2000&quot;&gt;Denny Deng&lt;/a&gt; 开发。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/aldycool/NETCoreSync&quot;&gt;NETCoreSync&lt;/a&gt; - 面向多个客户端的集中式数据库同步框架，基于 &lt;a href=&quot;https://github.com/simolus3/moor&quot;&gt;Moor&lt;/a&gt; 库，由 &lt;a href=&quot;https://github.com/aldycool&quot;&gt;Aldy J&lt;/a&gt; 开发。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/parse-community/Parse-SDK-Flutter/tree/master/packages/flutter&quot;&gt;Parse for Flutter&lt;/a&gt; [394⭐] - 开源的后端框架，由 &lt;a href=&quot;https://parseplatform.org/&quot;&gt;ParsePlatform&lt;/a&gt; 开发。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;动画&quot;&gt;动画&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Norbert515/flutter_sequence_animation&quot;&gt;Sequence Animation&lt;/a&gt; [338⭐] - 由 &lt;a href=&quot;https://twitter.com/norbertkozsir&quot;&gt;Norbert Kozsir&lt;/a&gt; 开发的复合交错动画。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/jogboms/flutter_spinkit&quot;&gt;SpinKit&lt;/a&gt; [2405⭐] - 由 &lt;a href=&quot;https://twitter.com/jogboms&quot;&gt;Jeremiah Ogbomo&lt;/a&gt; 开发的动画加载指示器。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Norbert515/flutter_villains&quot;&gt;Villains&lt;/a&gt; [328⭐] - 由 &lt;a href=&quot;https://twitter.com/norbertkozsir&quot;&gt;Norbert Kozsir&lt;/a&gt; 开发的页面过渡动画。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/aagarwal1012/Animated-Text-Kit&quot;&gt;AnimatedTextKit&lt;/a&gt; [1268⭐] - 由 &lt;a href=&quot;https://github.com/aagarwal1012/&quot;&gt;Ayush Agarwal&lt;/a&gt; 开发的一组酷炫文本动画。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/biocarl/drawing_animation&quot;&gt;Drawing Animation&lt;/a&gt; [384⭐] - 基于 SVG 路径数据创建绘制线条动画，由 &lt;a href=&quot;https://twitter.com/cahaucks&quot;&gt;Carl Hauck&lt;/a&gt; 开发。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/felixblaschke/simple_animations&quot;&gt;Simple Animations&lt;/a&gt; - 由 &lt;a href=&quot;https://github.com/felixblaschke&quot;&gt;Felix Blaschke&lt;/a&gt; 开发，轻松创建令人赞叹的自定义动画。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/efoxTeam/flutter-animation-set&quot;&gt;Flutter-animation-set&lt;/a&gt; [264⭐] - 由 &lt;a href=&quot;https://github.com/efoxTeam&quot;&gt;efoxTeam&lt;/a&gt; 开发，轻松构建动画集合。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/mobiten/flutter_staggered_animations&quot;&gt;Staggered Animations&lt;/a&gt; [977⭐] - 由 &lt;a href=&quot;https://mobiten.com/&quot;&gt;mobiten&lt;/a&gt; 开发，轻松为您的 ListView、GridView、Column 和 Row 添加交错动画。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://pub.dev/packages/animate_do&quot;&gt;Animate Do&lt;/a&gt; - 受 Animate.css 启发的动画包，由 &lt;a href=&quot;https://twitter.com/Fernando_Her85&quot;&gt;Fernando Herrera&lt;/a&gt; 开发。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/creativecreatorormaybenot/funvas&quot;&gt;Funvas&lt;/a&gt; [361⭐] - 由 &lt;a href=&quot;https://twitter.com/creativemaybeno&quot;&gt;creativecreatorormaybenot&lt;/a&gt; 开发，创建有趣的基于时间的画布动画。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;web&quot;&gt;Web&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Codelessly/ResponsiveFramework&quot;&gt;响应式框架&lt;/a&gt; [702⭐] - 自动适应不同屏幕尺寸的用户界面。简化响应式设计，由 &lt;a href=&quot;https://codelessly.com&quot;&gt;Codelessly&lt;/a&gt; 开发。&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;实验性&quot;&gt;实验性&lt;/h2&gt;

&lt;p&gt;本节包含采用实验性或非常规性方法的库。&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/ReinBentdal/styled_widget&quot;&gt;styled_widget&lt;/a&gt; [671⭐] - 通过使用方法定义小部件来简化小部件树结构，由&lt;a href=&quot;https://github.com/ReinBentdal&quot;&gt;Rein Gundersen Bentdal&lt;/a&gt;。&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;引擎&quot;&gt;引擎&lt;/h2&gt;

&lt;h3 id=&quot;渲染&quot;&gt;渲染&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/roipeker/graphx&quot;&gt;Graphx&lt;/a&gt; [293⭐] - 受 Flash 启发，使绘图和动画变得极其简单，由 &lt;a href=&quot;https://github.com/roipeker&quot;&gt;Roi Peker&lt;/a&gt; 开发。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;游戏引擎&quot;&gt;游戏引擎&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/luanpotter/flame&quot;&gt;Flame&lt;/a&gt; [5173⭐] - 极简主义的游戏引擎，由 &lt;a href=&quot;https://github.com/luanpotter&quot;&gt;Luan Nico&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/spritewidget/spritewidget&quot;&gt;SpriteWidget&lt;/a&gt; [1186⭐] - 用于构建复杂，高性能动画和2D游戏的工具包，由&lt;a href=&quot;https://github.com/vlidholt&quot;&gt;Viktor Lidholt&lt;/a&gt;提供。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;开源游戏&quot;&gt;开源游戏&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/RedBrogdon/flutterflip&quot;&gt;Flip&lt;/a&gt; [201⭐] - Reversi 游戏，由 &lt;a href=&quot;https://github.com/RedBrogdon&quot;&gt;Andrew Brogdon&lt;/a&gt; 开发。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/anuranBarman/2048&quot;&gt;2048&lt;/a&gt; [205⭐] - 2048 游戏，由 &lt;a href=&quot;https://github.com/anuranBarman&quot;&gt;Anuran Barman&lt;/a&gt; 开发。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/renancaraujo/trex-flame&quot;&gt;TRex&lt;/a&gt; [316⭐] - 著名 Chrome Trex 游戏的移植版，由 &lt;a href=&quot;https://github.com/renancaraujo&quot;&gt;Renan C. Araújo&lt;/a&gt; 开发。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/boeledi/flutter_crush&quot;&gt;Crush&lt;/a&gt; [409⭐] - 如 Candy Crush、Bejeweled 一样构建 Math-3 游戏的示例，由 &lt;a href=&quot;https://didierboelens.com&quot;&gt;Didier Boelens&lt;/a&gt; 开发。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/kevmoo/slide_puzzle&quot;&gt;Slide Puzzle&lt;/a&gt; [152⭐] - 经典的滑块（15）拼图游戏，由 &lt;a href=&quot;https://github.com/kevmoo&quot;&gt;Kevin Moore&lt;/a&gt; 开发。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/boyan01/flutter-tetris&quot;&gt;Tetris&lt;/a&gt; [1280⭐] - 俄罗斯方块游戏，由 &lt;a href=&quot;https://github.com/boyan01&quot;&gt;YangBin&lt;/a&gt; 开发。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/vintage/party_flutter&quot;&gt;Party Charades&lt;/a&gt; [165⭐] - 派对字谜游戏，由 &lt;a href=&quot;https://github.com/vintage&quot;&gt;Kamil Rykowski&lt;/a&gt; 开发。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Float-like-a-dash-Sting-like-a-dart/GhostRigger&quot;&gt;Ghost Rigger&lt;/a&gt; [159⭐] - 像素朋克风格的拼图游戏，由 &lt;a href=&quot;https://github.com/b099l3&quot;&gt;Iain Smith&lt;/a&gt; 和 &lt;a href=&quot;https://github.com/ernestoyaquello&quot;&gt;Julio Ernesto Rodríguez Cabañas&lt;/a&gt; 开发。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/satyamx64/space_empires&quot;&gt;Space Empires&lt;/a&gt; [32⭐] - 一款 4X 太空主题的策略游戏，由 &lt;a href=&quot;https://github.com/satyamx64&quot;&gt;Satyam Sharma&lt;/a&gt; 开发。&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;游戏引擎资源&quot;&gt;游戏引擎资源&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/flame-engine/awesome-flame&quot;&gt;Awesome Flame&lt;/a&gt;&lt;!--stargazers:flame-engine/awesome-flame--&gt; - Flame 游戏引擎的精选列表，包含最佳 Flame 游戏、项目、库、工具、教程、文章等，由 &lt;a href=&quot;https://github.com/flame-engine&quot;&gt;Flame Engine&lt;/a&gt; 维护。&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;开源app&quot;&gt;开源App&lt;/h2&gt;

&lt;h3 id=&quot;高级-1&quot;&gt;高级&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/2d-inc/HistoryOfEverything&quot;&gt;History Of Everything&lt;/a&gt; [5887⭐] - 人类历史的动画垂直时间线，由 &lt;a href=&quot;https://www.2dimensions.com/&quot;&gt;2D, Inc&lt;/a&gt; 开发。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/2d-inc/developer_quest&quot;&gt;Developer Quest&lt;/a&gt; [2917⭐] - 成为技术领导者，消灭虫子，由 &lt;a href=&quot;https://www.2dimensions.com/&quot;&gt;2D, Inc&lt;/a&gt; 开发。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/AppFlowy-IO/appflowy&quot;&gt;AppFlowy&lt;/a&gt; [12156⭐] - 开源的 Notion 替代方案。你对数据和自定义有绝对控制。使用 Flutter 和 Rust 构建，由 &lt;a href=&quot;https://www.appflowy.io/&quot;&gt;AppFlowy 团队&lt;/a&gt; 开发。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;top&quot;&gt;Top&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/flutter/samples&quot;&gt;Flutter Team Samples&lt;/a&gt; [8245⭐] - 示例集合（包括地图，json，Material和Cupertino） 由 &lt;a href=&quot;https://github.com/orgs/flutter/people&quot;&gt;Flutter team&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/alibaba/flutter-common-widgets-app&quot;&gt;Flutter Common Widgets&lt;/a&gt; [22040⭐] - 收集中文官方小部件演示和文档，以帮助开发人员快速学习，由&lt;a href=&quot;https://github.com/alibaba-paimai-frontend&quot;&gt;Alibaba Auction Frontend Team&lt;/a&gt;。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/efortuna/memechat&quot;&gt;Meme Chat&lt;/a&gt; [471⭐] - 使用Flutter开发的的聊天App，该App用到了Firebase，Google登录，摄像头等。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/dart-flitter/flitter&quot;&gt;Flitter&lt;/a&gt; [178⭐] - 使用Flutter开发的Gitter 客户端，该App用到了Redux 与 Jaguar，由&lt;a href=&quot;https://twitter.com/HadrienLejard&quot;&gt;Hadrien Lejard&lt;/a&gt; 和 &lt;a href=&quot;https://twitter.com/kevin_segaud&quot;&gt;Kevin Segaud&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/fablue/lime-flutter&quot;&gt;Lime&lt;/a&gt; [335⭐] - 使用Flutter开发的Lime客户端。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/sergiandreplace/flutter_planets_tutorial&quot;&gt;Planets&lt;/a&gt; [655] - Flutter Planets app及教程，由&lt;a href=&quot;http://sergiandreplace.com&quot;&gt;Sergi Martínez&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/theankurkedia/NewsBuzz&quot;&gt;NewsBuzz&lt;/a&gt; [444⭐] - 使用News API在Flutter中创建的新闻App用于获取实时数据，Firebase用作后端和身份验证器，由 &lt;a href=&quot;https://github.com/theankurkedia&quot;&gt;Ankur Kedia&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/konifar/droidkaigi2018-flutter&quot;&gt;DroidKaigi2018-flutter&lt;/a&gt; [485⭐] - DroidKaigi 2018东京的非官方会议App ，由&lt;a href=&quot;https://github.com/konifar&quot;&gt;konifar&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/iampawan/Flutter-Music-Player&quot;&gt;Music Player&lt;/a&gt; [1112⭐] - 全功能音乐播放器App，由&lt;a href=&quot;https://about.me/imthepk&quot;&gt;Pawan Kumar&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/burhanrashid52/WhatTodo&quot;&gt;WhatTodo&lt;/a&gt; [761⭐] - Flutter实现的的简单Todo App，可以每天跟踪您的任务，由&lt;a href=&quot;https://about.me/burhanrashid52&quot;&gt;Burhanuddin Rashid&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/mdanics/fluttergram&quot;&gt;FlutterGram&lt;/a&gt; [1454⭐] - 使用Firebase / Firestore实现Flutter版的Instagram App，由&lt;a href=&quot;https://github.com/mdanics&quot;&gt;MDanics&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Norbert515/BookSearch&quot;&gt;BookSearch&lt;/a&gt; [419⭐] - Flutter实现的带有搜索功能的电子书，由&lt;a href=&quot;https://github.com/Norbert515&quot;&gt;Norbert515&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/aaronoe/FlutterCinematic&quot;&gt;Cinematic&lt;/a&gt; [757⭐] - Flutter实现的Cinematic 客户端，由&lt;a href=&quot;https://github.com/aaronoe&quot;&gt;Aaron Oertel&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/benoitletondor/Beer-Me-Up&quot;&gt;Beer-Me-Up&lt;/a&gt; [377⭐] - Flutter实现啤酒日志App，由&lt;a href=&quot;https://github.com/benoitletondor&quot;&gt;Benoit Letondor&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/trentpiercy/trace&quot;&gt;Trace&lt;/a&gt; [573⭐] - 现代而强大的加密投资组合和市场资源管理器，由 &lt;a href=&quot;https://github.com/trentpiercy&quot;&gt;Trent Piercy&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/huextrat/Taskist&quot;&gt;Taskist&lt;/a&gt; [549⭐] - Taskist是任务管理的ToDo List App，由 &lt;a href=&quot;https://github.com/huextrat&quot;&gt;Hugo EXTRAT&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/bluemix/tourism-demo&quot;&gt;Tourism&lt;/a&gt; [213⭐] - 基于redux w / animations＆i18n的旅游应用程序，由 &lt;a href=&quot;https://github.com/bluemix/tourism-demo&quot;&gt;blueMix&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/matthewtory/trinity-orientation-2018&quot;&gt;Trinity Orientation @ Univ Toronto&lt;/a&gt; [454⭐] - 多伦多大学迎新周，由 &lt;a href=&quot;https://github.com/matthewtory&quot;&gt;Matthew Tory&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/DrPaulT/flutter-engine-test&quot;&gt;Transform Widget&lt;/a&gt; - 图像小部件作为3D游戏引擎精灵，由&lt;a href=&quot;https://github.com/DrPaulT&quot;&gt;Paul Thomas&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/aleksanderwozniak/deer&quot;&gt;Deer&lt;/a&gt; [238⭐] - 使用BLoC模式构建的简约Todo Planner，由&lt;a href=&quot;https://github.com/aleksanderwozniak&quot;&gt;Aleksander Woźniak&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/jogboms/tailor_made&quot;&gt;TailorMade&lt;/a&gt; [210⭐] - 结合使用ReBLoC和Firebase Cloud Store和功能来管理时装设计师的日常工作，由&lt;a href=&quot;https://twitter.com/jogboms&quot;&gt;Jeremiah Ogbomo&lt;/a&gt;。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/InvertedX/instory&quot;&gt;Instory&lt;/a&gt; [173⭐] - 具有精美UI的Instagram故事下载器，由&lt;a href=&quot;https://twitter.com/_sarath_kumar&quot;&gt;Sarath&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/jesusrp98/spacex-go&quot;&gt;Spacex-Go&lt;/a&gt; [492⭐] - 简单但功能强大的开源SpaceX启动跟踪器，由&lt;a href=&quot;https://twitter.com/jesusrp98&quot;&gt;jesusrp98&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/pinkeshdarji/SuperHeroInteraction&quot;&gt;Superhero Interaction&lt;/a&gt; [208⭐] - 酷超级英雄互动动画，由&lt;a href=&quot;https://github.com/pinkeshdarji&quot;&gt;Pinkesh Darji&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/flschweiger/reply&quot;&gt;Reply&lt;/a&gt; [469⭐] - “答复”材料设计案例研究，由&lt;a href=&quot;https://github.com/flschweiger&quot;&gt;Frederik Schweiger&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/AmitJoki/Enigma&quot;&gt;Enigma&lt;/a&gt; - 端到端加密的隐私聊天，由&lt;a href=&quot;https://github.com/AmitJoki&quot;&gt;AmitJoki&lt;/a&gt;。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/KarimElghamry/chillify&quot;&gt;Chillify&lt;/a&gt; - 使用Provider和Bloc模式制作的精美音乐应用，由&lt;a href=&quot;https://github.com/KarimElghamry&quot;&gt;Karim Elghamry&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/scitbiz/flutter_pokedex&quot;&gt;Pokedex&lt;/a&gt; - Pokedex应用程序具有精美的用户界面和流畅的动画，由&lt;a href=&quot;https://github.com/scitbiz&quot;&gt;Hung Pham&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/janoodleFTW/timy-messenger&quot;&gt;Timy Messenger&lt;/a&gt; [1504⭐] - 群发消息应用程序，重点是组织活动，由&lt;a href=&quot;https://github.com/miquelbeltran&quot;&gt;Miguel Beltran&lt;/a&gt; 与 &lt;a href=&quot;https://github.com/fheinfling&quot;&gt;Franz Heinfling&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/GitJournal/GitJournal&quot;&gt;GitJournal&lt;/a&gt; [507⭐] - 在Git Repo中记录数据，由&lt;a href=&quot;https://github.com/vHanda&quot;&gt;Vishesh Handa&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/authpass/authpass&quot;&gt;AuthPass&lt;/a&gt; [372⭐] - 与手机和台式机兼容的Keepass密码管理器，由&lt;a href=&quot;https://github.com/hpoul&quot;&gt;hpoul&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/TheAlphamerc/flutter_twitter_clone&quot;&gt;Fwitter&lt;/a&gt; [852⭐] - 使用Firebase解决方案的完整Twitter克隆，由&lt;a href=&quot;https://github.com/TheAlphamerc&quot;&gt;Sonu Sharma&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/robertodoering/harpy&quot;&gt;Harpy&lt;/a&gt; [825⭐] - 由&lt;a href=&quot;https://github.com/robertodoering&quot;&gt;Roberto Doering&lt;/a&gt;开发的功能丰富的Twitter客户端。&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;实用工具&quot;&gt;实用工具&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.devio.org/io/tools/json-to-dart/&quot;&gt;json-to-dart&lt;/a&gt; - JSON在线转Dart工具，支持空安全&lt;img src=&quot;http://www.devio.org/img/ico/ico_new.gif&quot; alt=&quot; new&quot; /&gt;。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/franzsilva/flutter_launcher_icons&quot;&gt;Launcher Icons&lt;/a&gt; - 由 &lt;a href=&quot;https://github.com/MarkOSullivan94&quot;&gt;Mark O’Sullivan&lt;/a&gt; 和 &lt;a href=&quot;https://github.com/franzsilva&quot;&gt;Franz Silva&lt;/a&gt; 轻松生成应用程序的启动器图标。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://fluttericon.com/&quot;&gt;FlutterIcon&lt;/a&gt; [310⭐] - 由 &lt;a href=&quot;https://github.com/ilikerobots&quot;&gt;Mike Hoolehan&lt;/a&gt; 创建的图标集生成器。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/leoafarias/fvm&quot;&gt;FVM&lt;/a&gt; [2233⭐] - Flutter版本管理：一个简单的命令行工具，用于管理Flutter SDK的版本。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/TatsuUkraine/dart_environment_config&quot;&gt;Environment Configuration&lt;/a&gt; [86⭐] - CLI工具，用于为应用程序环境生成&lt;code class=&quot;highlighter-rouge&quot;&gt;.env&lt;/code&gt;配置文件，由 &lt;a href=&quot;https://github.com/TatsuUkraine&quot;&gt;TatsuUkraine&lt;/a&gt; 创建。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/AngeloAvv/flutter_flavorizr&quot;&gt;Flutter Flavorizr&lt;/a&gt; [160⭐] - CLI实用工具，可在不到3分钟的时间内轻松为Android和iOS生成不同的应用程序风格，由 &lt;a href=&quot;https://github.com/AngeloAvv&quot;&gt;Angelo Cassano&lt;/a&gt; 创建。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/westracer/fontify&quot;&gt;Fontify&lt;/a&gt; [77⭐] - CLI工具，用于将SVG图标转换为OTF字体并生成适用于Flutter的类，由 &lt;a href=&quot;https://github.com/westracer&quot;&gt;Igor Kharakhordin&lt;/a&gt; 创建。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/FlutterGen/flutter_gen&quot;&gt;FlutterGen&lt;/a&gt; [791⭐] - 用于生成图像、字体、颜色等的资产代码的生成器，摆脱基于字符串的API。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/VeryGoodOpenSource/very_good_cli&quot;&gt;Very Good Cli&lt;/a&gt; [1135⭐] - Dart的非常好的命令行界面工具，由 &lt;a href=&quot;https://github.com/VeryGoodOpenSource&quot;&gt;Very Good Ventures&lt;/a&gt; 创建。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/leoafarias/sidekick&quot;&gt;Flutter Sidekick&lt;/a&gt; [544⭐] - 简单的应用程序，使Flutter开发更加愉快，由 &lt;a href=&quot;https://github.com/leoafarias&quot;&gt;Leo Farias&lt;/a&gt; 创建。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/dart-code-checker/dart-code-metrics&quot;&gt;Dart Code Metrics&lt;/a&gt; [430⭐] - 附加的代码度量标准检查工具，检查代码度量、反模式，并为Dart分析器提供额外的规则，由 &lt;a href=&quot;https://github.com/dart-code-checker&quot;&gt;Dart Code Checker团队&lt;/a&gt; 创建。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;vscode&quot;&gt;VSCode&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=Nash.awesome-flutter-snippets&quot;&gt;Awesome Snippets&lt;/a&gt; - 常用类和方法的集合，由&lt;a href=&quot;https://twitter.com/Nash0x7E2&quot;&gt;Nash&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=gornivv.vscode-flutter-files&quot;&gt;Flutter Files&lt;/a&gt; - 通过上下文菜单快速生成BLoC模板文件，由&lt;a href=&quot;https://github.com/gorniv&quot;&gt;Gorniv&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=localizely.flutter-intl&quot;&gt;Flutter Intl&lt;/a&gt; - i18n从arb文件绑定，由&lt;a href=&quot;https://twitter.com/localizely&quot;&gt;Localizely&lt;/a&gt;提供。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;intellij--android-studio&quot;&gt;IntelliJ / Android Studio&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/marius-h/flutter_enhancement_suite&quot;&gt;Enhancement_Suite&lt;/a&gt; [118⭐] - 搜索pub.dev库，更新版本，Bloc，Snippet等，由&lt;a href=&quot;https://github.com/marius-h&quot;&gt;Marius Höfler&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://plugins.jetbrains.com/plugin/13666-flutter-intl&quot;&gt;Flutter Intl&lt;/a&gt; - 从Arb文件进行18n绑定，由&lt;a href=&quot;https://twitter.com/localizely&quot;&gt;Localizely&lt;/a&gt;提供。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;桌面应用&quot;&gt;桌面应用&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/google/flutter-desktop-embedding&quot;&gt;Desktop Embedding&lt;/a&gt; [6950⭐] - Google提供的Flutter嵌入API的桌面实现。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/go-flutter-desktop/go-flutter&quot;&gt;Golang Desktop Embedder&lt;/a&gt; [5083⭐] - Golang桌面应用的Flutter嵌入器，由&lt;a href=&quot;https://github.com/pchampio&quot;&gt;Pierre Champion&lt;/a&gt;开发。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/nativeshell/nativeshell&quot;&gt;Native Shell&lt;/a&gt; [372⭐] - Flutter的实验性嵌入器，由&lt;a href=&quot;https://twitter.com/matejknopp&quot;&gt;Matej Knopp&lt;/a&gt;开发。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gliheng/flutter-rs&quot;&gt;Rust Desktop Embedder&lt;/a&gt; [1871⭐] - Rust桌面应用的Flutter嵌入器，由&lt;a href=&quot;https://github.com/gliheng&quot;&gt;juju&lt;/a&gt;开发。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/bitsdojo/bitsdojo_window&quot;&gt;bitsdojo_window&lt;/a&gt; &lt;!--bitsdojo/bitsdojo_window--&gt; - 自定义Windows窗口的绘制样式，由&lt;a href=&quot;https://github.com/bitsdojo&quot;&gt;BitsDojo&lt;/a&gt;开发。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/ardera/flutter-pi&quot;&gt;Raspberry Pi Embedder&lt;/a&gt; [747⭐] - 适用于树莓派的轻量级嵌入器，由&lt;a href=&quot;https://github.com/ardera&quot;&gt;Hannes Winkler&lt;/a&gt;开发。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/bdlukaa/fluent_ui&quot;&gt;Fluent UI&lt;/a&gt; [566⭐] - Microsoft的Fluent Design System在Flutter中的实现，由&lt;a href=&quot;https://twitter.com/bdlukaadev&quot;&gt;Bruno D’Luka&lt;/a&gt;开发。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/GroovinChip/macos_ui&quot;&gt;MacOS UI&lt;/a&gt; [492⭐] - 实现当前MacOS设计语言的小部件和主题，由&lt;a href=&quot;https://twitter.com/GroovinChip&quot;&gt;Groovin Chip&lt;/a&gt;开发。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/ubuntu/yaru.dart&quot;&gt;Ubuntu Yaru&lt;/a&gt; [134⭐] - Ubuntu桌面的独特外观和风格，由&lt;a href=&quot;https://github.com/ubuntu&quot;&gt;Ubuntu&lt;/a&gt;开发。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/leanflutter/awesome-flutter-desktop&quot;&gt;Awesome Flutter Desktop&lt;/a&gt; [516⭐] - 与Flutter桌面相关的精选资源列表，由&lt;a href=&quot;https://github.com/leanflutter&quot;&gt;LeanFlutter&lt;/a&gt;维护。&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;书籍&quot;&gt;书籍&lt;/h2&gt;

&lt;h3 id=&quot;适应于初学者&quot;&gt;适应于初学者&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.amazon.com/Beginning-App-Development-Flutter-Cross-Platform/dp/1484251806&quot;&gt;Beginning App Development&lt;/a&gt; -，由&lt;a href=&quot;https://github.com/rapPayne&quot;&gt;Rap Payne&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.amazon.com/Beginning-Flutter-Hands-Guide-Development/dp/1119550823&quot;&gt;Beginning Flutter&lt;/a&gt; -，由&lt;a href=&quot;https://github.com/JediPixels&quot;&gt;Marco Napoli&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.amazon.com/Flutter-Beginners-introductory-cross-platform-applications/dp/1788996089&quot;&gt;Flutter for Beginners&lt;/a&gt; -，由&lt;a href=&quot;https://github.com/biessek&quot;&gt;Alessandro Biessek&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.manning.com/books/flutter-in-action?a_aid=flutterinaction&amp;amp;a_bid=d08c3247&quot;&gt;Flutter in Action&lt;/a&gt; - 完整的 Flutter 和 Dart 资源。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.amazon.com/Learn-Google-Flutter-Fast-Example/dp/1092297375&quot;&gt;Learn Google Flutter Fast&lt;/a&gt; -，由&lt;a href=&quot;https://github.com/markclow&quot;&gt;Mark Clow&lt;/a&gt;提供。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;cookbooks&quot;&gt;Cookbooks&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.amazon.com/Practical-Flutter-Improve-Development-Open-Source/dp/1484249712&quot;&gt;Practical Flutter&lt;/a&gt; -，由&lt;a href=&quot;https://github.com/fzammetti&quot;&gt;Frank Zammetti&lt;/a&gt;提供。&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;博客&quot;&gt;博客&lt;/h2&gt;

&lt;h3 id=&quot;中文&quot;&gt;中文&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.devio.org/tags/#Flutter&quot;&gt;Flutter 中文博客&lt;/a&gt; - 由&lt;a href=&quot;http://www.imooc.com/t/4951150&quot;&gt;CrazyCodeBoy&lt;/a&gt;倾力打造。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;英语&quot;&gt;英语&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://open.spotify.com/show/2qJVeu47e2eAum4j7lxXXv?si=d26QVJQsSRyRHeybfL_01Q&quot;&gt;It’s all widgets! Flutter podcast&lt;/a&gt; - 由&lt;a href=&quot;https://twitter.com/hillelcoren&quot;&gt;Hillel Coren&lt;/a&gt;主持。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;葡萄牙语&quot;&gt;葡萄牙语&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://open.spotify.com/show/4AlxqGkkrqe0mfIx3Mi7Xt?si=1eC0a22MR1OkEAT7HErT-A&quot;&gt;Universo Flutter&lt;/a&gt; - 由&lt;a href=&quot;http://deandreamatias.com/&quot;&gt;Matias de Andrea&lt;/a&gt;主持。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;西班牙语&quot;&gt;西班牙语&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://open.spotify.com/show/3QUTYR6jspNxHK8akJFxYf?si=MZtgjIMyTi6-WgN9Go6vZQ&quot;&gt;Código Flutter&lt;/a&gt; - 由&lt;a href=&quot;https://guillermogarcia.es/&quot;&gt;Guillermo García&lt;/a&gt;主持。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;俄语&quot;&gt;俄语&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://open.spotify.com/show/5qc1VFD4pkJlUYZBVTOFCI?si=OWn7VCELRO2QV03Gi2u8nA&amp;amp;nd=1&quot;&gt;Flutter Dev Podcast&lt;/a&gt; - 由&lt;a href=&quot;https://twitter.com/saturovv&quot;&gt;Eugene Saturov&lt;/a&gt;主持。&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;附加&quot;&gt;附加&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://itsallwidgets.com&quot;&gt;It’s All Widgets!&lt;/a&gt; - 由&lt;a href=&quot;https://twitter.com/hillelcoren&quot;&gt;Hillel Coren&lt;/a&gt;，&lt;a href=&quot;https://twitter.com/ThomasBurkhartB&quot;&gt;Thomas Burkhart&lt;/a&gt;，&lt;a href=&quot;https://twitter.com/devangelslondon&quot;&gt;Simon Lightfoot&lt;/a&gt;和&lt;a href=&quot;https://twitter.com/scottstoll2017&quot;&gt;Scott Stoll&lt;/a&gt;共同维护的已发布应用程序的开放列表。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/jpnurmi/awesome-flutter-linux&quot;&gt;Awesome Flutter Linux&lt;/a&gt; - 由&lt;a href=&quot;https://twitter.com/jpnurmi&quot;&gt;J-P Nurmi&lt;/a&gt;维护的精选的专为Linux的Flutter软件包和项目的列表。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;好玩的&quot;&gt;好玩的&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=sIIgtClYq0s&quot;&gt;The One&lt;/a&gt; [381👍] -  一个有趣的视频。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;硬件&quot;&gt;硬件&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/bus710/matrix2&quot;&gt;Matrix2&lt;/a&gt; - 由&lt;a href=&quot;https://github.com/bus710&quot;&gt;bus710&lt;/a&gt;开发的Sense Hat LED矩阵控制游戏。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;指南和面试&quot;&gt;指南和面试&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/whatsupcoders/Flutter-Interview-Questions&quot;&gt;面试问题&lt;/a&gt; - 一份有帮助的问题列表，可以用来面试潜在候选人，由&lt;a href=&quot;https://github.com/whatsupcoders/Whatsupcoders-flutter&quot;&gt;Whatsupcoders&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://medium.com/flutter-community/intl-flutter-starter-kit-18415e739fb6&quot;&gt;国际化Flutter入门套件&lt;/a&gt; - 由专家编写的指南，由&lt;a href=&quot;https://twitter.com/BeyzaSunayGler1&quot;&gt;Beyza Sunay Guler&lt;/a&gt;和&lt;a href=&quot;https://twitter.com/__nawalhmw&quot;&gt;Nawal Alhamwi&lt;/a&gt;提供。&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;社区&quot;&gt;社区&lt;/h2&gt;

&lt;h3 id=&quot;演讲材料&quot;&gt;演讲材料&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://drive.google.com/drive/folders/1GDGdQ0ghrxTNTx6aZLT41eV5sPZvV7bU&quot;&gt;Logo&lt;/a&gt; - 贴纸印象的logo。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;交流&quot;&gt;交流&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://gitter.im/flutter/flutter&quot;&gt;Gitter&lt;/a&gt; - 一个不错的Flutter交流渠道。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.reddit.com/r/FlutterDev/&quot;&gt;r/FlutterDev Subreddit&lt;/a&gt; - Reddit社区，由 &lt;a href=&quot;https://www.reddit.com/user/JaapVermeulen&quot;&gt;u/JaapVermeulen&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://discord.gg/N7Yshp4&quot;&gt;Discord&lt;/a&gt; - Discord服务器讨论并获得帮助，由[Pritykin]提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://discord.gg/N7Yshp4&quot;&gt;Dev Discord&lt;/a&gt; - Discord服务器讨论并获得帮助，由 &lt;a href=&quot;https://twitter.com/AndrewPritykin&quot;&gt;Pritykin&lt;/a&gt;提供。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/fluttercommunity&quot;&gt;Flutter Community&lt;/a&gt; - Flutter社区组件中心。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/OpenFlutter&quot;&gt;OpenFlutter&lt;/a&gt; - Make it easier 让Flutter更简单.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://hashnode.com/n/flutter&quot;&gt;Hashnode&lt;/a&gt; - 阅读和撰写帖子，参与讨论或提问。&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;其他&quot;&gt;其他&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://flutterevents.com&quot;&gt;Flutter活动&lt;/a&gt; - 由&lt;a href=&quot;https://twitter.com/hillelcoren&quot;&gt;@hillelcoren&lt;/a&gt;创建的Flutter活动列表。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://flutterx.com&quot;&gt;FlutterX&lt;/a&gt; - 由&lt;a href=&quot;https://twitter.com/hillelcoren&quot;&gt;Hillel Coren&lt;/a&gt;创建的可搜索资源列表。&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;最后&quot;&gt;最后&lt;/h2&gt;

&lt;blockquote&gt;
  &lt;p&gt;Flutter精彩课程推荐&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://u.cboy.me/ss/u?cid=672&amp;amp;aid=8&amp;amp;platform=devio&quot;&gt;ChatGPT + Flutter快速开发多端聊天机器人App&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://api.devio.org/ss/u?cid=487&amp;amp;aid=4&amp;amp;platform=devio&quot;&gt;Flutter高级进阶实战 仿哔哩哔哩APP&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://api.devio.org/ss/u?cid=741&amp;amp;aid=4&amp;amp;platform=devio&quot;&gt;全新Flutter从入门到进阶，实战仿携程网App&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Sat, 20 May 2023 00:00:00 +0800</pubDate>
        <link>http://localhost:4000/2023/05/20/flutter-learning-resource/</link>
        <guid isPermaLink="true">http://localhost:4000/2023/05/20/flutter-learning-resource/</guid>
        
        <category>Flutter</category>
        
        <category>Flutter教程</category>
        
        
      </item>
    
      <item>
        <title>Google I/O 2023 推出Flutter 3.10 快来看看都有哪些变化</title>
        <description>&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/20230514/Google%20I%3AO-2023.jpg&quot; alt=&quot;Google I/O 2023&quot; /&gt;&lt;/p&gt;

&lt;p&gt;今年的Google I/O满满的&lt;a href=&quot;https://u.cboy.me/ss/u?cid=672&amp;amp;aid=6&amp;amp;platform=devio&quot;&gt;AI与狠活&lt;/a&gt;，而且还推出&lt;a href=&quot;https://u.cboy.me/ss/u?cid=672&amp;amp;aid=6&amp;amp;platform=devio&quot;&gt;Flutter 3.10&lt;/a&gt;，接下来就让我带你一起来看看&lt;a href=&quot;https://u.cboy.me/ss/u?cid=672&amp;amp;aid=6&amp;amp;platform=devio&quot;&gt;Flutter 3.10&lt;/a&gt;都有哪些变化吧！&lt;/p&gt;

&lt;p&gt;说起，&lt;a href=&quot;https://u.cboy.me/ss/u?cid=672&amp;amp;aid=6&amp;amp;platform=devio&quot;&gt;AI与Flutter 3.10&lt;/a&gt;，不得不提的是《&lt;a href=&quot;https://u.cboy.me/ss/u?cid=672&amp;amp;aid=6&amp;amp;platform=devio&quot;&gt;ChatGPT + Flutter快速开发多端聊天机器人App&lt;/a&gt;》这门有主流AI技术和最新Flutter加持的课程。它&lt;a href=&quot;https://u.cboy.me/ss/u?cid=672&amp;amp;aid=5&amp;amp;platform=devio&quot;&gt;⭐整合了ChatGPT与Flutter高级技术，手把手带你从0到1开发一款可运行在多端的聊天机器人App，帮助你抓住机遇，快速具备AI运用能力，成为移动端领域的AI高手👏&lt;/a&gt;。&lt;/p&gt;

&lt;p&gt;接下来我们回到正题，首先看此次更新的亮点：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;发布了Dart 3，并引入到&lt;a href=&quot;https://u.cboy.me/ss/u?cid=672&amp;amp;aid=6&amp;amp;platform=devio&quot;&gt;Flutter 3.10&lt;/a&gt;中；&lt;/li&gt;
  &lt;li&gt;iOS 默认使用了 Impeller；&lt;/li&gt;
  &lt;li&gt;Material更新到了M3版本，并且很多控件在M3版本下都有更新；&lt;/li&gt;
  &lt;li&gt;Web 可以无iframe 嵌套到其他应用；&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;另外，&lt;a href=&quot;https://u.cboy.me/ss/u?cid=672&amp;amp;aid=6&amp;amp;platform=devio&quot;&gt;Flutter 3.10&lt;/a&gt;还包括许多Web、移动端、图形、安全等方面的改进。&lt;/p&gt;

&lt;h2 id=&quot;引擎engine方面的更新&quot;&gt;引擎（Engine）方面的更新&lt;/h2&gt;

&lt;h3 id=&quot;impeller&quot;&gt;Impeller&lt;/h3&gt;

&lt;p&gt;在3.7稳定版本中，Flutter官方在iOS上预览了&lt;a href=&quot;https://docs.flutter.dev/perf/impeller&quot;&gt;Impeller&lt;/a&gt;。自那时以来，Flutter官方收到了许多用户的宝贵反馈，并加以解决。在此版本中，Impeller有超过250个提交，Flutter官方将Impeller设为iOS上的默认渲染器。使用&lt;a href=&quot;https://u.cboy.me/ss/u?cid=672&amp;amp;aid=6&amp;amp;platform=devio&quot;&gt;Flutter 3.10&lt;/a&gt;构建的所有iOS应用默认使用Impeller。这些iOS应用将具有更少的卡顿和更稳定的性能。&lt;/p&gt;

&lt;p&gt;自3.7版本以来，Impeller在iOS上改善了其内存占用。Impeller使用更少的渲染通道和中间渲染目标。在较新的iPhone上，启用有损纹理压缩可以减小内存占用，而不影响保真度。这些改进也显著提高了iPad的性能。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/20230514/af293dfef4b111edb542acde48001122.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;以”Wonderous”应用中的”pull quote”屏幕为例。这些改进将几乎减少了这些屏幕的一半内存占用。减少内存使用还使GPU和CPU的负载稍微降低。”Wonderous”应用可能无法察觉到负载的降低。之前它的帧已经在预算范围内渲染，但这一变化应延长电池的使用寿命。&lt;/p&gt;

&lt;p&gt;Impeller还能够更快地实现受欢迎的功能请求。其中一个例子是在iOS上支持更广泛的P3色彩范围。有关该功能的描述，请查看本文的其他部分。&lt;/p&gt;

&lt;p&gt;社区的贡献加快了Flutter官方的进展，尤其是GitHub用户&lt;a href=&quot;https://github.com/ColdPaleLight&quot;&gt;ColdPaleLight&lt;/a&gt;和&lt;a href=&quot;https://github.com/luckysmg&quot;&gt;luckysmg&lt;/a&gt;。他们编写了多个与Impeller相关的补丁，提高了保真度和性能。&lt;/p&gt;

&lt;p&gt;虽然Impeller满足了大多数Flutter应用的渲染需求，但你可以选择退出Impeller。如果选择退出，请考虑在GitHub上提交问题，告诉Flutter官方原因。应用用户可能会注意到Skia和Impeller在渲染方面存在细微差异。这些差异可能是错误，因此请不要犹豫提交问题。在未来的版本中，Flutter官方将删除iOS上的旧版Skia渲染器，以减小Flutter的大小。&lt;/p&gt;

&lt;p&gt;Impeller的Vulkan后端仍在持续开发中。Impeller在Android上仍处于积极开发阶段，但尚未准备好进行预览。Flutter官方计划在不久的将来分享更多相关内容。&lt;/p&gt;

&lt;p&gt;要了解Flutter官方的进展，请查看&lt;a href=&quot;https://github.com/orgs/flutter/projects/21&quot;&gt;Flutter官方的GitHub项目板&lt;/a&gt;。&lt;/p&gt;

&lt;h2 id=&quot;与性能performance有关的更新&quot;&gt;&lt;a href=&quot;https://u.cboy.me/ss/u?cid=672&amp;amp;aid=6&amp;amp;platform=devio&quot;&gt;与性能（Performance）有关的更新&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;3.10版本除了Impeller之外，还包含了更多性能改进和修复。&lt;/p&gt;

&lt;h3 id=&quot;消除卡顿&quot;&gt;消除卡顿&lt;/h3&gt;

&lt;p&gt;Flutter官方要感谢开源贡献者&lt;a href=&quot;https://github.com/luckysmg&quot;&gt;luckysmg&lt;/a&gt;。他们发现可以从Metal驱动程序中减少获取下一个可绘制层的时间。要获得此优势，你需要将&lt;code class=&quot;highlighter-rouge&quot;&gt;FlutterViews&lt;/code&gt;的背景颜色设置为非空值。这个改变消除了在最新的iOS 120Hz显示器上的低帧率问题。在某些情况下，帧率提高了&lt;strong&gt;三倍&lt;/strong&gt;。这帮助Flutter官方解决了六个以上的GitHub问题。这个改变非常重要，Flutter官方将一个修复补丁回溯到了3.7版本中。&lt;/p&gt;

&lt;p&gt;在3.7稳定版中，Flutter官方将本地图片的加载从平台线程移到Dart线程，以避免延迟平台线程的vsync事件。然而，用户注意到这个在Dart线程上的额外工作也引起了一些卡顿问题。在此版本中，Flutter官方将本地图片的打开和解码从Dart线程移到了&lt;a href=&quot;https://github.com/flutter/engine/pull/39918&quot;&gt;后台线程&lt;/a&gt;。这个改变消除了在具有大量本地图片的屏幕上可能出现的长时间暂停，同时避免了延迟vsync事件。在Flutter官方的本地测试和自动化基准测试中，这个改变将多个同时加载的图片的加载时间缩短了一半。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/20230514/af4e3794f4b111edb542acde48001122.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Flutter官方继续在Flutter的新内部DisplayList结构之上构建优化。在此版本中，Flutter官方添加了基于&lt;a href=&quot;https://github.com/flutter/engine/pull/38429&quot;&gt;R-Tree的剔除&lt;/a&gt;机制。该机制在渲染器中更早地删除绘制操作的处理。这个优化加速了，例如，一个输出在屏幕外的自定义绘制器的渲染。Flutter官方的微基准测试显示，DisplayList处理时间减少了多达50%。具有裁剪的自定义绘制器的改进效果可能会有所不同。改进程度取决于隐藏绘制操作的复杂性和数量。&lt;/p&gt;

&lt;h3 id=&quot;减少ios启动延迟&quot;&gt;减少iOS启动延迟&lt;/h3&gt;

&lt;p&gt;在应用程序包中进行标识符查找的低效策略增加了应用程序的启动延迟。这个启动延迟与应用程序的大小成比例增长。在此版本中，Flutter官方修复了&lt;a href=&quot;https://github.com/flutter/engine/pull/39975&quot;&gt;应用程序包标识符查找的问题&lt;/a&gt;。这将大型生产应用程序的启动延迟减少了100毫秒，约为30-50%。&lt;/p&gt;

&lt;h3 id=&quot;减小体积&quot;&gt;减小体积&lt;/h3&gt;

&lt;p&gt;Flutter默认使用&lt;code class=&quot;highlighter-rouge&quot;&gt;SkParagraph&lt;/code&gt;作为文本成型、布局和渲染的默认库，Flutter官方添加了一个标志以回退到传统的&lt;code class=&quot;highlighter-rouge&quot;&gt;libtxt&lt;/code&gt;和&lt;code class=&quot;highlighter-rouge&quot;&gt;minikin&lt;/code&gt;库。由于Flutter官方对&lt;code class=&quot;highlighter-rouge&quot;&gt;SkParagraph&lt;/code&gt;有充分的信心，所以在此版本中Flutter官方移除了&lt;code class=&quot;highlighter-rouge&quot;&gt;libtxt&lt;/code&gt;和&lt;code class=&quot;highlighter-rouge&quot;&gt;minikin&lt;/code&gt;及其标志。这将减小Flutter的压缩大小约30KB。&lt;/p&gt;

&lt;h3 id=&quot;稳定性&quot;&gt;稳定性&lt;/h3&gt;

&lt;p&gt;在3.0版本中，Flutter官方在渲染流程的后期启用了一项Android功能。这个Android功能使用了高级GPU驱动程序功能。当只有一个“脏”区域发生变化时，这些驱动程序功能只会重新绘制屏幕的较少部分。Flutter官方通过早期的优化和类似效果的图形流水线进一步改进了这一点。尽管Flutter官方的基准测试结果鼓励Flutter官方这么做，但出现了两个问题。首先，最大改进的基准测试可能不能代表实际使用情况。其次，支持此GPU驱动程序功能的设备和Android版本的范围证明很难找到。考虑到进展有限并且支持有限，Flutter官方在Android上&lt;a href=&quot;https://github.com/flutter/engine/pull/40898&quot;&gt;禁用了&lt;/a&gt;部分重新绘制功能。&lt;/p&gt;

&lt;p&gt;在Skia后端上，此功能在iOS上仍然启用。Flutter官方预计在未来的版本中与Impeller一起&lt;a href=&quot;https://github.com/flutter/flutter/issues/124526&quot;&gt;启用它&lt;/a&gt;。&lt;/p&gt;

&lt;h2 id=&quot;两个api改进&quot;&gt;两个API改进&lt;/h2&gt;

&lt;p&gt;在&lt;a href=&quot;https://u.cboy.me/ss/u?cid=672&amp;amp;aid=6&amp;amp;platform=devio&quot;&gt;Flutter 3.10&lt;/a&gt;中APNG解码器与图像加载API有所改进。&lt;/p&gt;

&lt;h3 id=&quot;apng解码器&quot;&gt;APNG解码器&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://u.cboy.me/ss/u?cid=672&amp;amp;aid=6&amp;amp;platform=devio&quot;&gt;Flutter 3.10&lt;/a&gt;解决了Flutter官方最受关注的问题之一。它&lt;a href=&quot;https://github.com/flutter/engine/pull/31098&quot;&gt;增加了&lt;/a&gt;对&lt;code class=&quot;highlighter-rouge&quot;&gt;APNG&lt;/code&gt;图像的解码能力。你可以使用Flutter现有的图像加载API加载&lt;code class=&quot;highlighter-rouge&quot;&gt;APNG&lt;/code&gt;图像。&lt;/p&gt;

&lt;h3 id=&quot;图像加载api改进&quot;&gt;图像加载API改进&lt;/h3&gt;

&lt;p&gt;Flutter备受尊敬的工程总监&lt;a href=&quot;https://github.com/tvolkert&quot;&gt;tvolkert&lt;/a&gt;对&lt;code class=&quot;highlighter-rouge&quot;&gt;dart:ui&lt;/code&gt;的图像加载API进行了改进。Flutter官方添加了一个&lt;a href=&quot;https://master-api.flutter.dev/flutter/dart-ui/instantiateImageCodecWithSize.html&quot;&gt;新方法&lt;/a&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;instantiateImageCodecWithSize&lt;/code&gt;。它支持以下三个条件的图像加载用例：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;加载时纵横比未知&lt;/li&gt;
  &lt;li&gt;有边界框约束&lt;/li&gt;
  &lt;li&gt;原始纵横比约束&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;例如，当应用程序尝试从一组可能性中从网络加载并显示一张图片时。&lt;/p&gt;

&lt;h2 id=&quot;与移动端mobile有关的更新&quot;&gt;与移动端（Mobile）有关的更新&lt;/h2&gt;

&lt;h3 id=&quot;ios&quot;&gt;iOS&lt;/h3&gt;

&lt;h4 id=&quot;无线调试&quot;&gt;无线调试&lt;/h4&gt;

&lt;p&gt;现在，你可以在不使用数据线的情况下运行和热重载Flutter iOS应用程序了！在成功将iOS设备与Xcode进行无线配对后，你可以使用&lt;code class=&quot;highlighter-rouge&quot;&gt;flutter run&lt;/code&gt;命令将应用程序部署到该设备上。如果遇到问题，请确保&lt;strong&gt;Window &amp;gt; Devices&lt;/strong&gt;和&lt;strong&gt;Simulators &amp;gt; Devices&lt;/strong&gt;下显示了设备旁边的网络图标。要了解更多信息，请查看Flutter官方的&lt;a href=&quot;https://docs.flutter.dev/get-started/install/macos#ios-setup&quot;&gt;文档&lt;/a&gt;。&lt;/p&gt;

&lt;h4 id=&quot;宽色域图像支持&quot;&gt;宽色域图像支持&lt;/h4&gt;

&lt;p&gt;现在，iOS上的Flutter应用可以支持对宽色域图像进行准确渲染。要使用宽色域支持，应用程序必须使用Impeller，并在&lt;code class=&quot;highlighter-rouge&quot;&gt;Info.plist&lt;/code&gt;文件中添加&lt;code class=&quot;highlighter-rouge&quot;&gt;FLTEnableWideGamut&lt;/code&gt;标志。&lt;/p&gt;

&lt;h4 id=&quot;拼写检查支持&quot;&gt;拼写检查支持&lt;/h4&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;SpellCheckConfiguration()&lt;/code&gt;小部件现在默认支持iOS上的&lt;a href=&quot;https://developer.apple.com/documentation/uikit/uitextchecker&quot;&gt;Apple拼写检查服务&lt;/a&gt;。要使用此小部件，在&lt;code class=&quot;highlighter-rouge&quot;&gt;CupertinoTextField&lt;/code&gt;中使用&lt;code class=&quot;highlighter-rouge&quot;&gt;spellCheckConfiguration&lt;/code&gt;参数进行设置。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/20230514/af72c546f4b111edb542acde48001122.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h4 id=&quot;自适应复选框和单选按钮&quot;&gt;自适应复选框和单选按钮&lt;/h4&gt;

&lt;p&gt;此版本将&lt;code class=&quot;highlighter-rouge&quot;&gt;CupertinoCheckBox&lt;/code&gt;和&lt;code class=&quot;highlighter-rouge&quot;&gt;CupertinoRadio&lt;/code&gt;小部件添加到&lt;code class=&quot;highlighter-rouge&quot;&gt;Cupertino&lt;/code&gt;库中。它们创建与苹果样式相匹配的复选框和单选按钮组件。&lt;/p&gt;

&lt;p&gt;Material复选框和单选按钮小部件添加了&lt;code class=&quot;highlighter-rouge&quot;&gt;.adaptive&lt;/code&gt;构造函数。在iOS和macOS上，这些构造函数使用相应的Cupertino小部件。在其他平台上，它们使用Material小部件。&lt;/p&gt;

&lt;h4 id=&quot;优化cupertino动画过渡和颜色&quot;&gt;优化Cupertino动画、过渡和颜色&lt;/h4&gt;

&lt;p&gt;&lt;a href=&quot;https://u.cboy.me/ss/u?cid=672&amp;amp;aid=6&amp;amp;platform=devio&quot;&gt;Flutter 3.10&lt;/a&gt;改进了一些动画、过渡和颜色，以与SwiftUI相匹配。这些改进包括：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;更新&lt;code class=&quot;highlighter-rouge&quot;&gt;CupertinoPageRoute&lt;/code&gt;过渡&lt;/li&gt;
  &lt;li&gt;在&lt;code class=&quot;highlighter-rouge&quot;&gt;CupertinoSliverNavigationBar&lt;/code&gt;中添加标题放大动画&lt;/li&gt;
  &lt;li&gt;在&lt;code class=&quot;highlighter-rouge&quot;&gt;CupertinoColors&lt;/code&gt;中添加了几个新的iOS系统颜色&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/20230514/b036263af4b111edb542acde48001122.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h4 id=&quot;platformview性能&quot;&gt;PlatformView性能&lt;/h4&gt;

&lt;p&gt;当&lt;code class=&quot;highlighter-rouge&quot;&gt;PlatformViews&lt;/code&gt;出现在屏幕上时，Flutter会在iOS上&lt;a href=&quot;https://github.com/flutter/engine/pull/39172&quot;&gt;降低刷新率&lt;/a&gt;以减少卡顿。应用程序用户将在应用程序显示动画或可滚动的&lt;code class=&quot;highlighter-rouge&quot;&gt;PlatformViews&lt;/code&gt;时注意到这一点。&lt;/p&gt;

&lt;h4 id=&quot;macos和ios可以在插件中使用共享代码&quot;&gt;macOS和iOS可以在插件中使用共享代码&lt;/h4&gt;

&lt;p&gt;Flutter现在支持插件的&lt;code class=&quot;highlighter-rouge&quot;&gt;pubspec.yaml&lt;/code&gt;文件中的&lt;code class=&quot;highlighter-rouge&quot;&gt;[sharedDarwinSource](https://docs.flutter.dev/development/packages-and-plugins/developing-packages#shared-ios-and-macos-implementations)&lt;/code&gt;键。该键表示Flutter应该共享iOS和macOS的代码。&lt;/p&gt;

&lt;div class=&quot;language-dart highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nl&quot;&gt;ios:&lt;/span&gt;
  &lt;span class=&quot;nl&quot;&gt;pluginClass:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;PathProviderPlugin&lt;/span&gt;
  &lt;span class=&quot;nl&quot;&gt;dartPluginClass:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;PathProviderFoundation&lt;/span&gt;
  &lt;span class=&quot;nl&quot;&gt;sharedDarwinSource:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;
&lt;span class=&quot;nl&quot;&gt;macos:&lt;/span&gt;
  &lt;span class=&quot;nl&quot;&gt;pluginClass:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;PathProviderPlugin&lt;/span&gt;
  &lt;span class=&quot;nl&quot;&gt;dartPluginClass:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;PathProviderFoundation&lt;/span&gt;
  &lt;span class=&quot;nl&quot;&gt;sharedDarwinSource:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;应用扩展的新资源&quot;&gt;应用扩展的新资源&lt;/h4&gt;

&lt;p&gt;Flutter官方添加了&lt;a href=&quot;https://docs.flutter.dev/development/platform-integration/ios/app-extensions&quot;&gt;文档&lt;/a&gt;，供Flutter开发人员使用iOS应用扩展。这些扩展包括实时活动、主屏幕小组件和共享扩展。&lt;/p&gt;

&lt;p&gt;为了简化创建主屏幕小组件和共享数据，Flutter官方在&lt;code class=&quot;highlighter-rouge&quot;&gt;[path_provider](https://github.com/flutter/packages/pull/3450)&lt;/code&gt;和&lt;code class=&quot;highlighter-rouge&quot;&gt;homescreen_widget&lt;/code&gt;插件中添加了新的方法。&lt;/p&gt;

&lt;h4 id=&quot;跨平台设计的新资源&quot;&gt;跨平台设计的新资源&lt;/h4&gt;

&lt;p&gt;文档现在包括了针对特定&lt;a href=&quot;https://docs.flutter.dev/resources/platform-adaptations#ui-components&quot;&gt;UI组件&lt;/a&gt;的跨平台设计考虑。要了解更多关于每个UI组件的信息，请查看&lt;a href=&quot;https://github.com/flutter/uxr/discussions&quot;&gt;Flutter UX GitHub存储库中的讨论&lt;/a&gt;。Flutter官方非常感谢任何意见或反馈！&lt;/p&gt;

&lt;h3 id=&quot;android&quot;&gt;Android&lt;/h3&gt;
&lt;h4 id=&quot;android-camerax支持&quot;&gt;&lt;strong&gt;Android CameraX支持&lt;/strong&gt;&lt;/h4&gt;

&lt;p&gt;&lt;a href=&quot;https://developer.android.com/training/camerax&quot;&gt;Camera X&lt;/a&gt;是一个Jetpack库，可以简化在Android应用中添加丰富的相机功能。这个功能适用于各种Android相机硬件。在这个版本中，Flutter官方为Flutter相机插件添加了对CameraX的初步支持。这个支持涵盖了以下用例：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;图像捕捉&lt;/li&gt;
  &lt;li&gt;视频录制&lt;/li&gt;
  &lt;li&gt;显示实时相机预览&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;如果你想尝试，请选择使用CameraX实现。要选择使用CameraX，请在你的&lt;code class=&quot;highlighter-rouge&quot;&gt;pubspec.yaml&lt;/code&gt;文件中添加以下行。&lt;/p&gt;

&lt;p&gt;Dependencies:
  camera: ^0.10.4 # 最新的相机版本
  camera_android_camerax: ^0.5.0&lt;/p&gt;

&lt;p&gt;Flutter官方非常希望听到你的反馈意见，因为Flutter官方将继续添加更多的CameraX功能，并将CameraX作为默认实现。&lt;/p&gt;

&lt;h2 id=&quot;devtools&quot;&gt;DevTools&lt;/h2&gt;

&lt;p&gt;Flutter官方继续改进DevTools，这是一套用于Dart和Flutter的性能和调试工具。一些亮点包括：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;DevTools UI 使用了Material 3，这既现代化了外观，又增强了可访问性。&lt;/li&gt;
  &lt;li&gt;DevTools控制台支持在调试模式下对运行中的应用进行评估。在此版本之前，只有在暂停应用时才能进行评估。&lt;/li&gt;
  &lt;li&gt;嵌入式的&lt;a href=&quot;https://perfetto.dev/&quot;&gt;Perfetto跟踪查看器&lt;/a&gt;替代了之前的时间轴跟踪查看器。Perfetto处理更大的数据集，并且比传统的时间轴跟踪查看器性能更好。Perfetto还包括更多功能，例如：
    &lt;ul&gt;
      &lt;li&gt;允许你固定感兴趣的线程。&lt;/li&gt;
      &lt;li&gt;单击并拖动以选择来自多个帧的多个时间轴事件。&lt;/li&gt;
      &lt;li&gt;使用SQL查询从时间轴事件中提取特定数据。&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/20230514/b05cb0f2f4b111edb542acde48001122.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;要了解更多信息，请查看&lt;a href=&quot;https://docs.flutter.dev/development/tools/devtools/release-notes/release-notes-2.23.1&quot;&gt;DevTools 2.23.1&lt;/a&gt;、&lt;a href=&quot;https://docs.flutter.dev/development/tools/devtools/release-notes/release-notes-2.22.2&quot;&gt;DevTools 2.22.2&lt;/a&gt;和&lt;a href=&quot;https://docs.flutter.dev/development/tools/devtools/release-notes/release-notes-2.21.1&quot;&gt;DevTools 2.21.1&lt;/a&gt;的发行说明。&lt;/p&gt;

&lt;h2 id=&quot;弃用的api和一些重大更新&quot;&gt;弃用的API和一些重大更新&lt;/h2&gt;
&lt;h2 id=&quot;弃用和重大变更&quot;&gt;弃用和重大变更&lt;/h2&gt;

&lt;h3 id=&quot;弃用的api&quot;&gt;弃用的API&lt;/h3&gt;

&lt;p&gt;这个版本中的重大变更包括自v3.7发布之后过期的已弃用API。要查看所有受影响的API，以及其他上下文和迁移指南，请查看&lt;a href=&quot;https://docs.flutter.dev/release/breaking-changes/3-7-deprecations&quot;&gt;此版本的弃用指南&lt;/a&gt;。&lt;a href=&quot;https://docs.flutter.dev/development/tools/flutter-fix&quot;&gt;Dart Fix&lt;/a&gt;可以解决许多这些问题，包括IDE中的快速修复和使用&lt;code class=&quot;highlighter-rouge&quot;&gt;dart fix&lt;/code&gt;命令进行批量应用。&lt;/p&gt;

&lt;h3 id=&quot;android-studio-flamingo升级&quot;&gt;Android Studio Flamingo升级&lt;/h3&gt;

&lt;p&gt;在将Android Studio升级到Flamingo版本后，当尝试运行&lt;code class=&quot;highlighter-rouge&quot;&gt;flutter run&lt;/code&gt;或&lt;code class=&quot;highlighter-rouge&quot;&gt;flutter build&lt;/code&gt;你的Flutter Android应用时，可能会出现错误。这个错误是由于Android Studio Flamingo将其捆绑的Java SDK从11更新到17导致的。当使用Java 17时，&lt;a href=&quot;https://docs.gradle.org/current/userguide/compatibility.html#java&quot;&gt;早于7.3的Gradle版本&lt;/a&gt;无法运行。Flutter官方&lt;a href=&quot;https://github.com/flutter/flutter/pull/123916&quot;&gt;更新了&lt;/a&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;flutter analyze --suggestions&lt;/code&gt;以验证此错误是否是由于你的Java SDK和Gradle版本之间的不兼容性引起的。&lt;/p&gt;

&lt;p&gt;要了解修复此错误的不同方法，请查看&lt;a href=&quot;https://docs.flutter.dev/go/android-java-gradle-error&quot;&gt;Flutter官方的迁移指南&lt;/a&gt;。&lt;/p&gt;

&lt;h3 id=&quot;弃用window单例&quot;&gt;弃用Window单例&lt;/h3&gt;

&lt;p&gt;此版本弃用了window单例。依赖于它的应用程序和库应该&lt;a href=&quot;https://docs.flutter.dev/release/breaking-changes/window-singleton&quot;&gt;迁移到其他方案&lt;/a&gt;。这样可以为你的应用程序做好在未来版本的Flutter中启用多窗口支持的准备。&lt;/p&gt;

&lt;h2 id=&quot;框架framework方面的更新&quot;&gt;框架（Framework）方面的更新&lt;/h2&gt;

&lt;h3 id=&quot;material-3&quot;&gt;Material 3&lt;/h3&gt;

&lt;p&gt;Material库现在与最新的 &lt;a href=&quot;https://m3.material.io/components&quot;&gt;Material Design spec&lt;/a&gt;相匹配。这些变化包括新的组件和组件主题，更新的组件视觉效果等。开发人员必须使用useMaterial3主题标志“选择加入”这些变化。在下一个稳定版本中，useMaterial3将默认为true。&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;接下来会将Material 3统称为M3&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;如果要选择使用 Material 库的 M3 版本，请在 MaterialApp 主题中设置 useMaterial3: true。当创建一个新应用时，flutter create 命令会在你的主题中添加这个设置。&lt;/p&gt;

&lt;p&gt;也可通过Flutter的&lt;a href=&quot;https://flutter.github.io/samples/material_3.html&quot;&gt;demo app&lt;/a&gt;工程来查看useMaterial3的效果。&lt;/p&gt;

&lt;h3 id=&quot;colorschemefromimageprovider&quot;&gt;ColorScheme.fromImageProvider()&lt;/h3&gt;

&lt;p&gt;M3的所有组件都配置了主题的“ColorScheme”的默认颜色。默认的颜色方案使用紫色的不同深浅。你可以根据单个“seed”颜色或图像创建自定义的颜色方案。在演示中尝试这两种变化。生成的颜色方案应该看起来好看且易于使用。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/20230514/ac2a1312f4b111edb542acde48001122.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;navigationbar&quot;&gt;&lt;strong&gt;NavigationBar&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;这是一个提供了M3版本的 &lt;code class=&quot;highlighter-rouge&quot;&gt;BottomNavigationBar&lt;/code&gt; 小部件。虽然 &lt;a href=&quot;https://m3.material.io/components/navigation-bar/overview&quot;&gt;M3&lt;/a&gt; 使用了不同的颜色、高亮和高度，但它的功能与以前一样。要覆盖 &lt;code class=&quot;highlighter-rouge&quot;&gt;NavigationBars&lt;/code&gt; 小部件的默认外观，可以使用 &lt;code class=&quot;highlighter-rouge&quot;&gt;NavigationBarTheme&lt;/code&gt; 小部件。虽然不需要将现有应用迁移到该组件，但对于新应用应该使用它。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/20230514/ac4a710cf4b111edb542acde48001122.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;navigationdrawer&quot;&gt;NavigationDrawer&lt;/h3&gt;

&lt;p&gt;这是一个基于抽屉小部件的 &lt;a href=&quot;https://m3.material.io/components/navigation-drawer/overview&quot;&gt;M3&lt;/a&gt; 目标选择小部件。&lt;code class=&quot;highlighter-rouge&quot;&gt;NavigationDrawer&lt;/code&gt; 显示了一个单选列表，其中包含了 &lt;code class=&quot;highlighter-rouge&quot;&gt;NavigationDestinations&lt;/code&gt; 小部件。你还可以在这个列表中包含其他小部件。当需要时，&lt;code class=&quot;highlighter-rouge&quot;&gt;NavigationDrawer&lt;/code&gt; 可以滚动。要覆盖 &lt;code class=&quot;highlighter-rouge&quot;&gt;NavigationDrawers&lt;/code&gt; 小部件的默认外观，可以使用 &lt;code class=&quot;highlighter-rouge&quot;&gt;NavigationDrawerTheme&lt;/code&gt; 小部件。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/20230514/ac82d7ccf4b111edb542acde48001122.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;searchbar-和-searchanchor&quot;&gt;SearchBar 和 SearchAnchor&lt;/h3&gt;

&lt;p&gt;这些组件为搜索查询提供了预测文本功能。当用户输入搜索查询时，应用程序在“搜索视图”中计算出匹配的响应列表。用户可以选择其中一个响应，或者调整查询。要覆盖这些组件的 &lt;a href=&quot;https://m3.material.io/components/search/overview&quot;&gt;M3&lt;/a&gt; 设计，可以使用 &lt;code class=&quot;highlighter-rouge&quot;&gt;SearchBarTheme&lt;/code&gt; 和 &lt;code class=&quot;highlighter-rouge&quot;&gt;SearchAnchorTheme&lt;/code&gt; 小部件。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/20230514/acfbe720f4b111edb542acde48001122.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/20230514/ad504572f4b111edb542acde48001122.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;secondary-tab-bar&quot;&gt;Secondary Tab Bar&lt;/h3&gt;

&lt;p&gt;M3允许你创建一个第二层的分页内容。要区分这个第二个Tab栏，可以使用&lt;a href=&quot;https://m3.material.io/components/tabs/overview#34192702-8a18-4da7-b2cf-d1579632cb96&quot;&gt;TabBar.secondary&lt;/a&gt;。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/20230514/ad994772f4b111edb542acde48001122.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;m3中的日期选择器datepicker更新&quot;&gt;M3中的日期选择器（DatePicker）更新&lt;/h3&gt;

&lt;p&gt;M3的 &lt;code class=&quot;highlighter-rouge&quot;&gt;DatePicker&lt;/code&gt; 更新了日历和文本框版本的小部件的颜色、布局和形状。这并不改变API，但添加了一个新的 &lt;code class=&quot;highlighter-rouge&quot;&gt;DatePickerTheme&lt;/code&gt;。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/20230514/adcd3da2f4b111edb542acde48001122.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;m3中的时间选择器timepicker更新&quot;&gt;M3中的时间选择器（TimePicker）更新&lt;/h3&gt;

&lt;p&gt;M3版本的时间选择器（TimePicker）与日期选择器（DatePicker）一样，对常规和紧凑版本的小部件进行了颜色、布局和形状的更新。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/20230514/ae24d9f4f4b111edb542acde48001122.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;m3中的底部弹出窗bottomsheet更新&quot;&gt;M3中的底部弹出窗（BottomSheet）更新&lt;/h3&gt;

&lt;p&gt;除了M3版本的颜色和形状更新外，底部弹出窗（BottomSheet）现在增加了一个可选的拖动手柄，当设置&lt;code class=&quot;highlighter-rouge&quot;&gt;showDragHandle&lt;/code&gt;为&lt;code class=&quot;highlighter-rouge&quot;&gt;true&lt;/code&gt;时会显示。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/20230514/ae53e0a0f4b111edb542acde48001122.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;m3中的列表项listtile更新&quot;&gt;M3中的列表项（ListTile）更新&lt;/h3&gt;

&lt;p&gt;M3版本的列表项（ListTile）更新了小部件的定位和间距。包括内容填充、前导和尾部小部件的对齐方式、最小前导宽度和垂直间距。API保持不变。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/20230514/ae73c3caf4b111edb542acde48001122.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;m3中的抽屉drawer更新&quot;&gt;M3中的抽屉（Drawer）更新&lt;/h3&gt;

&lt;p&gt;M3版本的抽屉（Drawer）更新了颜色和高度，并进行了一些小的布局调整。&lt;/p&gt;

&lt;h2 id=&quot;m3中的文本输入框textfield更新&quot;&gt;M3中的文本输入框（TextField）更新&lt;/h2&gt;

&lt;p&gt;M3对所有的文本输入框（TextField）小部件进行了更新，以支持原生手势操作。在鼠标上双击或三击与在触摸设备上双击或三击的效果相同。默认情况下，&lt;code class=&quot;highlighter-rouge&quot;&gt;TextField&lt;/code&gt;和&lt;code class=&quot;highlighter-rouge&quot;&gt;CupertinoTextField&lt;/code&gt;小部件都使用这些功能。&lt;/p&gt;

&lt;h3 id=&quot;textfield-双击点击手势&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;TextField&lt;/code&gt; &lt;strong&gt;双击/点击手势&lt;/strong&gt;&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;双击 + 拖动：在词块之间进行扩展选择。&lt;/li&gt;
  &lt;li&gt;双击 + 拖动：在词块之间进行扩展选择。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/20230514/aeb10a5af4b111edb542acde48001122.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;textfield-triple-clicktap-gestures&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;TextField&lt;/code&gt; &lt;strong&gt;triple click/tap gestures&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;三击&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;在多行的&lt;code class=&quot;highlighter-rouge&quot;&gt;TextField&lt;/code&gt;中，当点击位置处于段落块内时，会选择该段落块（Android/Fuchsia/iOS/macOS/Windows）。&lt;/li&gt;
  &lt;li&gt;在多行的&lt;code class=&quot;highlighter-rouge&quot;&gt;TextField&lt;/code&gt;中，当点击位置处于行块内时，会选择该行块（Linux）。&lt;/li&gt;
  &lt;li&gt;在单行的&lt;code class=&quot;highlighter-rouge&quot;&gt;TextField&lt;/code&gt;中，会选择所有文本。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;三点触控&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;在多行的&lt;code class=&quot;highlighter-rouge&quot;&gt;TextField&lt;/code&gt;中，当点击位置处于段落块内时，会选择该段落块。&lt;/li&gt;
  &lt;li&gt;在单行的&lt;code class=&quot;highlighter-rouge&quot;&gt;TextField&lt;/code&gt;中，会选择所有文本。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;三击 + 拖动&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;在段落块内进行扩展选择（Android/Fuchsia/iOS/macOS/Windows）。&lt;/li&gt;
  &lt;li&gt;在行块内进行扩展选择（Linux）。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/20230514/aef064c0f4b111edb542acde48001122.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;flutter支持slsa-level-1&quot;&gt;Flutter支持SLSA Level 1&lt;/h2&gt;

&lt;p&gt;Flutter框架现在符合&lt;a href=&quot;https://slsa.dev/&quot;&gt;软件构建供应链安全级别（SLSA）&lt;/a&gt; Level 1标准。这意味着实施了许多安全功能，包括：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;脚本化的构建过程&lt;/strong&gt;。Flutter的构建脚本现在支持在受信任的构建平台上进行自动化构建。在受保护的架构上进行构建有助于防止构建产物被篡改，提高供应链的安全性。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;多方审批和审计日志&lt;/strong&gt;。Flutter的发布流程仅在多个工程师的批准后才执行。每个执行都会生成可审计的日志记录。这些更改确保没有人可以在源代码和构建产物生成之间引入修改。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;来源可信性&lt;/strong&gt;。Beta版和稳定版现在使用&lt;a href=&quot;https://slsa.dev/provenance/v0.1&quot;&gt;来源可信性&lt;/a&gt;进行构建。这意味着构建框架发布产物的来源是可信任的，并且具有预期的内容。每个发布都会提供链接，以查看和验证在&lt;a href=&quot;https://docs.flutter.dev/release/archive&quot;&gt;SDK存档&lt;/a&gt;上的来源可信性。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/20230514/af0c3b32f4b111edb542acde48001122.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;这项工作还使团队能够朝着符合SLSA L2和L3的要求迈进。这两个级别专注于保护构建过程中和之后的构建产物。&lt;/p&gt;

&lt;h2 id=&quot;web方面的更新&quot;&gt;Web方面的更新&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Flutter web应用改善了加载时间&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;该版本减小了图标字体的文件大小，并删除了Material和Cupertino中未使用的字形。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CanvasKit减小了所有浏览器的大小&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;基于Chromium的浏览器可以使用一个更小的自定义CanvasKit版本。托管的CanvasKit通过Google行业领先的CDN进行提供。这应该进一步提高性能。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;元素嵌入&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;你现在可以从页面中的特定元素&lt;a href=&quot;https://docs.flutter.dev/deployment/web#embedding-a-flutter-app-into-an-html-page&quot;&gt;提供Flutter web应用&lt;/a&gt;。在此版本之前，你的应用程序只能填满整个页面或显示在iframe标签中。可以在GitHub中找到&lt;a href=&quot;https://github.com/flutter/samples/tree/main/web_embedding&quot;&gt;示例代码&lt;/a&gt;。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;着色器支持&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Web应用可以使用Flutter的&lt;a href=&quot;https://docs.flutter.dev/development/ui/advanced/shaders&quot;&gt;片段着色器支持&lt;/a&gt;。&lt;/p&gt;

&lt;h2 id=&quot;最后&quot;&gt;最后&lt;/h2&gt;

&lt;blockquote&gt;
  &lt;p&gt;Flutter精彩课程推荐&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://u.cboy.me/ss/u?cid=672&amp;amp;aid=5&amp;amp;platform=devio&quot;&gt;ChatGPT + Flutter快速开发多端聊天机器人App&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://api.devio.org/ss/u?cid=487&amp;amp;aid=4&amp;amp;platform=devio&quot;&gt;Flutter高级进阶实战 仿哔哩哔哩APP&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://api.devio.org/ss/u?cid=741&amp;amp;aid=4&amp;amp;platform=devio&quot;&gt;全新Flutter从入门到进阶，实战仿携程网App&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Sun, 14 May 2023 00:00:00 +0800</pubDate>
        <link>http://localhost:4000/2023/05/14/whats-new-in-flutter-3-10/</link>
        <guid isPermaLink="true">http://localhost:4000/2023/05/14/whats-new-in-flutter-3-10/</guid>
        
        <category>Flutter更新</category>
        
        <category>Flutter 3.10</category>
        
        <category>Google I/O</category>
        
        
      </item>
    
      <item>
        <title>Flutter 3.7更新详解</title>
        <description>&lt;blockquote&gt;
  &lt;p&gt;&lt;a href=&quot;https://u.cboy.me/ss/u?cid=672&amp;amp;aid=5&amp;amp;platform=devio&quot;&gt;⭐整合ChatGPT与Flutter高级技术，手把手带你从0到1开发一款可运行在多端的聊天机器人App，帮助你抓住机遇，快速具备AI运用能力，成为移动端领域的AI高手👏&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;新年伊始，由 Flutter 3.7 正式版来「打头阵」！我们与整个 Flutter 社区们继续在 Flutter 3.7 中优化了框架，包括创建自定义菜单栏和层叠式菜单、更好的国际化工具支持、新的调试工具以及其他功能和特性等。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/202301/flutter3.7/f5ed4a44a09911eda34eacde48001122.jpeg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;新的稳定版里，我们在持续改进一些特性，例如全局文本选择、Impeller 渲染速度、DevTools 以及一直以来都在优化的性能。让我们一起来快速探索 Flutter 3.7 的新特性吧！&lt;/p&gt;

&lt;h2 id=&quot;增强对-material-3-的支持&quot;&gt;增强对 Material 3 的支持&lt;/h2&gt;

&lt;p&gt;在 Flutter 3.7 中，以下的 widget 已经进行了 Material 3 的适配：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://api.flutter.dev/flutter/material/Badge-class.html&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Badge&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://api.flutter.dev/flutter/material/BottomAppBar-class.html&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;BottomAppBar&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://api.flutter.dev/flutter/material/FilledButton-class.html&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Filled&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://api.flutter.dev/flutter/material/FilledButton/FilledButton.tonal.html&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Filled Tonal&lt;/code&gt;&lt;/a&gt; buttons&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://api.flutter.dev/flutter/material/SegmentedButton-class.html&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;SegmentedButton&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://api.flutter.dev/flutter/material/Checkbox-class.html&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Checkbox&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://api.flutter.dev/flutter/material/Divider-class.html&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Divider&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://api.flutter.dev/flutter/material/MenuBar-class.html&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Menus&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://api.flutter.dev/flutter/material/DropdownMenu-class.html&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;DropdownMenu&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://api.flutter.dev/flutter/material/Drawer-class.html&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Drawer&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://api.flutter.dev/flutter/material/NavigationDrawer-class.html&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;NavigationDrawer&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://api.flutter.dev/flutter/material/ProgressIndicator-class.html&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;ProgressIndicator&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://api.flutter.dev/flutter/material/Radio-class.html&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Radio&lt;/code&gt;&lt;/a&gt; buttons&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://api.flutter.dev/flutter/material/Slider-class.html&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Slider&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://api.flutter.dev/flutter/material/SnackBar-class.html&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;SnackBar&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://api.flutter.dev/flutter/material/TabBar-class.html&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;TabBar&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://api.flutter.dev/flutter/material/TextField-class.html&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;TextFields&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://api.flutter.dev/flutter/material/InputDecorator-class.html&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;InputDecorator&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://api.flutter.dev/flutter/widgets/Banner-class.html&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Banner&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;你可以直接在应用中的 &lt;a href=&quot;https://api.flutter.dev/flutter/material/ThemeData-class.html&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;ThemeData&lt;/code&gt;&lt;/a&gt; 里设置 &lt;a href=&quot;https://api.flutter.dev/flutter/material/ThemeData/useMaterial3.html&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;useMaterial3&lt;/code&gt;&lt;/a&gt; 来启用 Material 3。只有在完整的颜色方案下才能展现出 Material 3 最完整的细节，你可以使用新的 &lt;a href=&quot;https://m3.material-io.cn/theme-builder#/custom&quot;&gt;Material 主题构建器&lt;/a&gt; 生成你的主题配置，也可以通过 Flutter &lt;a href=&quot;https://api.flutter.dev/flutter/material/ThemeData-class.html&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;ThemeData&lt;/code&gt;&lt;/a&gt; 构造中的 &lt;code class=&quot;highlighter-rouge&quot;&gt;colorSchemeSeed&lt;/code&gt; (颜色种子) 自动生成一整套的主题：&lt;/p&gt;

&lt;div class=&quot;language-dart highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;MaterialApp&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;
  &lt;span class=&quot;nl&quot;&gt;theme:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ThemeData&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;
     &lt;span class=&quot;nl&quot;&gt;useMaterial3:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;colorSchemeSeed:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Colors&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;green&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;o&quot;&gt;),&lt;/span&gt;
  &lt;span class=&quot;c1&quot;&gt;// …&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;若想了解 Flutter 在 Material 3 上的支持进度，你可以在 GitHub 上查看 &lt;a href=&quot;https://github.com/flutter/flutter/issues/91605&quot;&gt;flutter #91605 号议题&lt;/a&gt;。&lt;/p&gt;

&lt;p&gt;你也可以尝试 &lt;a href=&quot;https://flutter-experimental-m3-demo.web.app/#/&quot;&gt;Material 3 示例&lt;/a&gt;，其中展示了所有主题的特性。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/202301/flutter3.7/f6dcbf02a09911eda34eacde48001122.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;菜单栏和级联菜单&quot;&gt;菜单栏和级联菜单&lt;/h2&gt;

&lt;p&gt;Flutter 现在可以创建菜单栏和级联菜单了。&lt;/p&gt;

&lt;p&gt;在 macOS 上，你可以使用 &lt;code class=&quot;highlighter-rouge&quot;&gt;PlatformMenuBar&lt;/code&gt; widget 来创建菜单栏，你的菜单栏将由 macOS 系统来渲染，而不是使用 Flutter。&lt;/p&gt;

&lt;p&gt;此外，对于所有其他的平台，你可以定义一个 &lt;a href=&quot;https://m3.material-io.cn/components/menus/overview&quot;&gt;Material Design 菜单&lt;/a&gt;，它提供了级联菜单栏 (&lt;a href=&quot;https://api.flutter.dev/flutter/material/MenuBar-class.html&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;MenuBar&lt;/code&gt;&lt;/a&gt;)，或者使用由 UI 界面元素触发的  (&lt;a href=&quot;https://api.flutter.dev/flutter/material/MenuAnchor-class.html&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;MenuAnchor&lt;/code&gt;&lt;/a&gt;) 来创建一个级联菜单。这些菜单都是完全可自定义的，其中的菜单项可以是自定义的 widget，也可以使用新的菜单项 widget: (&lt;a href=&quot;https://api.flutter.dev/flutter/material/MenuItemButton-class.html&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;MenuItemButton&lt;/code&gt;&lt;/a&gt; 和 &lt;a href=&quot;https://api.flutter.dev/flutter/material/SubmenuButton-class.html&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;SubmenuButton&lt;/code&gt;&lt;/a&gt;)。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/202301/flutter3.7/f6e62736a09911eda34eacde48001122.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;impeller-预览版&quot;&gt;Impeller 预览版&lt;/h2&gt;

&lt;p&gt;Flutter 团队很高兴能 &lt;a href=&quot;https://github.com/flutter/engine/tree/main/impeller#try-impeller-in-flutter&quot;&gt;在稳定版渠道上&lt;/a&gt; 为大家带来 iOS 平台的 &lt;a href=&quot;https://github.com/flutter/engine/tree/main/impeller&quot;&gt;Impeller 渲染引擎&lt;/a&gt; 预览。我们认为 Impeller 的性能已经达到甚至超越了大部分现有应用上的 Skia 渲染。在图像保真方面，Impeller 也已覆盖了大部分除极端条件以外的应用场景。我们希望能够在之后的稳定版本中将 Impeller 作为 iOS 平台的默认渲染引擎，如果你在体验时有任何问题，请继续 &lt;a href=&quot;https://github.com/flutter/flutter/issues&quot;&gt;在 GitHub 上提交 Impeller 的相关反馈&lt;/a&gt;。&lt;/p&gt;

&lt;p&gt;尽管我们对 iOS 上 Impeller 满足现有应用的渲染需求有足够的自信，但仍然有部分 API 需要进行补充。你可以在 &lt;a href=&quot;https://github.com/flutter/flutter/wiki/Impeller#status&quot;&gt;Flutter wiki 文档&lt;/a&gt; 上看到目前 Impeller 的进度。用户及开发者在使用时可能会注意到 Impeller 与 Skia 之间的渲染细节区别，这些区别可能是 BUG，当你遇到时请记得 &lt;a href=&quot;https://github.com/flutter/flutter/issues&quot;&gt;提交反馈&lt;/a&gt; 帮助我们定位并修复它。&lt;/p&gt;

&lt;p&gt;Impeller 的进展飞速离不开社区贡献者的支持。尤其是 &lt;a href=&quot;https://github.com/ColdPaleLight&quot;&gt;ColdPaleLight&lt;/a&gt;、&lt;a href=&quot;https://github.com/guoguo338&quot;&gt;guoguo338&lt;/a&gt;、&lt;a href=&quot;https://github.com/JsouLiang&quot;&gt;JsouLiang&lt;/a&gt; 以及 &lt;a href=&quot;https://github.com/magicianA&quot;&gt;magicianA&lt;/a&gt; 这些开发者，在此次发布版本的 Impeller 的 291 次提交中有 31 次 (&amp;gt;12%) 是他们提交的。非常感谢他们的帮助！&lt;/p&gt;

&lt;p&gt;我们也在继续推进 Vulkan 作为 Impeller 的渲染后端 (在一些老的设备上会降级到 OpenGL)，但是 Android Impeller 尚未准备好进行公开预览。我们会在未来的发布中分享更多正在积极进行的 Impeller 开发进程，包括桌面和 Web 平台的支持。&lt;/p&gt;

&lt;p&gt;若你感兴趣，可以关注 GitHub 上的 &lt;a href=&quot;https://github.com/orgs/flutter/projects/21&quot;&gt;Impeller 项目板&lt;/a&gt; 来跟进开发进度。&lt;/p&gt;

&lt;h2 id=&quot;ios-发布校验&quot;&gt;iOS 发布校验&lt;/h2&gt;

&lt;p&gt;当你在构建一个发布版本的 iOS 应用时，Flutter 会为你提供 &lt;a href=&quot;https://docs.flutter.dev/deployment/ios#review-xcode-project-settings&quot;&gt;项目设置检查清单&lt;/a&gt; 来确保你的应用已经准备好发布到 App Store。&lt;/p&gt;

&lt;p&gt;现在 &lt;code class=&quot;highlighter-rouge&quot;&gt;flutter build ipa&lt;/code&gt; 命令会校验项目的一部分设置，并且在清单中告知你在发布前进行更改。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/202301/flutter3.7/f6eeaf64a09911eda34eacde48001122.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;开发者工具更新&quot;&gt;开发者工具更新&lt;/h2&gt;

&lt;p&gt;在本次发布中，开发工具也带来了新的特性和体验优化。DevTools 的内存调试工具已经完成了一轮全面的调整。我们带来了三个新的选项卡：&lt;strong&gt;Profile&lt;/strong&gt;、&lt;strong&gt;Trace&lt;/strong&gt; 和 &lt;strong&gt;Diff&lt;/strong&gt;，它们包含了先前的所有内存调试功能，也添加了更多利于调试的操作。现在你可以按照类或者内存类型对当前的内存分配进行分析，可以在运行时分析哪些代码调用了哪些部分的内存，也可以对比两个不同时间点的内存快照之间的差异来了解内存使用的细节。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/202301/flutter3.7/f6fc2a72a09911eda34eacde48001122.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;以上的这些内存特性已经在 &lt;a href=&quot;https://docs.flutter.dev/development/tools/devtools/memory&quot;&gt;文档&lt;/a&gt; 中进行了介绍，若你感兴趣可以前往了解更多细节。&lt;/p&gt;

&lt;p&gt;性能页面也有一些值得注意的新功能，该页面现在在顶部新增了 &lt;strong&gt;Frame Analysis&lt;/strong&gt; (帧分析) 选项卡，它能够提供在 Flutter 中详细追踪大量消耗的某些帧和操作的一些建议。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/202301/flutter3.7/f706b370a09911eda34eacde48001122.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;除了以上的新功能，本次更新还有其他的问题修复和优化改进，包括查看器 (Inspector)、网络记录器的 CPU 记录器的问题修复。你可以查看下面的 DevTools 更新日志了解更多细节。&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.flutter.dev/development/tools/devtools/release-notes/release-notes-2.17.0&quot;&gt;Flutter DevTools 2.17.0 发行注记&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.flutter.dev/development/tools/devtools/release-notes/release-notes-2.18.0&quot;&gt;Flutter DevTools 2.18.0 发行注记&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.flutter.dev/development/tools/devtools/release-notes/release-notes-2.19.0&quot;&gt;Flutter DevTools 2.19.0 发行注记&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.flutter.dev/development/tools/devtools/release-notes/release-notes-2.20.0&quot;&gt;Flutter DevTools 2.20.0 发行注记&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;自定义上下文菜单&quot;&gt;自定义上下文菜单&lt;/h2&gt;

&lt;p&gt;从新版本开始，你可以在 Flutter 应用的任意位置创建自定义的上下文菜单，也可以自定义内置的上下文菜单。&lt;/p&gt;

&lt;p&gt;举例来说，你可以在用户选中邮件地址时，为文本框默认的选择菜单添加「发送邮件」的按钮 (&lt;a href=&quot;https://github.com/flutter/samples/blob/main/experimental/context_menus/lib/email_button_page.dart&quot;&gt;代码地址&lt;/a&gt;)。&lt;a href=&quot;https://api.flutter.dev/flutter/cupertino/CupertinoTextField/contextMenuBuilder.html&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;contextMenuBuilder&lt;/code&gt;&lt;/a&gt; 参数也已经添加到现有包含上下文菜单的 widget 中。你可以在 &lt;code class=&quot;highlighter-rouge&quot;&gt;contextMenuBuilder&lt;/code&gt; 中返回任何你想返回的 widget，也包括平台自适应的上下文菜单。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/202301/flutter3.7/f74aff80a09911eda34eacde48001122.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;这一新特性也可以用于文本选择以外的场景。例如，你可以为一个 &lt;code class=&quot;highlighter-rouge&quot;&gt;Image&lt;/code&gt; widget 的右键和长按操作添加「保存」按钮 (&lt;a href=&quot;https://github.com/flutter/samples/blob/main/experimental/context_menus/lib/image_page.dart&quot;&gt;代码地址&lt;/a&gt;)。你也可以使用 &lt;a href=&quot;https://api.flutter.dev/flutter/widgets/ContextMenuController-class.html&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;ContextMenuController&lt;/code&gt;&lt;/a&gt; 在应用内的任意位置展示平台默认或者自定义的上下文菜单。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/202301/flutter3.7/f7542844a09911eda34eacde48001122.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;若想查看完整的示例，前往 &lt;a href=&quot;https://github.com/flutter/samples/tree/main/experimental/context_menus&quot;&gt;Flutter 示例代码仓库&lt;/a&gt; 了解更多。&lt;/p&gt;

&lt;h2 id=&quot;cupertinolistsection-和-cupertinolisttile-widget&quot;&gt;CupertinoListSection 和 CupertinoListTile widget&lt;/h2&gt;

&lt;p&gt;Cupertino 系列 widget 迎来了两位新成员： &lt;a href=&quot;https://github.com/flutter/flutter/pull/78732&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;CupertinoListSection&lt;/code&gt;&lt;/a&gt; 和&lt;a href=&quot;https://github.com/flutter/flutter/pull/78732&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;CupertinoListTile&lt;/code&gt;&lt;/a&gt;，可用于展示 iOS 风格的滚动列表内容。它们是 Cupertino 版本的 &lt;code class=&quot;highlighter-rouge&quot;&gt;ListView&lt;/code&gt; 和 &lt;code class=&quot;highlighter-rouge&quot;&gt;ListTile&lt;/code&gt;。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/202301/flutter3.7/f75d7ba6a09911eda34eacde48001122.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/202301/flutter3.7/f779f682a09911eda34eacde48001122.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;滑动优化&quot;&gt;滑动优化&lt;/h2&gt;

&lt;p&gt;此次版本发布中也包含了众多 &lt;a href=&quot;https://github.com/flutter/flutter/issues?page=1&amp;amp;q=is%3Aissue+is%3Aclosed+closed%3A2022-07-11..2022-11-30+label%3A%22f%3A+scrolling%22+reason%3Acompleted&quot;&gt;滑动相关的问题&lt;/a&gt; 修复，包括触控板的交互优化以及在滑动组件中文本选择时的行为。&lt;/p&gt;

&lt;p&gt;值得注意的是，macOS 的应用现在可以通过 &lt;a href=&quot;https://github.com/flutter/flutter/pull/108298&quot;&gt;新物理滑动特性&lt;/a&gt; 来体验与其有更高匹配度的滑动体验。&lt;/p&gt;

&lt;p&gt;新的 &lt;a href=&quot;https://github.com/flutter/flutter/pull/112982&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;AnimatedGrid&lt;/code&gt;&lt;/a&gt; 和 &lt;code class=&quot;highlighter-rouge&quot;&gt;SliverAnimatedGrid&lt;/code&gt; 可以用于为新增和移除的内容展示动画。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/202301/flutter3.7/f784a050a09911eda34eacde48001122.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;最后，我们 &lt;a href=&quot;https://github.com/flutter/flutter/pull/108706&quot;&gt;修复了&lt;/a&gt; 自 Flutter 迁移至健全的空安全以来的一个问题，该问题影响了所有包含 &lt;code class=&quot;highlighter-rouge&quot;&gt;itemBuilder&lt;/code&gt; 参数的滑动 widget (例如 &lt;code class=&quot;highlighter-rouge&quot;&gt;ListView&lt;/code&gt;)。在迁移至空安全时，&lt;code class=&quot;highlighter-rouge&quot;&gt;itemBuilder&lt;/code&gt; 的类型迁移至了 &lt;code class=&quot;highlighter-rouge&quot;&gt;IndexedWidgetBuilder&lt;/code&gt;，即不允许返回 &lt;code class=&quot;highlighter-rouge&quot;&gt;null&lt;/code&gt;，而在以前 &lt;code class=&quot;highlighter-rouge&quot;&gt;null&lt;/code&gt; 可以用来代表列表已经到了底部等。该参数现已修改为 &lt;code class=&quot;highlighter-rouge&quot;&gt;NullableIndexedWidgetBuilder&lt;/code&gt;。感谢 @rrousselGit 发现并修复了这个问题！&lt;/p&gt;

&lt;h2 id=&quot;国际化工具和文档&quot;&gt;国际化工具和文档&lt;/h2&gt;

&lt;p&gt;Flutter 对国际化的支持已经焕然一新！我们对 &lt;code class=&quot;highlighter-rouge&quot;&gt;gen-l10n&lt;/code&gt; 进行了重写以支持下述特性：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;描述性的语法错误&lt;/li&gt;
  &lt;li&gt;嵌套或多个复数、选择和占位的消息内容&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/202301/flutter3.7/f79271a8a09911eda34eacde48001122.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;更多内容可以了解已经更新的 &lt;a href=&quot;https://docs.flutter.dev/development/accessibility-and-localization/internationalization&quot;&gt;Flutter 应用里的国际化&lt;/a&gt; 文档。&lt;/p&gt;

&lt;h2 id=&quot;全局的选择优化&quot;&gt;全局的选择优化&lt;/h2&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;SelectionArea&lt;/code&gt; 现在已支持键盘操作。你可以通过键盘快捷键 &lt;code class=&quot;highlighter-rouge&quot;&gt;Shift+→&lt;/code&gt; 等快捷键进行选择。&lt;/p&gt;

&lt;h2 id=&quot;后台-isolate&quot;&gt;后台 isolate&lt;/h2&gt;

&lt;p&gt;现在 &lt;a href=&quot;https://docs.flutter.dev/development/platform-integration/platform-channels&quot;&gt;平台通道&lt;/a&gt; 可以在 &lt;a href=&quot;https://docs.flutter.dev/development/packages-and-plugins/background-processes&quot;&gt;任意 isolate&lt;/a&gt; 中进行调用。先前平台通道只能在主 isolate 中进行调用。优化后会让插件和混合开发调用 isolate 和宿主平台代码更加简单。更多内容可以阅读 &lt;a href=&quot;https://docs.flutter.dev/development/platform-integration/platform-channels&quot;&gt;撰写平台代码&lt;/a&gt; 文档以及 &lt;a href=&quot;https://medium.com/flutter/introducing-background-isolate-channels-7a299609cad8&quot;&gt;介绍后台 isolate 通道&lt;/a&gt; 文章。&lt;/p&gt;

&lt;h2 id=&quot;文本放大镜&quot;&gt;文本放大镜&lt;/h2&gt;

&lt;p&gt;在 Android 和 iOS 上进行文本选择时会出现的放大镜现在也会在 Flutter 中出现了。它已经添加至了所有的文本选择，但是你也可以通过 &lt;a href=&quot;https://api.flutter.dev/flutter/material/TextField/magnifierConfiguration.html&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;magnifierConfiguration&lt;/code&gt;&lt;/a&gt; 禁用或者自定义。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/202301/flutter3.7/f85c674ca09911eda34eacde48001122.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/202301/flutter3.7/f92edb3ca09911eda34eacde48001122.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;插件代码迁移至-swift&quot;&gt;插件代码迁移至 Swift&lt;/h2&gt;

&lt;p&gt;Apple 整将它们的代码迁移至 Swift，我们也希望能为开发者构建 Swift 插件的示例和指导。&lt;a href=&quot;https://pub.dev/packages/quick_actions&quot;&gt;quick_actions&lt;/a&gt; 已经从 Objective-C 迁移至了 Swift，也可以作为 Swift 插件的最佳实践。如果你对帮助 Flutter 迁移第一方插件至 Swift 感兴趣，请参考 &lt;a href=&quot;https://github.com/flutter/flutter/wiki/Contributing-to-Plugins-and-Packages#swift-migration-for-1p-plugins&quot;&gt;wiki 中的 Swift 迁移部分&lt;/a&gt;。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;给 iOS 开发者准备的资源&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;我们新发布了一系列为 iOS 开发者准备的资源，包括：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.flutter.dev/get-started/flutter-for/swiftui-devs&quot;&gt;给 SwiftUI 开发者的 Flutter 指南&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dart.dev/guides/language/coming-from/swift-to-dart&quot;&gt;给 Swift 开发者的 Dart 指南&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.flutter.dev/resources/dart-swift-concurrency&quot;&gt;给 Swift 开发者的 Flutter 并发开发指南&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.flutter.dev/development/add-to-app/ios/add-flutter-screen&quot;&gt;将 Flutter 添加到现有的 SwiftUI 应用中&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.flutter.dev/deployment/flavors&quot;&gt;为 Flutter 创建多渠道&lt;/a&gt; (针对 Android 和 iOS)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;废弃-bitcode&quot;&gt;废弃 Bitcode&lt;/h2&gt;

&lt;p&gt;从 Xcode 14 开始，watchOS 和 tvOS 的应用不再需要 bitcode，并且 App Store 也不再接收带 bitcode 的应用提交。因此，Flutter 也移除了 bitcode 的支持。&lt;/p&gt;

&lt;p&gt;Bitcode 在 Flutter 应用中默认是关闭的，所以这也不应该会影响太多开发者的项目。但是，如果你曾经为你的项目手动启用过 bitcode，请尽快在升级到 Xcode 14 后关闭 bitcode。你可以使用 Xcode 打开 &lt;code class=&quot;highlighter-rouge&quot;&gt;ios/Runner.xcworkspace&lt;/code&gt; 找到 &lt;strong&gt;Enable Bitcode&lt;/strong&gt; 设置为 &lt;strong&gt;No&lt;/strong&gt;，混合开发项目需要在宿主项目中禁用。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/202301/flutter3.7/f9411ba8a09911eda34eacde48001122.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;ios-平台视图应用-backdropfilter&quot;&gt;iOS 平台视图应用 BackdropFilter&lt;/h2&gt;

&lt;p&gt;我们为 iOS 原生视图添加了可以渲染高斯模糊的特性，现在嵌套在 &lt;code class=&quot;highlighter-rouge&quot;&gt;BackdropFilter&lt;/code&gt; 中的 &lt;code class=&quot;highlighter-rouge&quot;&gt;UiKitView&lt;/code&gt; 可以正确的渲染高斯模糊了。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/202301/flutter3.7/f94c9b54a09911eda34eacde48001122.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;你可以查看相应的 &lt;a href=&quot;http://flutter.dev/go/ios-platformview-backdrop-filter-blur&quot;&gt;设计文档&lt;/a&gt; 了解更多。&lt;/p&gt;

&lt;h2 id=&quot;内存管理&quot;&gt;内存管理&lt;/h2&gt;

&lt;p&gt;此次发布的版本对内存管理做了一些改进，这些改进的共同作用是减少由 GC 暂停引起的卡顿、减少由于分配速度和后台 GC 线程引起的 CPU 占用，并且降低内存占用。&lt;/p&gt;

&lt;p&gt;例如，我们扩展了现有手动释放某些 &lt;code class=&quot;highlighter-rouge&quot;&gt;dart:ui&lt;/code&gt; Dart 对象的本地资源的实践。先前在 Dart VM 垃圾回收 Dart 对象前，本地资源都将被 Flutter 引擎持有。通过对用户应用程序和我们的 benchmarks 分析，我们认为这种策略很多时候无法避免不合适的 GC 和过度使用内存。因此在此次更新中 Flutter 引擎添加了 API ，用于显式释放由 &lt;code class=&quot;highlighter-rouge&quot;&gt;Vertices&lt;/code&gt;、&lt;code class=&quot;highlighter-rouge&quot;&gt;Paragraph&lt;/code&gt; 和 &lt;code class=&quot;highlighter-rouge&quot;&gt;ImageShader&lt;/code&gt; 对象持有的本地资源。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/202301/flutter3.7/f959763aa09911eda34eacde48001122.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;在我们迁移到此 API 的 Flutter 框架的 benchmarks 中，将 90% 的帧构建时间减少了 30% 以上，最终用户将体验到更流畅的动画和更少的卡顿。&lt;/p&gt;

&lt;p&gt;此外，Flutter 引擎 &lt;a href=&quot;https://github.com/flutter/engine/pull/35473&quot;&gt;不再上报&lt;/a&gt; Dart VM 中的 GPU 图像的大小。如上所述，当这些图像资源不再被需要时已由框架手动释放，如果这时继续按照 GPU 内存大小的 GC 策略上报至 Dart，会导致不必要的堆内存压力并进一步触发无效的 GC。类似的方法同样应用到了 Flutter 引擎中，用于回收 &lt;code class=&quot;highlighter-rouge&quot;&gt;dart:ui&lt;/code&gt; 原生对象的 &lt;a href=&quot;https://github.com/flutter/engine/pull/35813&quot;&gt;隐式内存占用&lt;/a&gt;。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/202301/flutter3.7/f96436c4a09911eda34eacde48001122.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;在我们的测试中，此更改省去了 widget 创建 GPU 常驻图像构建帧时的同步 GC 工作。&lt;/p&gt;

&lt;p&gt;本次版本发布中，Flutter 引擎在动态更新应用状态至 Dart VM 方面有所进步。具体来说，Flutter 现在会使用 Dart VM 中 &lt;a href=&quot;https://web.dev/rail/&quot;&gt;RAIL 风格&lt;/a&gt; 的 &lt;a href=&quot;https://github.com/dart-lang/sdk/commit/c6a1eb1b61844b2d733f9e2f4c7754f1920325d7&quot;&gt;API&lt;/a&gt;，让 &lt;a href=&quot;https://github.com/flutter/flutter/pull/110600&quot;&gt;路由转场时渲染延迟更低&lt;/a&gt;，即让堆内存在转场时保持增长而不是进行 GC，避免造成动画的卡顿。目前这项改动不会带来太大的性能优化，但未来我们会将这项改进拓展到其他方法上，消除由 GC 带来的卡顿影响。此外，我们还修复了向 Dart VM 报告 Flutter 引擎已经闲置的 &lt;a href=&quot;https://github.com/flutter/engine/pull/37737&quot;&gt;一处逻辑错误&lt;/a&gt;，也减少了 GC 带来的卡顿。最后，在 Flutter 视图不再展示时，也会 &lt;a href=&quot;https://github.com/flutter/engine/pull/37539&quot;&gt;通知 Dart VM&lt;/a&gt; 进行处理，进一步优化了 Flutter 视图未显示时的内存占用。&lt;/p&gt;

&lt;h2 id=&quot;放弃对-macos-1011-到-1013-版本的支持&quot;&gt;放弃对 macOS 10.11 到 10.13 版本的支持&lt;/h2&gt;

&lt;p&gt;我们在 &lt;a href=&quot;https://mp.weixin.qq.com/s/-AYFnatRYNARGTxhzSY9Lg&quot;&gt;Flutter 3.3 发布的文章&lt;/a&gt; 中提到过，Flutter 将不再支持 macOS 的 10.11 和 10.12 版本，自上个版本发布以来，通过进一步的 &lt;a href=&quot;https://github.com/flutter/flutter/issues/114445&quot;&gt;分析发现&lt;/a&gt;，放弃对 macOS 10.13 的支持也不会造成太大影响，带来的收效却是可以帮助大幅简化代码库。这意味着，使用 Flutter 3.7 以及后续版本构建的桌面端应用程序将不能再在 macOS 10.11、10.12、10.13 版本中运行，Flutter 对 macOS 的最低10点要求版本提升至 macOS Mojave 10.14。&lt;/p&gt;

&lt;p&gt;至此，Flutter 构建的 iOS 和 macOS 应用都已经包含了 Metal 的支持，OpenGL 后端渲染引擎已经从 iOS 和 macOS 嵌入器层被移除，移除后，压缩后的 Flutter 引擎体积降低了大约 100KB。&lt;/p&gt;

&lt;h2 id=&quot;将-toimagesync-新增至-dartui-中&quot;&gt;将 toImageSync 新增至 dart:ui 中&lt;/h2&gt;

&lt;p&gt;本次版本发布，将 &lt;code class=&quot;highlighter-rouge&quot;&gt;Picture.toImageSync&lt;/code&gt; 和 &lt;code class=&quot;highlighter-rouge&quot;&gt;Scene.toImageSync&lt;/code&gt; 方法直接加入到了 &lt;code class=&quot;highlighter-rouge&quot;&gt;dart:ui&lt;/code&gt;，类似于 &lt;code class=&quot;highlighter-rouge&quot;&gt;Picture.toImage&lt;/code&gt; 以及 &lt;code class=&quot;highlighter-rouge&quot;&gt;Scene.toImage.&lt;/code&gt; 这样的异步方法，Picture.toImageSync 会直接返回一个 &lt;code class=&quot;highlighter-rouge&quot;&gt;Picture&lt;/code&gt; 转 Image 的一个句柄，并在后台异步对 Image 进行光栅化。&lt;/p&gt;

&lt;p&gt;当 GPU context 可用时，图像会在 GPU 中常驻，这意味着与 &lt;code class=&quot;highlighter-rouge&quot;&gt;toImage&lt;/code&gt; 生成的图像相比它的绘制速度会更快。(toImage 生成的图像也可以实现 GPU 常驻，但目前还未实现)。&lt;/p&gt;

&lt;p&gt;新的 &lt;code class=&quot;highlighter-rouge&quot;&gt;toImageSync&lt;/code&gt; API 支持的例子：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;快速捕捉一张昂贵的栅格化图片，以便跨多帧重复使用。&lt;/li&gt;
  &lt;li&gt;应用在图片的多路过滤器上&lt;/li&gt;
  &lt;li&gt;应用在自定义着色器上&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;一个例子是，Flutter 框架现已使用这个 API 以优化 Android 上的页面切换动画的性能，几乎减少了帧光栅化一半的时间且减少了卡顿，而且在支持这些刷新率的机器上动画可以达到 90 / 120 FPS。&lt;/p&gt;

&lt;h2 id=&quot;自定义着色器支持的改进&quot;&gt;自定义着色器支持的改进&lt;/h2&gt;

&lt;p&gt;本次发行版包含了许多关于 Flutter 对自定义着色器片段的优化支持。Flutter SDK 现已内置了一个着色器编译器，能够将 &lt;code class=&quot;highlighter-rouge&quot;&gt;pubspec.yaml&lt;/code&gt; 文件中列出的 GSGL 着色器编译为目标平台的正确的平台特定对应的格式。此外，自定义着色器能够在开发阶段方便的执行 hot reload。自定义着色器目前已经在 iOS 上对 Skia 以及 Impeller 都支持了。&lt;/p&gt;

&lt;p&gt;我们为社区中分享的样例感到印象深刻，期待能够未来能有更多关于 Flutter 中的自定义着色器的创意。&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://twitter.com/reNotANumber/status/1599717360096620544&quot;&gt;https://twitter.com/reNotANumber/status/1599717360096620544&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://twitter.com/reNotANumber/status/1599810391625719810&quot;&gt;https://twitter.com/reNotANumber/status/1599810391625719810&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://twitter.com/wolfenrain/status/1600242975937687553&quot;&gt;https://twitter.com/wolfenrain/status/1600242975937687553&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://twitter.com/iamjideguru/status/1598308434608283650&quot;&gt;https://twitter.com/iamjideguru/status/1598308434608283650&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://twitter.com/rxlabz/status/1609975128758026247&quot;&gt;https://twitter.com/rxlabz/status/1609975128758026247&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://twitter.com/RealDevOwl/status/1528357506795421698&quot;&gt;https://twitter.com/RealDevOwl/status/1528357506795421698&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://twitter.com/TakRutvik/status/1601380047599808513&quot;&gt;https://twitter.com/TakRutvik/status/1601380047599808513&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://twitter.com/wolfenrain/status/1600601043477401606&quot;&gt;https://twitter.com/wolfenrain/status/1600601043477401606&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;请参阅 &lt;a href=&quot;https://docs.flutter.dev/development/ui/advanced/shaders&quot;&gt;文档网站上的文档&lt;/a&gt; 以及 pub.dev 上的 
&lt;a href=&quot;https://pub.dev/packages/flutter_shaders&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;flutter_shaders&lt;/code&gt;&lt;/a&gt; package 了解更多。&lt;/p&gt;

&lt;h2 id=&quot;字体资源支持热重载&quot;&gt;字体资源支持热重载&lt;/h2&gt;

&lt;p&gt;在过去，将新的字体资源加入到 &lt;code class=&quot;highlighter-rouge&quot;&gt;pubspec.yaml&lt;/code&gt; 文件的时候会需要重新构建应用后才能查看，不像其他资源可以直接热重载生效，现如今，字体清单文件的修改 (包括添加新字体) 后，也可以直接热重载到应用中立刻可见了。&lt;/p&gt;

&lt;h2 id=&quot;减少-ios-设备上动画效果的卡顿&quot;&gt;减少 iOS 设备上动画效果的卡顿&lt;/h2&gt;

&lt;p&gt;有两项重要的来自社区成员 luckysmg 的贡献，帮助减少了 iOS 设备上动画效果的卡顿。特别是在 iOS 手势交互期间在主线程上添加一个虚拟的 &lt;code class=&quot;highlighter-rouge&quot;&gt;CADisplayLink&lt;/code&gt; 以强制设定最大刷新率。此外，键盘动画也通过 &lt;code class=&quot;highlighter-rouge&quot;&gt;CADisplayLink&lt;/code&gt; 设定了与 Flutter 引擎里 animator 相同的刷新率。由于新加入了这些变化，用户可以在 120Hz 的 iOS 设备上感受到更一致和流畅的动画效果。&lt;/p&gt;

&lt;h2 id=&quot;结语&quot;&gt;结语&lt;/h2&gt;

&lt;p&gt;还是那句话，如果没有 Flutter 社区中优秀、热情贡献者们，Flutter 不会像现在这样优秀，在我们未来持续进行的这段旅程中，我们希望你可以知道，没有你们，我们无法做出这样的优秀成绩。感恩每一位贡献者！&lt;/p&gt;

&lt;p&gt;我们的发展势头依旧，请期待未来的更新！&lt;/p&gt;

&lt;h2 id=&quot;最后&quot;&gt;最后&lt;/h2&gt;

&lt;blockquote&gt;
  &lt;p&gt;Flutter精彩课程推荐&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://u.cboy.me/ss/u?cid=672&amp;amp;aid=5&amp;amp;platform=devio&quot;&gt;ChatGPT + Flutter快速开发多端聊天机器人App&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://api.devio.org/ss/u?cid=487&amp;amp;aid=4&amp;amp;platform=devio&quot;&gt;Flutter高级进阶实战 仿哔哩哔哩APP&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://api.devio.org/ss/u?cid=741&amp;amp;aid=4&amp;amp;platform=devio&quot;&gt;全新Flutter从入门到进阶，实战仿携程网App&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Wed, 25 Jan 2023 00:00:00 +0800</pubDate>
        <link>http://localhost:4000/2023/01/25/whats-new-in-flutter-3-7/</link>
        <guid isPermaLink="true">http://localhost:4000/2023/01/25/whats-new-in-flutter-3-7/</guid>
        
        <category>Flutter更新</category>
        
        <category>Flutter 3.7</category>
        
        
      </item>
    
      <item>
        <title>Flutter 3.3更新详解</title>
        <description>&lt;blockquote&gt;
  &lt;p&gt;&lt;a href=&quot;https://u.cboy.me/ss/u?cid=672&amp;amp;aid=5&amp;amp;platform=devio&quot;&gt;⭐整合ChatGPT与Flutter高级技术，手把手带你从0到1开发一款可运行在多端的聊天机器人App，帮助你抓住机遇，快速具备AI运用能力，成为移动端领域的AI高手👏&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Flutter 3 是我们正式为全平台提供支持的一个重量级里程碑，距离它的发布仅过去了三个月，今天让我们有请 Flutter 3.3 正式版！近三个月我们并没有放慢更新迭代的速度——自 Flutter 3 发布以来，我们已经为 Flutter 合并了 5687 个拉取请求。&lt;/p&gt;

&lt;p&gt;本次更新带来了 Flutter Web 平台、桌面端平台、文本处理的性能和其他更新内容。&lt;/p&gt;

&lt;p&gt;同时我们也会介绍 go_router package、DevTools (开发者工具) 和 VS Code 扩展相关的更新内容。与我们一起阅读详细了解它们吧！&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/202211/flutter3.3/flutter3.3.jpeg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;框架更新&quot;&gt;框架更新&lt;/h2&gt;

&lt;h3 id=&quot;全局选择&quot;&gt;全局选择&lt;/h3&gt;

&lt;p&gt;到现在为止，Flutter 在 Web 上的文本选择交互仍然没有达到预期。与 Flutter 应用不同，原生的 Web 应用会将每个节点构建为树形结构。在传统的 Web 应用中你可以轻松用拖动手势来选择网页上的节点，这在 Flutter Web 应用中无法轻松达成。&lt;/p&gt;

&lt;p&gt;从今天起，一切都发生了变化。我们引入了 &lt;code class=&quot;highlighter-rouge&quot;&gt;SelectionArea&lt;/code&gt; widget，它的子 widget 现已可以进行随意选择！&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/202211/flutter3.3/1f287d625f1711edad25acde48001122.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;只需使用 &lt;code class=&quot;highlighter-rouge&quot;&gt;SelectionArea&lt;/code&gt; 包裹住路由显示的内容 (例如 &lt;code class=&quot;highlighter-rouge&quot;&gt;Scaffold&lt;/code&gt;)，Flutter 会替你处理好一切，你便可以享受到这项强力的新特性。&lt;/p&gt;

&lt;p&gt;想要更全面深入地了解这个绝妙的新功能，请访问 &lt;a href=&quot;https://api.flutter.dev/flutter/material/SelectionArea-class.html&quot;&gt;SelectionArea API 页面&lt;/a&gt;。&lt;/p&gt;

&lt;h3 id=&quot;触控板操作&quot;&gt;触控板操作&lt;/h3&gt;

&lt;p&gt;Flutter 3.3 优化了针对触控板的支持。Flutter 不仅提供了更丰富且顺滑的控制，同时也减少了几种特定情况的误触。若你想了解误触的示例，你可以查看 &lt;a href=&quot;https://docs.flutter.dev/docs/cookbook&quot;&gt;Flutter 实用教程&lt;/a&gt; 页面。将页面滚动到底部的 DartPad，并跟随以下步骤进行操作：&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;缩小窗口让上半部分出现滚动条&lt;/li&gt;
  &lt;li&gt;将指针悬停在上半部分&lt;/li&gt;
  &lt;li&gt;使用触控板进行滚动&lt;/li&gt;
  &lt;li&gt;在 Flutter 3.3 以前，使用触控板滚动会拖动元素，因为 Flutter 将模拟的手势事件进行了下发&lt;/li&gt;
  &lt;li&gt;从 Flutter 3.3 开始，使用触控板滚动会正确地滚动列表，因为 Flutter 会传递「滚动」事件，卡片不会识别这些事件，而列表会进行对应的处理&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;想了解更多信息，请访问 &lt;a href=&quot;&amp;lt;https://files.flutter-io.cn/flutter-design-docs/Flutter_Trackpad_Gestures_(PUBLICLY%20SHARED).pdf&quot;&gt;Flutter 触控板手势&lt;/a&gt; 的设计文档，并且查看以下的拉取请求：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;PR 89944: &lt;a href=&quot;https://github.com/flutter/flutter/pull/89944&quot;&gt;在框架中支持触控板手势&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;PR 31591: &lt;a href=&quot;https://github.com/flutter/engine/pull/31591&quot;&gt;iPad 上的触控版手势&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;PR 34060: &lt;a href=&quot;https://github.com/flutter/engine/pull/34060&quot;&gt;ChromeOS/Android 触控板手势&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;PR 31594: &lt;a href=&quot;https://github.com/flutter/engine/pull/31594&quot;&gt;Win32 的触控板手势&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;PR 31592: &lt;a href=&quot;https://github.com/flutter/engine/pull/31592&quot;&gt;Linux 的触控板手势&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;PR 31593: &lt;a href=&quot;https://github.com/flutter/engine/pull/31593&quot;&gt;Mac 上的触控板手势&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;随手写功能&quot;&gt;随手写功能&lt;/h3&gt;

&lt;p&gt;感谢来自社区成员 &lt;a href=&quot;https://github.com/fbcouch&quot;&gt;fbcouch&lt;/a&gt; 的出彩贡献。Flutter 现在支持在 iPadOS 上使用 Apple Pencil 进行 &lt;a href=&quot;http://support.apple.com/zh-cn/guide/ipad/ipad355ab2a7/ipados&quot;&gt;随手写&lt;/a&gt; 输入。这项功能已默认在 &lt;code class=&quot;highlighter-rouge&quot;&gt;CupertinoTextField&lt;/code&gt;、&lt;code class=&quot;highlighter-rouge&quot;&gt;TextField&lt;/code&gt; 和 &lt;code class=&quot;highlighter-rouge&quot;&gt;EditableText&lt;/code&gt; 上启用。只需要将 Flutter 升级到 3.3 就可以为你的用户带来这项新功能。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/202211/flutter3.3/1fc3a09e5f1711edad25acde48001122.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;文本输入&quot;&gt;文本输入&lt;/h3&gt;

&lt;p&gt;为了优化富文本编辑的支持，本次更新我们增加了从底层平台的 &lt;code class=&quot;highlighter-rouge&quot;&gt;TextInputPlugin&lt;/code&gt; 接收更加精细化的更新的能力。以前 &lt;code class=&quot;highlighter-rouge&quot;&gt;TextInputClient&lt;/code&gt; 只能传递新的编辑状态，而不能细分新旧状态之间的变化量，&lt;code class=&quot;highlighter-rouge&quot;&gt;TextEditingDelta&lt;/code&gt; 和 &lt;code class=&quot;highlighter-rouge&quot;&gt;DeltaTextInputClient&lt;/code&gt; 填充了这部分的信息差。通过访问这些变化量，你可以为输入区域构建自定义的样式，这个区域会在你输入时展开和收缩。想要了解更多信息，你可以查看 &lt;a href=&quot;https://flutter.github.io/samples/rich_text_editor.html&quot;&gt;富文本编辑器示例&lt;/a&gt;。&lt;/p&gt;

&lt;h2 id=&quot;material-design-3-支持&quot;&gt;Material Design 3 支持&lt;/h2&gt;

&lt;p&gt;Flutter 团队持续地在整合更多 Material Design 3 的组件到 Flutter 中。本次更新包括了&lt;a href=&quot;https://api.flutter.dev/flutter/material/IconButton-class.html&quot;&gt;IconButton&lt;/a&gt; 的中等和扩大样式。&lt;/p&gt;

&lt;p&gt;想要跟踪 Material Design 3 的整合进度，你可以在 GitHub 上查看 &lt;a href=&quot;https://github.com/flutter/flutter/issues/91605&quot;&gt;将 Material 3 带到 Flutter&lt;/a&gt;。&lt;/p&gt;

&lt;h3 id=&quot;iconbutton-示例&quot;&gt;IconButton 示例&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/202211/flutter3.3/2016f3205f1711edad25acde48001122.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;chip-示例&quot;&gt;Chip 示例&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/202211/flutter3.3/2027cd9e5f1711edad25acde48001122.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;中型和大型-appbar-示例&quot;&gt;中型和大型 AppBar 示例&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/202211/flutter3.3/226a4bae5f1711edad25acde48001122.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/202211/flutter3.3/2433c0005f1711edad25acde48001122.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;桌面端平台&quot;&gt;桌面端平台&lt;/h2&gt;

&lt;h3 id=&quot;windows&quot;&gt;Windows&lt;/h3&gt;

&lt;p&gt;在先前构建 Windows 桌面应用时，应用的版本只能在文件中进行设置。这样的行为与其他平台上设置版本的行为并不一致。&lt;/p&gt;

&lt;p&gt;现在 Windows 桌面应用的版本可以通过 &lt;code class=&quot;highlighter-rouge&quot;&gt;pubspec.yaml&lt;/code&gt; 和构建参数进行设置。它有助于当你的应用推送了更新时，在应用中为你的用户提供应用更新功能。&lt;/p&gt;

&lt;p&gt;想要了解更多关于设置 Windows 桌面应用版本的内容，请查看 &lt;a href=&quot;https://docs.flutter.dev/docs/deployment/windows%23updating-the-apps-version-number&quot;&gt;文档&lt;/a&gt;。Flutter 3.3 前创建的项目需要手动进行调整才能使用这项功能。&lt;/p&gt;

&lt;h2 id=&quot;packages-更新&quot;&gt;Packages 更新&lt;/h2&gt;

&lt;h3 id=&quot;go_router-发布&quot;&gt;go_router 发布&lt;/h3&gt;

&lt;p&gt;当你的应用包含复杂的导航需求时，它可能会让你晕头转向。为了扩展 Flutter 的导航 API，团队发布了新版本的 &lt;a href=&quot;https://pub.dev/packages/go_router&quot;&gt;go_router package&lt;/a&gt;，让你在所有平台的路由逻辑设计变得更加简洁。&lt;/p&gt;

&lt;p&gt;go_router package 由 Flutter 团队进行维护，通过声明式和基于 URL 的 API 让导航和 deep links 的处理变得更加轻松。最新的 5.0 版本让应用可以通过异步代码进行重定向，其中还包含了一些 &lt;a href=&quot;https://files.flutter-io.cn/flutter-design-docs/[Draft]Go_Router%205.0%20migration%20guide%20(PUBLICLY%20SHARED).docx&quot;&gt;破坏性改动&lt;/a&gt;。&lt;/p&gt;

&lt;p&gt;更多内容请查看官方文档：&lt;a href=&quot;https://docs.flutter.dev/docs/development/ui/navigation&quot;&gt;路由和导航&lt;/a&gt;。&lt;/p&gt;

&lt;h2 id=&quot;vs-code-插件增强&quot;&gt;VS Code 插件增强&lt;/h2&gt;

&lt;p&gt;VS Code 的 Flutter 扩展也带来了添加依赖的更新。你可以使用 &lt;code class=&quot;highlighter-rouge&quot;&gt;Dart: Add Dependency&lt;/code&gt; 命令加上逗号一次性添加多个依赖。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/202211/flutter3.3/248f6a2c5f1711edad25acde48001122.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;你可以查看以下内容了解自上一个 Flutter 稳定版本发布以来所有 VS Code 的 Flutter 插件的更新：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://groups.google.com/g/flutter-announce/c/u1iSDMtKMVg&quot;&gt;VS Code extensions v3.46&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://groups.google.com/g/flutter-announce/c/x4m9o93-Dng&quot;&gt;VS Code extensions v3.44&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://groups.google.com/g/flutter-announce/c/45Wsk5pISx4&quot;&gt;VS Code extensions v3.42&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;flutter-开发者工具更新&quot;&gt;Flutter 开发者工具更新&lt;/h2&gt;

&lt;p&gt;自上次 Flutter 发布稳定版以来，DevTools 同样也包含数次更新，包括数据表格展示的用户体验和性能的提升，还有在滚动事件的长列表时减少卡顿 (&lt;a href=&quot;https://github.com/flutter/devtools/pull/4175&quot;&gt;#4175&lt;/a&gt;。&lt;/p&gt;

&lt;p&gt;以下是自 Flutter 3.0 以来 DevTools 各个版本更新的公告内容：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.flutter.dev/docs/development/tools/devtools/release-notes/release-notes-2.16.0&quot;&gt;Flutter DevTools 2.16.0 发行注记&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.flutter.dev/docs/development/tools/devtools/release-notes/release-notes-2.15.0&quot;&gt;Flutter DevTools 2.15.0 发行注记&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.flutter.dev/docs/development/tools/devtools/release-notes/release-notes-2.14.0&quot;&gt;Flutter DevTools 2.14.0 发行注记&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;性能改进&quot;&gt;性能改进&lt;/h2&gt;

&lt;h3 id=&quot;raster-缓存改善&quot;&gt;Raster 缓存改善&lt;/h3&gt;

&lt;p&gt;本次更新提升了加载资源图片的性能，减少了图片数据的拷贝和 Dart 垃圾回收 (GC) 的压力。先前在加载资源图片时，&lt;code class=&quot;highlighter-rouge&quot;&gt;ImageProvider&lt;/code&gt; 需要复制多次压缩的数据。首先，打开图片时数据会被拷贝至原生的堆内存并向 Dart 暴露出结构数组。然后，数据会在结构数组转换至内置存储的 &lt;code class=&quot;highlighter-rouge&quot;&gt;ui.ImmutableBuffer&lt;/code&gt; 时被再次拷贝。&lt;/p&gt;

&lt;p&gt;随着 &lt;a href=&quot;https://github.com/flutter/engine/pull/32999&quot;&gt;新增的 ui.ImmutableBuffer.fromAsset 的引入&lt;/a&gt;。这个加载过程同时也会更加快速，因为它会绕过之前方法通道所需的额外调度的开销。特别是在我们的基准测试中，图片的加载速度提升为原先的 2 倍左右。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/202211/flutter3.3/24b4ee965f1711edad25acde48001122.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;更多相关信息，请查看官方文档：&lt;a href=&quot;https://docs.flutter.dev/docs/release/breaking-changes/image-provider-load-buffer&quot;&gt;添加 ImageProvider.loadBuffer&lt;/a&gt;。&lt;/p&gt;

&lt;h2 id=&quot;框架稳定性&quot;&gt;框架稳定性&lt;/h2&gt;

&lt;h3 id=&quot;禁用-ios-内存指针压缩&quot;&gt;禁用 iOS 内存指针压缩&lt;/h3&gt;

&lt;p&gt;在 Flutter 2.10 稳定版的发布中，我们为 iOS 启用了 Dart 的内存指针压缩优化。但是，Yeatse 在 GitHub 上&lt;a href=&quot;https://github.com/flutter/flutter/issues/105183&quot;&gt;提醒我们这项优化中包含了我们并未预料到的后果&lt;/a&gt;。Dart 通过为堆保持一个大的虚拟内存来实现指针压缩。由于 iOS 上允许的总虚拟内存少于其他平台，因此其他例如 Flutter 插件之类的组件可持有的虚拟内存便减少了。&lt;/p&gt;

&lt;p&gt;虽然禁用了指针压缩会增加 Dart 对象消费的内存，但是它也恢复了 Flutter 应用可用的非 Dart 部分的内存，总体来说是更合适的方案。&lt;/p&gt;

&lt;p&gt;应用可以增加最大虚拟内存的分配量，但这项操作仅在较新的 iOS 版本上可用，并不适用于其他 Flutter 支持的 iOS 设备版本。当我们能够在所有位置使用这项优化时，我们会重新进行评估。&lt;/p&gt;

&lt;h2 id=&quot;api-改进&quot;&gt;API 改进&lt;/h2&gt;

&lt;h3 id=&quot;platformdispatcheronerror&quot;&gt;PlatformDispatcher.onError&lt;/h3&gt;

&lt;p&gt;在先前的版本中，你需要手动配置一个自定义的 Zone 来捕获应用的所有异常和错误。然而，自定义的 Zone 并不适用于 Dart 核心库中的一些优化，会减慢应用的启动时间。在本次更新中，你可以通过设置 PlatformDispatcher.onError 回调来捕获所有的错误和异常，代替自定义的 Zone。更多内容请查看已经更新的官方文档：&lt;a href=&quot;https://docs.flutter.dev/docs/testing/errors&quot;&gt;在 Flutter 里处理错误&lt;/a&gt;。&lt;/p&gt;

&lt;h3 id=&quot;fragmentprogram-更新&quot;&gt;FragmentProgram 更新&lt;/h3&gt;

&lt;p&gt;用 GLSL  编写的并且在 &lt;code class=&quot;highlighter-rouge&quot;&gt;pubspec.yaml&lt;/code&gt; 的 &lt;code class=&quot;highlighter-rouge&quot;&gt;shader:&lt;/code&gt; 部分声明的片段着色器 (Fragment shader) 现在会自动编译成引擎可以正确识别的格式，并且自动绑定为应用的资源。有了这项改动，开发者无需再使用三方工具编译着色器。在未来，引擎的 FragmentProgram API 可能只能接受来自 Flutter 的工具构建。目前我们还没应用这项更改，但如 &lt;a href=&quot;https://files.flutter-io.cn/flutter-design-docs/FragmentProgram_Support_Improvements%20(PUBLICLY_SHARED).pdf&quot;&gt;FragmentProgram API 改进支持的设计文档&lt;/a&gt; 中所计划的，有可能在未来实行。&lt;/p&gt;

&lt;p&gt;想要了解更多内容，你可以查看这个 &lt;a href=&quot;https://github.com/zanderso/fragment_shader_example&quot;&gt;Flutter 着色器示例&lt;/a&gt;。&lt;/p&gt;

&lt;h3 id=&quot;布局小数处理&quot;&gt;布局小数处理&lt;/h3&gt;

&lt;p&gt;在先前的版本中，Flutter 引擎会将合成层精准地对齐像素，用于提升 Flutter 在旧款 iPhone (32 位) 上的渲染性能。而在我们添加桌面平台的支持后，我们注意到这项操作会导致肉眼可见的抖动，因为桌面平台的是设备像素比通常会更低。例如在较低的 DPR 设备上，提示会在渐入时产生的明显抖动。在确定更新的 iPhone 设备并不需要这项优化后，我们已&lt;a href=&quot;https://github.com/flutter/flutter/issues/103909&quot;&gt;从 Flutter 引擎中将其移除&lt;/a&gt;，来改善桌面端的渲染保真度。&lt;/p&gt;

&lt;p&gt;此外我们还发现，将这些像素对齐移除后，先前在黄金镜像测试 (golden image test) 时候出现的细微渲染差异也变得更稳定了。&lt;/p&gt;

&lt;h3 id=&quot;停止支持-32-位-ios&quot;&gt;停止支持 32 位 iOS&lt;/h3&gt;

&lt;p&gt;在我们发布 Flutter 3.0 时曾经提到，由于使用量的减少，3.0 版本是最后一个支持 32 位 iOS 设备以及 iOS 9 和 10 的版本。这个改动将会影响  iPhone 4S、iPhone 5、 iPhone 5C 以及第 2、3、4 代 iPad 设备。Flutter 3.3 稳定版以及之后的稳定版将不再支持 32 位 iOS 设备以及 iOS 9 \&amp;amp; 10。这意味着使用 Flutter 3.3 及之后构建的应用将不能再上述设备上运行。&lt;/p&gt;

&lt;h3 id=&quot;macos-1011-和-1012-的支持进入尾声&quot;&gt;macOS 10.11 和 10.12 的支持进入尾声&lt;/h3&gt;

&lt;p&gt;在即将到来的 2022 第四季度的正式版发行计划中，我们将放弃对 macOS 版本 10.11 和 10.12 的支持。这意味着在此之后的 Flutter SDK 稳定版将不能在这些版本上运行，Flutter 最低支持的 macOS 版将上升为 10.13 High Sierra。&lt;/p&gt;

&lt;h3 id=&quot;停止支持-bitcode&quot;&gt;停止支持 Bitcode&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://developer.apple.com/documentation/xcode-release-notes/xcode-14-release-notes&quot;&gt;即将发布的 Xcode 14 将不再支持提交含有 Bitcode 的 iOS 应用&lt;/a&gt;，这个版本的 Xcode 会对开启了 bitcode 的项目发出警告。因此 Flutter 将会在未来的稳定发行版中移除对 bitcode 的支持。我们不希望影响到很多的开发者，因此默认情况下，Flutter 将不会开启 bitcode。然而，如果你手动在 Xcode 项目中开启了 bitcode，请尽快在升级到 Xcode 14 之后关闭它。&lt;/p&gt;

&lt;p&gt;你可以打开 &lt;code class=&quot;highlighter-rouge&quot;&gt;ios/Runner.xcworkspace&lt;/code&gt; 并在 build setting 中将 Enable Bitcode 设置为 No 以关闭它。混合开发应用可以在宿主工程的 Xcode 项目中关闭它。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/202211/flutter3.3/24e1146c5f1711edad25acde48001122.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;你可以查阅 &lt;a href=&quot;https://help.apple.com/xcode/mac/11.0/index.html?localePath%3Den.lproj%23/devde46df08a&quot;&gt;Apple 文档&lt;/a&gt; 了解更多关于 bitcode 分发的内容。&lt;/p&gt;

&lt;h2 id=&quot;最后&quot;&gt;最后&lt;/h2&gt;

&lt;blockquote&gt;
  &lt;p&gt;Flutter精彩课程推荐&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://u.cboy.me/ss/u?cid=672&amp;amp;aid=5&amp;amp;platform=devio&quot;&gt;ChatGPT + Flutter快速开发多端聊天机器人App&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://api.devio.org/ss/u?cid=487&amp;amp;aid=4&amp;amp;platform=devio&quot;&gt;Flutter高级进阶实战 仿哔哩哔哩APP&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://api.devio.org/ss/u?cid=741&amp;amp;aid=4&amp;amp;platform=devio&quot;&gt;全新Flutter从入门到进阶，实战仿携程网App&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Sun, 06 Nov 2022 00:00:00 +0800</pubDate>
        <link>http://localhost:4000/2022/11/06/whats-new-in-flutter-3-3/</link>
        <guid isPermaLink="true">http://localhost:4000/2022/11/06/whats-new-in-flutter-3-3/</guid>
        
        <category>Flutter更新</category>
        
        <category>Flutter 3.3</category>
        
        
      </item>
    
      <item>
        <title>Flutter 3更新详解</title>
        <description>&lt;blockquote&gt;
  &lt;p&gt;&lt;a href=&quot;https://u.cboy.me/ss/u?cid=672&amp;amp;aid=5&amp;amp;platform=devio&quot;&gt;⭐整合ChatGPT与Flutter高级技术，手把手带你从0到1开发一款可运行在多端的聊天机器人App，帮助你抓住机遇，快速具备AI运用能力，成为移动端领域的AI高手👏&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Flutter 3 实现了 Flutter 以移动端为中心扩展到多平台的产品规划，并在今年 Google I/O大会的主题演讲上正式发布，继&lt;a href=&quot;https://www.imooc.com/article/324225&quot;&gt;Flutter 2.10支持Windows&lt;/a&gt; 之后，此次发布提供了对 macOS 和 Linux 桌面端的稳定版支持，同时包括 Firebase 集成的改进，增加了与生产力和性能相关的新特性，并对 Apple 芯片提供了支持。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/202205/flutter3/98cc6310df4a11ec90d0acde48001122.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;此版本中激动人心的升级包括: 更新了 Flutter 对 macOS 和 Linux 的支持，性能得到了显著提升，针对移动设备和 web 端的更新，以及诸多其他功能！此外，我们还带来了关于减少对旧版 Windows 提供支持的消息，以及几条重大变更。下面让我们直奔主题吧！&lt;/p&gt;

&lt;h2 id=&quot;全桌面平台生产就绪&quot;&gt;&lt;strong&gt;全桌面平台生产就绪&lt;/strong&gt;&lt;/h2&gt;

&lt;p&gt;Linux 和 macOS 平台的支持已进入稳定状态，内含下列功能:&lt;/p&gt;

&lt;h3 id=&quot;级联菜单和-macos-系统菜单栏支持&quot;&gt;&lt;strong&gt;级联菜单和 macOS 系统菜单栏支持&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;现在您可以使用 &lt;code class=&quot;highlighter-rouge&quot;&gt;PlatformMenuBar&lt;/code&gt; widget 在 macOS 上创建平台渲染的菜单栏，支持插入仅限该平台使用的菜单，并控制 macOS 应用菜单中的显示内容。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/202205/flutter3/99439dc2df4a11ec90d0acde48001122.gif&quot; alt=&quot;△ 级联菜单示意&quot; /&gt;&lt;/p&gt;

&lt;p&gt;△ 级联菜单示意&lt;/p&gt;

&lt;h3 id=&quot;完整支持全桌面平台多国文本输入&quot;&gt;&lt;strong&gt;完整支持全桌面平台多国文本输入&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;全部三种桌面平台完整支持多国文本输入，包括使用文本输入法编辑器 (IME) 的语言，如中文、日文和韩文。同时支持第三方输入法，如搜狗 (Sogou)、谷歌日文输入法 (Google Japanese Input) 等。&lt;/p&gt;

&lt;h3 id=&quot;全桌面平台无障碍服务&quot;&gt;&lt;strong&gt;全桌面平台无障碍服务&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;Flutter 支持 Windows、macOS 和 Linux 平台的无障碍服务，包括屏幕文字阅读、无障碍导航和颜色反转等。&lt;/p&gt;

&lt;h3 id=&quot;macos-平台默认使用通用二进制文件&quot;&gt;&lt;strong&gt;macOS 平台默认使用通用二进制文件&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;在 Flutter 3 中，Flutter macOS 桌面应用会被构建为通用二进制文件，从而原生支持使用 Intel 处理器的 Mac 电脑和搭载 Apple Silicon 的新设备。&lt;/p&gt;

&lt;h3 id=&quot;不再支持使用-windows-78-进行开发&quot;&gt;&lt;strong&gt;不再支持使用 Windows 7/8 进行开发&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;此版本将建议的 Windows 开发版本提升为 Windows 10。虽然我们不会禁止使用旧版本 (Windows 7、Windows 8、Windows 8.1) 进行开发，但由于 &lt;a href=&quot;https://docs.microsoft.com/en-us/lifecycle/faq/windows&quot;&gt;Microsoft 不再支持这些旧版本&lt;/a&gt;，我们仅会针对这些版本提供有限的测试。尽管我们会尽力为旧版本提供支持，但还是建议您升级版本。&lt;/p&gt;

&lt;p&gt;&lt;em&gt;注意: 在 Windows 7 和 8 上依然可以运行 Flutter 应用，此更改只影响我们推荐使用的开发环境。&lt;/em&gt;&lt;/p&gt;

&lt;h2 id=&quot;移动端更新&quot;&gt;&lt;strong&gt;移动端更新&lt;/strong&gt;&lt;/h2&gt;

&lt;p&gt;我们针对移动端的更新包括:&lt;/p&gt;

&lt;h3 id=&quot;支持可折叠设备&quot;&gt;&lt;strong&gt;支持可折叠设备&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;Flutter 3 支持可折叠移动设备。通过由 Microsoft 牵头的合作，让大家可以使用新的功能和 widget 在可折叠设备上创建动感、愉悦的体验。&lt;/p&gt;

&lt;p&gt;作为合作的一部分，&lt;a href=&quot;https://api.flutter.dev/flutter/widgets/MediaQuery-class.html&quot;&gt;MediaQuery&lt;/a&gt; 现在包含一个 &lt;a href=&quot;https://api.flutter.dev/flutter/dart-ui/DisplayFeature-class.html&quot;&gt;DisplayFeature&lt;/a&gt; 列表，用以描述设备组件状态，包括铰链、折叠状态和屏幕刘海等。此外，&lt;a href=&quot;https://api.flutter.dev/flutter/widgets/DisplayFeatureSubScreen-class.html&quot;&gt;DisplayFeatureSubScreen&lt;/a&gt; widget 包含的子 widget 的位置现在不会与 &lt;code class=&quot;highlighter-rouge&quot;&gt;DisplayFeature&lt;/code&gt; 的边界重叠，并且已经用于框架的默认对话框和弹出窗口，使 Flutter 默认即可动态适应这些元素的位置。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/202205/flutter3/9947b7e0df4a11ec90d0acde48001122.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;非常感谢 Microsoft 团队。另外我们还要特别鸣谢@andreidiaconu所做出的贡献！&lt;/p&gt;

&lt;p&gt;欢迎大家尝试&lt;a href=&quot;https://docs.microsoft.com/en-us/dual-screen/flutter/samples&quot;&gt; Surface Duo 模拟器示例&lt;/a&gt;，其中包含了 Flutter Gallery 的一个特别派生版本，以便了解 Flutter 在双屏中的实际运行情况:&lt;/p&gt;

&lt;h3 id=&quot;支持-ios-可变刷新率&quot;&gt;&lt;strong&gt;支持 iOS 可变刷新率&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;Flutter 现已在使用 ProMotion 显示屏的 iOS 设备上支持可变刷新率，包括 iPhone 13 Pro 和 iPad Pro。在这些设备上 Flutter 应用的渲染刷新率可达 120 Hz，而之前最高为 60 Hz，这使得滚动等快速动画的观感体验更加流畅。请查看 &lt;a href=&quot;https://docs.google.com/document/d/1O-ot6MydAl5pAr_XGnpR-Qq5A5CPDF6edaPu8xQtgCQ/edit?resourcekey=0-LlXeGtGRC67XL4NrGoc91A&quot;&gt;官方文档&lt;/a&gt; 了解详情。&lt;/p&gt;

&lt;h3 id=&quot;简化-ios-发布&quot;&gt;&lt;strong&gt;简化 iOS 发布&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;我们为 &lt;code class=&quot;highlighter-rouge&quot;&gt;flutter build ipa&lt;/code&gt; 命令添加了 &lt;a href=&quot;https://github.com/flutter/flutter/pull/97672&quot;&gt;新选项&lt;/a&gt;，使得 iOS 应用发布更加简便。在您准备好分发至 TestFlight 或 App Store 时，请运行 flutter build ipa 构建 Xcode 归档 (.xcarchive 文件) 和应用软件包 (.ipa 文件)。您可选择添加 –export-method ad-hoc、–export-method development 或 –export-method enterprise 选项。应用软件包构建完成后，即可通过 &lt;a href=&quot;https://apps.apple.com/us/app/transporter/id1450874784&quot;&gt;Apple Transport macOS 应用&lt;/a&gt; 将其上传至 Apple，或使用 xcrun altool 在命令行中完成上传 (运行 man altool 获取 App Store Connect API 密钥验证说明)。上传完成后，您的应用即可发布至 &lt;a href=&quot;https://docs.flutter.dev/deployment/ios#release-your-app-to-the-app-store&quot;&gt;TestFlight 或 App Store&lt;/a&gt;。在完成应用显示名称、应用图标等初始 &lt;a href=&quot;https://docs.flutter.dev/docs/deployment/ios#review-xcode-project-settings&quot;&gt;Xcode 项目设置&lt;/a&gt; 后，您在发布应用时就无需再打开 Xcode 了。&lt;/p&gt;

&lt;h3 id=&quot;gradle-版本更新&quot;&gt;&lt;strong&gt;Gradle 版本更新&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;使用 Flutter 工具创建新项目时，您或许已经注意到，生成的文件现在使用了最新版本的 Gradle 和 Android Gradle 插件。对于现有的项目而言，您需要手动将 Gradle 版本升级至 7.4，Android Gradle 插件版本升级至 7.1.2。&lt;/p&gt;

&lt;h3 id=&quot;停止更新-32-位-iosios-9ios-10&quot;&gt;&lt;strong&gt;停止更新 32 位 iOS/iOS 9/iOS 10&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;按照 2022 年 2 月 2.10 稳定版发布的公告，Flutter 对 32 位 iOS 设备以及 iOS 9 和 10 的支持即将结束。这一变化会影响到 iPhone 4S、iPhone 5、iPhone 5C 以及 iPad 第二、三、四代设备。Flutter 3 是最后一个支持上述 iOS 版本和设备的稳定版本。&lt;/p&gt;

&lt;p&gt;如需详细了解此项变更，请参阅 &lt;a href=&quot;https://docs.google.com/document/d/1cc5EOsuTlbf4dTDTwmkD3aKjS8XEbVCIqi9BFct9XHM/edit?resourcekey=0-Iv0gXDx7nSDCe3YDfxDKqw&quot;&gt;RFC: 终止对 32 位 iOS 设备的支持&lt;/a&gt;。&lt;/p&gt;

&lt;h2 id=&quot;web-端更新&quot;&gt;&lt;strong&gt;Web 端更新&lt;/strong&gt;&lt;/h2&gt;

&lt;p&gt;我们针对 web 端的更新包括:&lt;/p&gt;

&lt;h3 id=&quot;图像解码&quot;&gt;&lt;strong&gt;图像解码&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;在浏览器支持的情况下，Flutter web 现在可以自动检测并使用 ImageDecoder API。到目前为止，大多数基于 Chrome 的浏览器都添加了此 API，如 Chrome、Edge、Opera、Samsung Browser 等。&lt;/p&gt;

&lt;p&gt;这个新 API 使用浏览器内置的图像编解码器在主线程之外异步解码图像。这使得图像解码速度提高 2 倍，而且完全不会阻塞主线程，消除了所有之前由图像引起的卡顿现象。&lt;/p&gt;

&lt;h3 id=&quot;web-应用的生命周期&quot;&gt;&lt;strong&gt;Web 应用的生命周期&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;Flutter web 应用的新生命周期 API 提升了灵活性，可实现从托管 HTML 页面控制 Flutter 应用的引导程序，并支持使用 Lighthouse 分析您的应用的性能表现。这适用于许多用例，包括以下常被开发者们提及的场景:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;启动画面。&lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;加载指示器。&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;在 Flutter 应用之前显示的纯 HTML 交互式加载页。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;请阅读官方文档 “&lt;a href=&quot;https://docs.flutter.dev/docs/development/platform-integration/web/initialization&quot;&gt;自定义 web 应用初始化&lt;/a&gt;” 了解详细信息。&lt;/p&gt;

&lt;h2 id=&quot;工具更新&quot;&gt;&lt;strong&gt;工具更新&lt;/strong&gt;&lt;/h2&gt;

&lt;p&gt;我们针对 Flutter 和 Dart 工装的更新内容包括:&lt;/p&gt;

&lt;h3 id=&quot;lint-package-更新&quot;&gt;&lt;strong&gt;Lint package 更新&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;Lint package 2.0 版现已发布:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://pub.dev/packages/flutter_lints/versions/2.0.0&quot;&gt;Flutter&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://pub.dev/packages/lints/versions/2.0.0&quot;&gt;Dart&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;使用 &lt;code class=&quot;highlighter-rouge&quot;&gt;flutter create&lt;/code&gt; 生成的 Flutter 3 应用将自动启用 2.0 版 Lint 套件。我们建议大家运行 &lt;code class=&quot;highlighter-rouge&quot;&gt;flutter pub upgrade --major-versions flutter_lints&lt;/code&gt;，将现有应用、package 和插件迁移到 2.0 版，以遵循 Flutter 最新、最优的最佳实践。&lt;/p&gt;

&lt;p&gt;Lint 2.0 版中新增的大多数警告都带有自动修复功能。因此，当您在应用的 &lt;code class=&quot;highlighter-rouge&quot;&gt;pubspec.yaml&lt;/code&gt; 中升级至最新 package 版本后，即可在代码库中运行 &lt;code class=&quot;highlighter-rouge&quot;&gt;dart fix --apply&lt;/code&gt; 自动修复大多数 Lint 警告 (某些警告仍需部分手动操作)。对于尚未使用 &lt;code class=&quot;highlighter-rouge&quot;&gt;package:flutter_lints&lt;/code&gt; 的应用、package 或插件，建议开发者按照 &lt;a href=&quot;https://docs.flutter.dev/docs/release/breaking-changes/flutter-lints-package#migration-guide&quot;&gt;迁移指南&lt;/a&gt; 迁移至最新版本。&lt;/p&gt;

&lt;h3 id=&quot;性能提升&quot;&gt;&lt;strong&gt;性能提升&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;感谢开源贡献者 &lt;a href=&quot;https://github.com/knopp&quot;&gt;knopp&lt;/a&gt;，局部重绘已经在支持此功能的 &lt;a href=&quot;https://github.com/flutter/engine/pull/29591&quot;&gt;Android 设备上实现&lt;/a&gt;。在我们的本地测试中，此功能在 Pixel 4XL 设备上将依照 &lt;code class=&quot;highlighter-rouge&quot;&gt;backdrop_filter_perf&lt;/code&gt; 基准测试的帧栅格化时间的平均值、90 百分位值和 99 百分位值缩减了 5 倍。现在，iOS 设备和较新版本的 Android 设备上都已实现在单一矩形脏区出现时进行局部重绘。&lt;/p&gt;

&lt;p&gt;我们 &lt;a href=&quot;https://github.com/flutter/engine/pull/30957&quot;&gt;进一步提升&lt;/a&gt; 了简单用例中不透明度动画的性能。具体而言，当 &lt;code class=&quot;highlighter-rouge&quot;&gt;Opacity&lt;/code&gt; widget 只包含单个渲染原语时，通常由 &lt;code class=&quot;highlighter-rouge&quot;&gt;Opacity&lt;/code&gt; widget 调用的 &lt;code class=&quot;highlighter-rouge&quot;&gt;saveLayer&lt;/code&gt; 方法可以省略。在为此优化构建的基准测试中，此用例下的栅格化时间提升了 &lt;a href=&quot;https://flutter-flutter-perf.skia.org/e/?begin=1643063115&amp;amp;end=1644004520&amp;amp;keys=X32827d8819e8271e025f50e77bf2bec0&amp;amp;requestType=0&amp;amp;xbaroffset=27447&quot;&gt;一个数量级&lt;/a&gt;。在今后的版本中，我们计划为更多场景应用此优化。&lt;/p&gt;

&lt;p&gt;在开源贡献者 &lt;a href=&quot;https://github.com/JsouLiang&quot;&gt;JsouLiang&lt;/a&gt; 的努力下，引擎的光栅和界面线程在 Android 和 iOS 上的运行优先级已经高于其他线程 (比如 Dart VM 的后台垃圾回收线程)。在我们的基准测试中，这使得帧构建平均时间提速 &lt;a href=&quot;https://flutter-flutter-perf.skia.org/e/?begin=1644581114&amp;amp;end=1644647407&amp;amp;keys=X3999dc0a0c89054eaa9f66bcff27d882&amp;amp;num_commits=50&amp;amp;request_type=1&amp;amp;xbaroffset=27549&quot;&gt;约 20%&lt;/a&gt;。&lt;/p&gt;

&lt;p&gt;在第 3 版发布之前，光栅缓存的准入策略只查看图片中绘制算子的数量 (假设任何具有多个算子的图片都应该进入缓存)。但这会导致引擎消耗内存来缓存渲染速度极快的图片。此版本 &lt;a href=&quot;https://github.com/flutter/engine/pull/31417&quot;&gt;引入新的机制&lt;/a&gt;，根据所包含绘制算子的成本来估计图像渲染的复杂性。在我们的性能测试中，使用新机制作为栅格缓存准入策略可以 &lt;a href=&quot;https://flutter-flutter-perf.skia.org/e/?begin=1644790212&amp;amp;end=1646044276&amp;amp;keys=X4c7dd4e4903a38523816c00b31d4d787&amp;amp;requestType=0&amp;amp;xbaroffset=27636&quot;&gt;减少内存用量&lt;/a&gt;，而不会降低性能。&lt;/p&gt;

&lt;p&gt;感谢开源贡献者 &lt;a href=&quot;https://github.com/ColdPaleLight&quot;&gt;ColdPaleLight&lt;/a&gt;，他修复了 iOS 上由于 &lt;a href=&quot;https://github.com/flutter/engine/pull/31513&quot;&gt;帧调度 bug&lt;/a&gt; 而导致少量动画帧丢失的问题。感谢所有报告此问题并提供掉帧复现视频的每一个人。&lt;/p&gt;

&lt;h3 id=&quot;impeller&quot;&gt;&lt;strong&gt;Impeller&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;我们一直致力于解决 iOS 和其他平台上的早期卡顿问题。在 Flutter 3 中，您可以在 iOS 上预览一个名为 &lt;a href=&quot;https://github.com/flutter/engine/tree/main/impeller&quot;&gt;Impeller&lt;/a&gt; 的实验性渲染后端。Impeller 会在引擎构建时预编译一组 &lt;a href=&quot;https://github.com/flutter/flutter/issues/77412&quot;&gt;较为小巧、简单的着色器&lt;/a&gt;，从而避免在应用运行时编译，而后者是造成 Flutter 卡顿的主要原因。Impeller 尚未作好投产准备，距离完成也还有一段距离。目前 Impeller 尚未实现 Flutter 的所有功能特性，但我们对它在 &lt;a href=&quot;https://github.com/flutter/gallery&quot;&gt;flutter/gallery&lt;/a&gt; 应用中实现的保真度和性能感到满意，并且很高兴地在这里和大家分享开发进度。特别是，在 Gallery 应用的过场动画中，即便最差的帧速度也比之前快大约 &lt;a href=&quot;https://flutter-flutter-perf.skia.org/e/?begin=1650297849&amp;amp;end=1651261748&amp;amp;queries=sub_result%3Dworst_frame_rasterizer_time_millis%26test%3Dnew_gallery_impeller_ios__transition_perf%26test%3Dnew_gallery_ios__transition_perf&amp;amp;requestType=0&quot;&gt;20 倍&lt;/a&gt;。&lt;/p&gt;

&lt;p&gt;Impeller 可以带标记在 iOS 上使用。如果您要试用 Impeller，可以传递 &lt;code class=&quot;highlighter-rouge&quot;&gt;--enable-impeller&lt;/code&gt; 标记至 &lt;code class=&quot;highlighter-rouge&quot;&gt;flutter run&lt;/code&gt;，或将 &lt;code class=&quot;highlighter-rouge&quot;&gt;Info.plist&lt;/code&gt; 文件中的 &lt;code class=&quot;highlighter-rouge&quot;&gt;FLTEnableImpeller&lt;/code&gt; 标记为 &lt;code class=&quot;highlighter-rouge&quot;&gt;true&lt;/code&gt;。Impeller 的开发会继续在 Flutter 主渠道进行，我们希望在未来的版本中提供进一步更新。&lt;/p&gt;

&lt;h3 id=&quot;android-上的内联广-告&quot;&gt;&lt;strong&gt;Android 上的内联广&lt;/strong&gt; &lt;strong&gt;告&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;使用 &lt;a href=&quot;https://pub.dev/packages/google_mobile_ads&quot;&gt;google_mobile_ads&lt;/a&gt; package 时，您应该可以感受到用户关键交互 (如页面之间的滚动和切换) 的性能有所提升。在新兴市场广为流行的设备上，这种性能提升尤其明显。最棒的是，您无需更改任何代码！&lt;/p&gt;

&lt;p&gt;在具体实现方面，Flutter 现在是异步组合 Android 视图 (即通常所说的 &lt;a href=&quot;https://docs.flutter.dev/docs/development/platform-integration/platform-views&quot;&gt;平台视图&lt;/a&gt;)。这意味着 Flutter 的光栅线程无需等待 Android 视图渲染。现在，Flutter 引擎使用它管理的 OpenGL 纹理将视图显示在屏幕上。&lt;/p&gt;

&lt;h2 id=&quot;更多令人兴奋的更新&quot;&gt;&lt;strong&gt;更多令人兴奋的更新&lt;/strong&gt;&lt;/h2&gt;

&lt;p&gt;我们针对 Flutter 生态系统的其他更新包括:&lt;/p&gt;

&lt;h3 id=&quot;material-3&quot;&gt;&lt;strong&gt;Material 3&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;Flutter 3 支持新一代 Material Design，即 &lt;a href=&quot;https://m3.material.io/&quot;&gt;Material Design 3&lt;/a&gt;。Flutter 3 提供 Material 3 的可选支持，包括动态颜色、最新颜色系统和字体等 Material You 功能，还包含许多组件的更新，以及在 Android 12 中引入的新触摸波纹设计和拉伸滚动等全新视觉效果。我们欢迎大家通过全新的 “&lt;a href=&quot;https://codelabs.developers.google.com/codelabs/flutter-boring-to-beautiful&quot;&gt;将枯燥无味的 Flutter 应用变得生动有趣&lt;/a&gt;” 的 Codelab 来尝试 Material 3 的功能特性。请参阅 &lt;a href=&quot;https://api.flutter.dev/flutter/material/ThemeData/useMaterial3.html&quot;&gt;API 文档&lt;/a&gt;，详细了解如何选用上述新功能特性，以及哪些组件支持 Material 3。另请关注 &lt;a href=&quot;https://github.com/flutter/flutter/issues/91605&quot;&gt;Material 3 Umbrella issue&lt;/a&gt; 了解最新开发进展。&lt;/p&gt;

&lt;h3 id=&quot;主题扩展&quot;&gt;&lt;strong&gt;主题扩展&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;借助 “主题扩展 (Theme extension)”，Flutter 现支持向 Material 库中的 &lt;code class=&quot;highlighter-rouge&quot;&gt;ThemeData&lt;/code&gt; 添加任何内容。您现在可以指定 &lt;code class=&quot;highlighter-rouge&quot;&gt;ThemeData.extensions&lt;/code&gt;，而无需 (在 Dart 中) 扩展 &lt;code class=&quot;highlighter-rouge&quot;&gt;ThemeData&lt;/code&gt; 并重新实现其 &lt;code class=&quot;highlighter-rouge&quot;&gt;copyWith&lt;/code&gt;、&lt;code class=&quot;highlighter-rouge&quot;&gt;lerp&lt;/code&gt; 和其他方法。另外，package 开发者也可以提供 &lt;code class=&quot;highlighter-rouge&quot;&gt;ThemeExtension&lt;/code&gt;。请参阅 &lt;a href=&quot;https://docs.google.com/document/d/1LbD4JqBgAfHex02oR3r2jyu9lTBBNBmyec2ovT59Kr8/edit&quot;&gt;官方文档&lt;/a&gt; 了解详情，并查看 GitHub 上的 &lt;a href=&quot;https://github.com/guidezpl/flutter/blob/master/examples/api/lib/material/theme/theme_extension.1.dart&quot;&gt;相关示例&lt;/a&gt;。&lt;/p&gt;

&lt;h3 id=&quot;广告&quot;&gt;&lt;strong&gt;广告&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;我们知道对于发布商来说，征求用户同意对个性化广告，以及应对 Apple 的 “应用追踪透明度 (App Tracking Transparency, ATT)” 要求非常重要。&lt;/p&gt;

&lt;p&gt;为了支持这些需求，Google 提供了 “用户消息平台 (User Messaging Platform, UMP)” SDK，取代了之前的开源 &lt;a href=&quot;https://github.com/googleads/googleads-consent-sdk-ios&quot;&gt;Consent SDK&lt;/a&gt;。在即将发布的 Google 移动广告 SDK (Flutter) 中，我们会增加对 UMP (用户消息平台) SDK 的支持，让发布商能够征求用户同意。如需了解详情，请在 pub.dev 上查看 &lt;a href=&quot;https://pub.dev/packages/google_mobile_ads&quot;&gt;google_mobile_ads&lt;/a&gt; package 页面。&lt;/p&gt;

&lt;h2 id=&quot;重大变更&quot;&gt;&lt;strong&gt;重大变更&lt;/strong&gt;&lt;/h2&gt;

&lt;p&gt;在持续扩展和改进 Flutter 的过程中，我们会尽量把重大变更的数量维持在最低限度。Flutter 3 包含以下重大变更:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.flutter.dev/docs/release/breaking-changes/2-10-deprecations&quot;&gt;2.10 版之后移除已弃用的 API&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.flutter.dev/docs/release/breaking-changes/page-transition-replaced-by-ZoomPageTransitionBuilder&quot;&gt;页面切换转为使用 ZoomPageTransitionsBuilder&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.flutter.dev/docs/release/breaking-changes/chip-usedeletebuttontooltip-migration&quot;&gt;Chips 的 useDeleteButtonTooltip 迁移至 deleteButtonTooltipMessage&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;如果您正在使用上述 API，请参阅 Flutter.dev 上的 &lt;a href=&quot;https://docs.flutter.dev/docs/release/breaking-changes&quot;&gt;迁移指南&lt;/a&gt;。&lt;/p&gt;

&lt;h2 id=&quot;总结&quot;&gt;&lt;strong&gt;总结&lt;/strong&gt;&lt;/h2&gt;

&lt;p&gt;按照 Statista 和 SlashData 等分析机构的统计，Flutter 依然是最受欢迎的跨平台界面工具包，我们能保持这种地位，社区的贡献功不可没，对此，Google Flutter 团队向大家致以由衷敬意。期待与各位社区成员共同努力，继续提供由社区驱动的工具，帮助大家为用户创造出更多令人愉悦的体验！&lt;/p&gt;

&lt;h2 id=&quot;最后&quot;&gt;最后&lt;/h2&gt;

&lt;blockquote&gt;
  &lt;p&gt;Flutter精彩课程推荐&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://u.cboy.me/ss/u?cid=672&amp;amp;aid=5&amp;amp;platform=devio&quot;&gt;ChatGPT + Flutter快速开发多端聊天机器人App&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://api.devio.org/ss/u?cid=487&amp;amp;aid=4&amp;amp;platform=devio&quot;&gt;Flutter高级进阶实战 仿哔哩哔哩APP&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://api.devio.org/ss/u?cid=741&amp;amp;aid=4&amp;amp;platform=devio&quot;&gt;全新Flutter从入门到进阶，实战仿携程网App&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Sun, 22 May 2022 00:00:00 +0800</pubDate>
        <link>http://localhost:4000/2022/05/22/whats-new-in-flutter-3/</link>
        <guid isPermaLink="true">http://localhost:4000/2022/05/22/whats-new-in-flutter-3/</guid>
        
        <category>Flutter更新</category>
        
        <category>Flutter 3</category>
        
        
      </item>
    
      <item>
        <title>Flutter 2.10更新详解</title>
        <description>&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/202202/flutter-2.10/bcfe88a28a5011eca2edaa665a3425bf.jpeg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;a href=&quot;https://u.cboy.me/ss/u?cid=672&amp;amp;aid=5&amp;amp;platform=devio&quot;&gt;⭐整合ChatGPT与Flutter高级技术，手把手带你从0到1开发一款可运行在多端的聊天机器人App，帮助你抓住机遇，快速具备AI运用能力，成为移动端领域的AI高手👏&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Flutter 2.10 版已正式发布！虽然⾃ &lt;a href=&quot;https://www.devio.org/2021/12/12/whats-new-in-flutter-2-8/&quot;&gt;上次稳定版本发布&lt;/a&gt; 以来还不到两个⽉，即使在这么短的时间内，Flutter官方也已处理和关闭了 1843 个 Issue，合并了来⾃全球 155 位贡献者的 1525 个 PR。&lt;/p&gt;

&lt;p&gt;Flutter 2.10 包括 Flutter 对 Windows ⽀持的重⼤更新、⼏项重⼤的性能改进、框架中图标和颜⾊的新⽀持以及一些⼯具改进等。此外，该版本还包括移除了 dev 渠道的更新、减少对旧版 iOS 的⽀持以及几个简短的破坏性改动。接下来让Flutter来一睹Flutter 2.10的更新吧：&lt;/p&gt;

&lt;h2 id=&quot;使用-flutter-构建-windows-桌面应用支持已经进入稳定阶段&quot;&gt;使用 Flutter 构建 Windows 桌面应用支持已经进入稳定阶段&lt;/h2&gt;

&lt;p&gt;⾸先，Flutter 2.10 版本带来了稳定的 Windows ⽀持，无需再通过 &lt;code class=&quot;highlighter-rouge&quot;&gt;--enable-windows-desktop&lt;/code&gt; 标记来单独配置 Windows 桌面版应用程序的支持，因为它现在已经默认被启用！&lt;/p&gt;

&lt;p&gt;当然，此次稳定版发布肯定不只是“删掉”一个标记这么简单 ;-) 在 Flutter 2.10 的 Windows 支持中，也包含了对⽂本处理、键盘处理和键盘快捷键的⼴泛改进，以及直接与 Windows 集成的新方式、⽀持命令行参数、全球化⽂本输⼊和无障碍功能等。&lt;/p&gt;

&lt;p&gt;有关 Windows 稳定版发布的更多信息，你可以阅读《&lt;a href=&quot;https://www.devio.org/2022/02/06/announcing-flutter-for-windows/&quot;&gt;Flutter for Windows桌面端稳定版发布&lt;/a&gt;》，文章为大家详述了 Flutter 在 Windows 上的架构，同时说明了有多少 Flutter package 和插件已经⽀持 Windows。你还可以查看Flutter的⼯具和应⽤合作伙伴在 Windows 上使⽤ Flutter 制作的一些⽰例等。&lt;/p&gt;

&lt;h2 id=&quot;引擎的性能改进&quot;&gt;引擎的性能改进&lt;/h2&gt;

&lt;p&gt;此版本的 Flutter 包括由社区成员 knopp提供的 &lt;strong&gt;绘制脏区管理&lt;/strong&gt; 的初步⽀持，他为 &lt;a href=&quot;https://github.com/flutter/engine/pull/28801&quot; title=&quot;iOS/Metal 上的单个脏区域启⽤了选择性重绘&quot;&gt;iOS/Metal 上的单个脏区域启⽤了选择性重绘&lt;/a&gt;。这一变化将一些基准测试中九十分位和九十九分位的光栅化时间减少了一个数量级，并将这些基准测试中的 GPU 利⽤率从 90% 以上降低到了 10% 以下。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/202202/flutter-2.10/bd08554e8a5011eca2edaa665a3425bf.jpeg&quot; alt=&quot;优化后的 Skia 渲染基准测试数据 1&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Flutter希望在未来的版本中，&lt;a href=&quot;https://github.com/flutter/engine/pull/29591&quot; title=&quot;将选择性重绘的优势引入到其他平台&quot;&gt;将选择性重绘的优势引入到其他平台&lt;/a&gt;。&lt;/p&gt;

&lt;p&gt;在Flitter 2.8版本中，Flutter获得了自己的内部图片录制格式。现在在Flatter 2.10中，Flutter已经开始用它进行优化。例如，不透明层的一种常见情况现在可以更有效地实现。即使在最坏的情况下，Flutter基准测试中的帧光栅时间也降到了之前值的三分之一以下。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/202202/flutter-2.10/bd16dab08a5011eca2edaa665a3425bf.jpeg&quot; alt=&quot;优化后的 Skia 渲染基准测试数据 2&quot; /&gt;&lt;/p&gt;

&lt;p&gt;随着Flutter继续开发记录格式，将来会继续将该优化扩展到更多的场景。&lt;/p&gt;

&lt;p&gt;在 profile 和 release 模式下，Dart 代码将以 AOT 方式编译。这段代码的轻量和高效的关键来源于整个程序的类型流分析，它解锁了许多编译器优化和激进的摇树优化 (tree-shaking)。但由于类型流分析必须涵盖整个程序，因此可能会有些消耗性能。新版本带来了 &lt;a href=&quot;https://dart.googlesource.com/sdk.git/+/e698500693603374ecc409e158f36c25bff45b12&quot; title=&quot;Flutter 新版本带来了更快的类型流分析实现&quot;&gt;更快的类型流分析实现&lt;/a&gt;。在Flutter的基准测试中，Flutter 应⽤的总体构建时间下降了约 10%。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/202202/flutter-2.10/bd1f4bb48a5011eca2edaa665a3425bf.jpeg&quot; alt=&quot;优化后的构建时间&quot; /&gt;&lt;/p&gt;

&lt;p&gt;与往常一样，性能增强、减少内存使⽤和减少延迟是 Flutter 团队的⾸要任务。期待未来版本的进一步改进。&lt;/p&gt;

&lt;h2 id=&quot;android-平台更新&quot;&gt;Android 平台更新&lt;/h2&gt;

&lt;p&gt;Flutter 2.10 版本还包含许多针对 Android 平台的改进。现在在默认情况下，当你创建新应⽤时，&lt;strong&gt;Flutter 默认⽀持最新版本的 Android&lt;/strong&gt;，即 Android 12（API 级别 31）。此外，在此版本中，Flutter启⽤了 &lt;a href=&quot;https://developer.android.google.cn/studio/build/multidex&quot; title=&quot;为你的构建启⽤ multidex&quot;&gt;multidex&lt;/a&gt; ⾃动⽀持。如果您的应⽤⽀持低于 21 的 Android SDK 版本，并且超过了 64K 的 dex ⽅法数限制，只需将 &lt;code class=&quot;highlighter-rouge&quot;&gt;--multidex&lt;/code&gt; 参数传递给 &lt;code class=&quot;highlighter-rouge&quot;&gt;flutter build appbundle&lt;/code&gt; 或 &lt;code class=&quot;highlighter-rouge&quot;&gt;flutter build apk&lt;/code&gt; 命令，你的应⽤就会增加 multidex 的⽀持。&lt;/p&gt;

&lt;p&gt;最后，在Flutter收到开发者们对于 Gradle 抛出让人费解的错误消息的反馈后，Flutter调整了 Flutter 命令行工具，现在它将 &lt;strong&gt;为常⻅问题提供解决方法&lt;/strong&gt;。例如，如果你向你的应⽤添加了一个插件，该插件需要您提⾼最低支持的 Android SDK 版本，你现在会在错误信息中看到「Flutter Fix」的建议。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/202202/flutter-2.10/bd697b268a5011eca2edaa665a3425bf.jpeg&quot; alt=&quot;Gradle 错误提示&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Flutter将继续为常⻅错误消息添加更多解决方法的建议，并希望获得你对其他错误消息的反馈，这些错误消息将显著帮助开发者处理同类问题。&lt;/p&gt;

&lt;h2 id=&quot;ios-平台更新&quot;&gt;iOS 平台更新&lt;/h2&gt;

&lt;p&gt;除了性能改进之外，Flutter还添加并增强了一些特定平台的功能。&lt;a href=&quot;https://github.com/luckysmg&quot; title=&quot;luckysmg&quot;&gt;luckysmg&lt;/a&gt; 就为Flutter带来了一项 &lt;a href=&quot;https://github.com/flutter/engine/pull/29281&quot; title=&quot;iOS 上新的增强功能——更流畅的键盘动画&quot;&gt;iOS 上新的增强功能——更流畅的键盘动画&lt;/a&gt;，它会⾃动应用在你的应用中。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/202202/flutter-2.10/bd5dde4c8a5011eca2edaa665a3425bf.gif&quot; alt=&quot;iOS 键盘过渡动画&quot; /&gt;&lt;/p&gt;

&lt;p&gt;除此以外，Flutter还通过修复一些 &lt;a href=&quot;https://github.com/flutter/plugins/pull/4619&quot; title=&quot;边缘情况崩溃提⾼了 iOS 相机插件的稳定性&quot;&gt;边缘情况崩溃提⾼了 iOS 相机插件的稳定性&lt;/a&gt;。&lt;/p&gt;

&lt;p&gt;最后，&lt;strong&gt;Flutter为 64 位架构的 iOS 系统加入减少内存使⽤的新功能：&lt;a href=&quot;https://github.com/flutter/engine/pull/30077&quot; title=&quot;Flutter为 64 位架构的 iOS 系统加入减少内存使⽤的新功能: 压缩指针&quot;&gt;压缩指针&lt;/a&gt;。&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;64 位架构将指针表⽰为 4 字节大小的数据结构。当你有大量对象时，指针本⾝占⽤的空间会增加应⽤整体的内存占用，特别是如果你的应⽤更庞大更复杂时，这些应⽤有更多的 GC 抖动。然而，iOS 应⽤不太可能有⾜够的对象来占⽤大部分的 32 位地址空间（20 亿个对象），更不⽤说庞⼤的 64 位地址空间（900 亿个对象）了。&lt;/p&gt;

&lt;p&gt;Dart 2.15 中引入了压缩指针的功能，在这次发布的 Flutter 版本中，Flutter使⽤这项功能来减少 64 位 iOS 应⽤的内存使⽤量。&lt;/p&gt;

&lt;h2 id=&quot;web-平台更新&quot;&gt;Web 平台更新&lt;/h2&gt;

&lt;p&gt;此版本还包含对 Web 平台的一些改进。例如，在先前的版本中，当鼠标拖动到多行文本框的边缘时，它不会正确地跟随滚动。在此版本中，当选择光标拖出了文本框时，文本框会进行滚动，浏览并选中对应的文字内容。此行为同时适⽤于 Web 平台和桌⾯端。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/202202/flutter-2.10/bda00d808a5011eca2edaa665a3425bf.gif&quot; alt=&quot;在 Web 平台选中并拖拽 TextField 光标&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Flutter 2.10 还包括对 Web 平台的另一项显著改进，Flutter也一直在寻求减少将 Flutter 应用运行到 Web 平台的开销，在先前的版本中，每次Flutter想要将原⽣ HTML 的 widget 引⼊ Flutter 应⽤时，Flutter都需要一个覆盖层 (Overlay) 作为Flutter对 Web 的平台视图 (Platform view) ⽀持的一部分。这些叠加层中的每一个都⽀持⾃定义绘制，但同时也代表了一定数量的性能开销。如果你的应⽤中有⼤量原⽣ HTML 的 widget (例如链接)，那这将造成非常大性能开销。在这个版本中Flutter为 Web 平台构建了一个新的「⾮绘制的平台视图」，已经基本上消除了这种开销。Flutter已经 &lt;a href=&quot;https://github.com/flutter/plugins/pull/4578&quot; title=&quot;使用⾮绘制的平台视图优化&quot;&gt;将这种优化&lt;/a&gt; 应用到 &lt;a href=&quot;https://pub.flutter-io.cn/documentation/url_launcher/latest/link/Link-class.html&quot; title=&quot;Link widget API 文档&quot;&gt;Link widget&lt;/a&gt; 中，这意味着如果您的 Flutter Web 应⽤中有⼤量的链接，它们将不再产生额外的性能消耗。随着时间的推移，Flutter会将此优化应⽤到其他的 widget。&lt;/p&gt;

&lt;h2 id=&quot;material-3&quot;&gt;Material 3&lt;/h2&gt;

&lt;p&gt;此版本是向 Material 3 过渡的开始，其中包括 &lt;a href=&quot;https://github.com/flutter/flutter/pull/93463&quot; title=&quot;从单一种⼦颜⾊⽣成整个配⾊⽅案&quot;&gt;从单一种⼦颜⾊⽣成整个配⾊⽅案&lt;/a&gt; 的能力。&lt;/p&gt;

&lt;p&gt;你可以使用任意颜色来创建新的 &lt;code class=&quot;highlighter-rouge&quot;&gt;ColorScheme&lt;/code&gt; 类型：&lt;/p&gt;

&lt;div class=&quot;language-dart highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;final&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;lightScheme&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ColorScheme&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;fromSeed&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;seedColor:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Colors&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;green&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;final&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;darkScheme&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ColorScheme&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;fromSeed&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;seedColor:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Colors&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;green&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;brightness:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Brightness&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;dark&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;ThemeData&lt;/code&gt; 的构造函数还有一个新的 &lt;code class=&quot;highlighter-rouge&quot;&gt;colorSchemeSeed&lt;/code&gt; 参数，可以直接从颜色⽣成主题的配⾊⽅案：&lt;/p&gt;

&lt;div class=&quot;language-dart highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;final&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;lightTheme&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ThemeData&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;colorSchemeSeed:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Colors&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;orange&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;...);&lt;/span&gt; 
&lt;span class=&quot;kd&quot;&gt;final&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;darkTheme&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ThemeData&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;colorSchemeSeed:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Colors&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;orange&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;brightness:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Brightness&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;dark&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;...);&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;此外，此版本包括了 &lt;strong&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;ThemeData.useMaterial3&lt;/code&gt; 的参数，它可以将 widget 切换到新的 Material 3 外观&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;最后，Flutter添加了 &lt;a href=&quot;https://github.com/flutter/flutter/pull/95007&quot; title=&quot;添加了 1028 个新 Material 图标的 PR&quot;&gt;1028 个新的 Material 图标&lt;/a&gt;。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/202202/flutter-2.10/bdba83ae8a5011eca2edaa665a3425bf.jpeg&quot; alt=&quot;1028 个图标的部分预览&quot; /&gt;&lt;/p&gt;

&lt;p&gt;你可以在 &lt;a href=&quot;https://github.com/flutter/flutter/issues/91605&quot; title=&quot;在这里跟进 Material 3 的接入情况&quot;&gt;这个 issue 中&lt;/a&gt; 跟进 Material 3 的接入情况，并随时留下你的意见反馈。&lt;/p&gt;

&lt;h2 id=&quot;集成测试改进&quot;&gt;集成测试改进&lt;/h2&gt;

&lt;p&gt;2020 年 12 ⽉，Flutter宣布了使⽤ &lt;code class=&quot;highlighter-rouge&quot;&gt;integration_test&lt;/code&gt; 进行端到端测试的新⽅法，查看中文文档 &lt;a href=&quot;https://docs.flutter.dev/cookbook/testing/integration/introduction&quot; title=&quot;中文文档: 集成测试介绍&quot;&gt;集成测试介绍&lt;/a&gt; 了解更多。这个新的 package 取代了 &lt;code class=&quot;highlighter-rouge&quot;&gt;flutter_driver&lt;/code&gt; 作为进行集成测试的推荐⽅式，提供了新功能，如 Firebase 测试实验室⽀持以及对 Web 和桌⾯的⽀持。&lt;/p&gt;

&lt;p&gt;从那时起，Flutter对集成测试进行了进一步改进，包括 &lt;strong&gt;将 &lt;code class=&quot;highlighter-rouge&quot;&gt;integration_test&lt;/code&gt; package 内置在 Flutter SDK 中&lt;/strong&gt;，使其更容易与您的应⽤集成。现在，Flutter撰写了一份新的迁移指南，帮助你 &lt;a href=&quot;https://docs.flutter.dev/testing/integration-tests/migration&quot; title=&quot;从 flutter_driver 测试迁移到 integration_test&quot;&gt;从 flutter_driver 测试迁移到 integration_test&lt;/a&gt;。&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://docs.flutter.dev/testing/integration-tests&quot; title=&quot;集成测试说明⽂档&quot;&gt;现有的⽂档&lt;/a&gt;、&lt;a href=&quot;https://github.com/flutter/samples/tree/master/testing_app&quot; title=&quot;集成测试示例&quot;&gt;示例&lt;/a&gt; 和 &lt;a href=&quot;https://codelabs.developers.google.com/codelabs/flutter-app-testing&quot; title=&quot;集成测试的 codelab&quot;&gt;codelab&lt;/a&gt; 也已针对 &lt;code class=&quot;highlighter-rouge&quot;&gt;integration_test&lt;/code&gt; 进行了更新。如果你还没有在 Flutter 应⽤上使⽤ &lt;code class=&quot;highlighter-rouge&quot;&gt;integration_test&lt;/code&gt;，那么从现在就开始吧！&lt;/p&gt;

&lt;h2 id=&quot;devtools&quot;&gt;DevTools&lt;/h2&gt;

&lt;p&gt;在这个版本中，Flutter也在 Flutter DevTools 上做了一些改进⼯作，包括从命令行直接使⽤ DevTools 的简易功能。现在你⽆需使⽤ &lt;code class=&quot;highlighter-rouge&quot;&gt;pub global activate&lt;/code&gt; 来下载和运行最新版本的 devtools，只需简单地使⽤ &lt;code class=&quot;highlighter-rouge&quot;&gt;dart devtools&lt;/code&gt; 获取与你正在使⽤的 Flutter 版本一致的最新版本即可。&lt;/p&gt;

&lt;p&gt;Flutter还进行了一些 &lt;a href=&quot;https://github.com/flutter/devtools/pull/3493&quot; title=&quot;为 DevTools 加入可⽤性更新的 PR&quot;&gt;可⽤性更新&lt;/a&gt;，包括 &lt;a href=&quot;https://github.com/flutter/devtools/pull/3497&quot; title=&quot;改进在调试器变量窗格中检查⼤型列表和映射&quot;&gt;改进在调试器变量窗格中检查⼤型列表和映射&lt;/a&gt; 的⽀持（感谢 &lt;a href=&quot;https://github.com/elliette&quot; title=&quot;Elliott 的 GitHub 主页&quot;&gt;Elliott&lt;/a&gt;）。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/202202/flutter-2.10/bde55d688a5011eca2edaa665a3425bf.gif&quot; alt=&quot;在 DevTools 中查看大型列表和映射&quot; /&gt;&lt;/p&gt;

&lt;p&gt;最后，Flutter即将发布年度 DevTools 问卷调查！请提供你的反馈并帮助Flutter改善你的开发体验。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/202202/flutter-2.10/bdf06f288a5011eca2edaa665a3425bf.jpeg&quot; alt=&quot;该调查提⽰将在 2 ⽉中旬的某个时间直接显⽰在 DevTools 中，敬请参与并踊跃反馈！&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;vscode-改进&quot;&gt;VSCode 改进&lt;/h2&gt;

&lt;p&gt;Flutter 的 Visual Studio Code 扩展也获得了许多增强功能，包括 &lt;strong&gt;在代码的更多位置预览颜色&lt;/strong&gt; 以及 &lt;a href=&quot;https://github.com/Dart-Code/Dart-Code/issues/3240&quot; title=&quot;VS Code 中加入了可更新颜色代码的颜⾊选择器&quot;&gt;可更新颜色代码的颜⾊选择器&lt;/a&gt;。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/202202/flutter-2.10/be34828a8a5011eca2edaa665a3425bf.gif&quot; alt=&quot;VSCode 的 Flutter 颜色选择器&quot; /&gt;&lt;/p&gt;

&lt;p&gt;此外，如果你想成为 VSCode 的 Dart 和 Flutter 扩展的预发布版本的测试⼈员，你可以 &lt;a href=&quot;https://github.com/Dart-Code/Dart-Code/issues/3729&quot; title=&quot;将 Dart 和 Flutter 扩展切换到预发布版本&quot;&gt;在你的扩展设置中切换到预发布版本&lt;/a&gt;。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/202202/flutter-2.10/be40b88e8a5011eca2edaa665a3425bf.jpeg&quot; alt=&quot;使用预发布版本的插件&quot; /&gt;&lt;/p&gt;

&lt;p&gt;你可以在 flutter-announce 邮件列表的 &lt;a href=&quot;https://groups.google.com/g/flutter-announce/c/lR-yn1s9HKk&quot; title=&quot;flutter-announce 邮件列表中关于 VS Code 插件改进的文章&quot;&gt;这一篇&lt;/a&gt; 阅读有关此更新的详细信息。&lt;/p&gt;

&lt;h2 id=&quot;移除-dev-版本发布渠道&quot;&gt;移除 dev 版本发布渠道&lt;/h2&gt;

&lt;p&gt;在 Flutter 2.8 版本中，Flutter宣布Flutter正在努力移除 dev 版本发布渠道，以简化你的选择并减少研发的开销。在这个版本中，Flutter已经完成了这项⼯作，包括：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;更新 Flutter ⼯具以帮助将开发⼈员迁移出开发频道&lt;/li&gt;
  &lt;li&gt;更新 wiki 对于各个渠道的说明和承诺&lt;/li&gt;
  &lt;li&gt;更新弃⽤政策&lt;/li&gt;
  &lt;li&gt;从 DartPad、预提交测试和⽹站中删除 dev 渠道的⽀持&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Dev 渠道现已被彻底移除。如果Flutter漏了一些没有移除的位置，请告诉Flutter。&lt;/p&gt;

&lt;h2 id=&quot;对-ios-936-的持进入尾声&quot;&gt;对 iOS 9.3.6 的⽀持进入尾声&lt;/h2&gt;

&lt;p&gt;由于Flutter实验室中⽬标设备的使⽤减少和维护难度增加，Flutter正在 &lt;a href=&quot;https://files.flutter-io.cn/flutter-design-docs/RFC_Move_32-bit_iOS_to_Best_Effort_Tier.pdf&quot; title=&quot;RFC 文档: 调整对于 iOS 9.3.6 的支持&quot;&gt;调整对于 iOS 9.3.6 的支持&lt;/a&gt;，&lt;a href=&quot;https://docs.flutter.dev/development/tools/sdk/release-notes/supported-platforms&quot; title=&quot;对于 iOS 9.3.6 的支持从「⽀持」到「尽力⽽为」&quot;&gt;从「⽀持」到「尽力⽽为」&lt;/a&gt;。这意味着对 iOS 9.3.6 的⽀持和对 32 位 iOS 设备的⽀持将仅通过编码实践、Ad-Hoc 和社区测试来维护了。&lt;/p&gt;

&lt;p&gt;Flutter预计在 2022 年第三季度的 Flutter 稳定版本中放弃对 32 位 iOS 设备以及 iOS 版本 9 和 10 的 ⽀持。这意味着基于稳定的 Flutter SDK 构建的应⽤将不再在 32 位 iOS 设备上运行，并且 Flutter ⽀持的最低 iOS 版本将增加到 iOS 11。&lt;/p&gt;

&lt;h2 id=&quot;破坏性改动&quot;&gt;破坏性改动&lt;/h2&gt;

&lt;p&gt;Flutter还努力在每个版本和此版本中减少破坏性改动，尽管Flutter还没有完全归零，但Flutter会继续努力！&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.flutter.dev/release/breaking-changes/kotlin-version&quot; title=&quot;构建 Flutter 应用的 Kotlin 版本应高于 1.5.31&quot;&gt;构建 Flutter 应用的 Kotlin 版本应高于 1.5.31&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.flutter.dev/release/breaking-changes/2-5-deprecations&quot; title=&quot;Flutter 2.5 之后移除的已弃用的 API&quot;&gt;Flutter 2.5 之后移除的已弃用的 API&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.flutter.dev/release/breaking-changes/raw-images-on-web-uses-correct-origin-and-colors&quot; title=&quot;Web 上的原始图像使用正确的来源和颜色&quot;&gt;Web 上的原始图像使用正确的来源和颜色&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.flutter.dev/release/breaking-changes/scribble-text-input-client&quot; title=&quot;Apple Pencil 随手写 TextInputClient 变动&quot;&gt;Apple Pencil 随手写 TextInputClient 变动&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;如果您仍在使⽤这些 API，可以阅读 &lt;a href=&quot;https://docs.flutter.dev/release/breaking-changes&quot; title=&quot;flutter.dev 上的迁移指南&quot;&gt;flutter.dev 上的迁移指南&lt;/a&gt;。一如既往，⾮常感谢社区贡献测试，帮助Flutter识别这些破坏性改动。&lt;/p&gt;

&lt;h2 id=&quot;最后&quot;&gt;最后&lt;/h2&gt;

&lt;blockquote&gt;
  &lt;p&gt;Flutter精彩课程推荐&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://u.cboy.me/ss/u?cid=672&amp;amp;aid=5&amp;amp;platform=devio&quot;&gt;ChatGPT + Flutter快速开发多端聊天机器人App&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://api.devio.org/ss/u?cid=487&amp;amp;aid=4&amp;amp;platform=devio&quot;&gt;Flutter高级进阶实战 仿哔哩哔哩APP&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://api.devio.org/ss/u?cid=741&amp;amp;aid=4&amp;amp;platform=devio&quot;&gt;全新Flutter从入门到进阶，实战仿携程网App&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Sun, 06 Feb 2022 00:00:00 +0800</pubDate>
        <link>http://localhost:4000/2022/02/06/whats-new-in-flutter-2-10/</link>
        <guid isPermaLink="true">http://localhost:4000/2022/02/06/whats-new-in-flutter-2-10/</guid>
        
        <category>Flutter更新</category>
        
        <category>Flutter</category>
        
        
      </item>
    
      <item>
        <title>Flutter for Windows桌面端稳定版发布</title>
        <description>&lt;blockquote&gt;
  &lt;p&gt;&lt;a href=&quot;https://u.cboy.me/ss/u?cid=672&amp;amp;aid=5&amp;amp;platform=devio&quot;&gt;⭐整合ChatGPT与Flutter高级技术，手把手带你从0到1开发一款可运行在多端的聊天机器人App，帮助你抓住机遇，快速具备AI运用能力，成为移动端领域的AI高手👏&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;自从Flutter 创建以来，Flutter就致力于打造一个能够构建精美的、可高度定制的、并且可以编译为机器码的跨平台应用解决方案，以充分发挥设备底层硬件的全部图形渲染能力。今天，Flutter 对 Windows 生产版本的正式支持是对这一愿景实现的重要标志。它使 Windows 开发者也能享受到移动开发的相同生产力和功能。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/202202/flutter-2.10/40fbdea08a5311ecbb58aa665a3425bf.jpeg&quot; alt=&quot;用 Flutter 构建 Windows 桌面应用程序&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Flutter 的目标是在任何平台上为你提供出色的构建体验，并且Flutter想要打造的是：只需要使用同一套核心框架和工具完成这个目标。通过 Flutter，你可以自由打造 &lt;strong&gt;优美&lt;/strong&gt; 的使用体验，使你的品牌和设计脱颖而出；它还拥有 &lt;strong&gt;极高&lt;/strong&gt; 的执行速度，因为它会被直接编译为机器码；而通过支持有状态的热重载功能以提供交互式的体验，让你可以在应用运行时直接看到代码更改后的结果，从而获得 &lt;strong&gt;生产力&lt;/strong&gt; 提升。Flutter 是开放的，成千上万的贡献者参与到核心框架的构建，或是通过 package 和插件生态系统对其进行扩展。&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;截止目前，已经有近 50 万个应用程序使用 Flutter 进行构建&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;迄今为止，Flutter看到这股趋势已经超出了Flutter的预期。包括一些大公司例如 &lt;a href=&quot;https://verygood.ventures/success-stories/betterment&quot; title=&quot;Betterment 使用 Flutter 的案例&quot;&gt;Betterment&lt;/a&gt;、宝马以及字节跳动等，还有 Google 内部三十多个团队都使用了 Flutter。根据 Statista 以及 SlashData 的统计，Flutter 在 2021 年已经成为了最流行的跨端 UI 工具包。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/202202/flutter-2.10/4105951c8a5311ecbb58aa665a3425bf.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Flutter自己的数据也能支持这一点，在 2021 年四个季度的开发者调查中，有 92% 的 Flutter 开发者对Flutter提供的工具表示满意。（对于另外 8% 的人，Flutter正在倾听你的反馈，希望也能得到你的满意）。&lt;/p&gt;

&lt;p&gt;这其中共同的需求之一就是对 Windows 的支持，&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;在发布的 Flutter 2.10 稳定版中，已经全面支持构建 Windows 桌面端应用程序了！&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;windows-与-flutter&quot;&gt;Windows 与 Flutter&lt;/h2&gt;

&lt;p&gt;几年前，Flutter团队为 Flutter 制定了一个宏大的愿景，即从 iOS 和 Android 的移动端应用上扩展到其他平台，其中就包括 Web 端和&lt;strong&gt;桌面端&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;Flutter 的核心部分是跨平台的：从可移植的硬件加速的 Skia 图形渲染引擎，到 Flutter 的渲染系统的核心单元，例如动画、主题、文本输入以及国际化，Flutter 提供了上百个 widgets。&lt;/p&gt;

&lt;p&gt;然而桌面端并不只是移动应用运行在一个更大的屏幕上这么简单，它们从设计上来说就很不一样。从输入设备角度来看，桌面端有键盘和鼠标，它们会在显示器上运行多个可变大小的窗口。而对于辅助功能 (Accessibility)、输入法、视觉样式等关键内容都有不同的规则约束。并且它们还和底层操作系统中不同的 API 进行集成：桌面应用支持从系统的文件选择器到设备硬件再到 Windows 注册表等数据存储的所有内容。&lt;/p&gt;

&lt;p&gt;所以当Flutter团队把 Flutter 带到 Windows 上时，Flutter也需要为它进行定制。&lt;/p&gt;

&lt;p&gt;正如Flutter对 Android 和 iOS 的支持那样，对 Windows 的实现也包括了 Dart 框架以及 C++ 的引擎。Windows 与 Flutter 通过承载了 Flutter 引擎的 &lt;strong&gt;嵌入层(Embedder)&lt;/strong&gt; 进行通信，翻译以及发送 Windows 都是 &lt;strong&gt;嵌入层&lt;/strong&gt; 的职责范围。Flutter 与 Windows 共同将你的 UI 绘制到屏幕上，处理窗口大小调整和 DPI 更改等事件，并与已有的 Windows (如输入法编辑器) 配合使用。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/202202/flutter-2.10/41104e4e8a5311ecbb58aa665a3425bf.jpeg&quot; alt=&quot;Flutter 在 Windows 平台的架构&quot; /&gt;&lt;/p&gt;

&lt;p&gt;在 Windows 上，Flutter 使用了一套完全相同的 Dart 代码，但是能够使用 Windows 的 API。&lt;/p&gt;

&lt;p&gt;你的应用能够使用 Flutter 框架的全部功能，在 Windows 上，它还可以直接通过 Dart 的 C 互操作层或使用用 C++ 编写的平台插件与 Win32、COM 和 Windows 运行时 API 进行通信。Flutter还适配了许多常用插件以包含对 Windows 的支持，包括&lt;code class=&quot;highlighter-rouge&quot;&gt;camera&lt;/code&gt;，&lt;code class=&quot;highlighter-rouge&quot;&gt;file_picker&lt;/code&gt;和&lt;code class=&quot;highlighter-rouge&quot;&gt;shared_preferences&lt;/code&gt;。更重要的是，社区已经添加了各种其他 package 对 Windows 的支持，涵盖了从 Windows 任务栏集成到串行端口访问的全部内容。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/202202/flutter-2.10/4128c7a88a5311ecbb58aa665a3425bf.jpeg&quot; alt=&quot;目前已经有上百个 package 为通过 Flutter 构建 Windows 应用程序提供了适配。&quot; /&gt;&lt;/p&gt;

&lt;p&gt;要完全为 Windows 的 UI 进行定制，你也可以使用例如像是 &lt;a href=&quot;https://pub.dev/packages/fluent_ui&quot; title=&quot;使用 fluent_ui package 实现具有 Microsoft Fluent 设计美学的设计&quot;&gt;fluent_ui&lt;/a&gt; 以及 &lt;a href=&quot;https://pub.dev/packages/flutter_acrylic&quot; title=&quot;使用 flutter_acrylic package 实现具有 Microsoft Fluent 设计美学的设计&quot;&gt;flutter_acrylic&lt;/a&gt; 这样的 package 创造具有 Microsoft Fluent 设计美学的应用。而且使用 &lt;a href=&quot;https://pub.dev/packages/msix&quot; title=&quot;使用 msix 工具打包发布 Windows 桌面应用程序&quot;&gt;msix&lt;/a&gt; 工具能将你的应用包装进安装器，这样就可以上传到 Windows 上的 Microsoft Store。&lt;/p&gt;

&lt;p&gt;总的来说，这促进了在 Window 平台上创建应用程序。以极快的速度在 Windows 上运行的同时还能转到其他桌面或者移动应用以及 web 平台上运行。让Flutter来看看到目前为止的一些早期样例：&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/202202/flutter-2.10/418950d28a5311ecbb58aa665a3425bf.png&quot; alt=&quot;一些使用 Flutter 构建的 Windows 应用程序的早期社区示例，特别展示来自深圳团队的一款应用。&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;microsoft-与-flutter&quot;&gt;Microsoft 与 Flutter&lt;/h2&gt;

&lt;p&gt;Flutter曾询问过 Windows 团队是否愿意分享一些对 Flutter 支持的话。这是微软公司 Windows 开发者平台副总裁 Kevin Gallo 的评论：&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;“Flutter团队很高兴看到 Flutter 增加了对创建 Windows 应用程序的支持。Windows 是一个开放的平台，Flutter欢迎所有开发人员。Flutter团队很高兴看到 Flutter 开发人员将他们的体验带到 Windows 上，并发布到 Microsoft Store。对 Windows 的支持是 Flutter 社区的一大步，Flutter也迫不及待地想看看你能为 Windows 带来哪些令人惊叹的应用！”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;事实上，许多 Microsoft 的团队也都为今天的发布做出了很大贡献。Flutter特别想要感谢 Fluent design 团队对于支持 Windows 上 Flutter 应用的图标做出的贡献。他们高质量的 &lt;a href=&quot;https://pub.dev/packages/fluentui_system_icons&quot; title=&quot;Fluent design 团队开发的 fluentui_system_icons package&quot;&gt;fluentui_system_icons&lt;/a&gt; package 已经加入到 Flutter Favorite 项目中了。&lt;/p&gt;

&lt;p&gt;同时，Microsoft 围绕 Windows 可访问性所做的投入也给Flutter留下了深刻的印象，非常感谢该团队的帮助，以确保 Flutter 从第一天起就能够为屏幕阅读器提供支持。将无障碍功能视为额外的需求是错误的。正如 &lt;a href=&quot;https://www.microsoft.com/design/inclusive&quot; title=&quot;Microsoft 包容性设计工具包&quot;&gt;Microsoft 包容性设计工具包&lt;/a&gt; 中的这张图片所示，Flutter必须要关注提供永久、临时或不同情境下需求的体验。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/202202/flutter-2.10/4194e0968a5311ecbb58aa665a3425bf.jpeg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;下面的视频演示了 Flutter 如何集成 Windows 讲述人 (Windows Narrator) 功能。出于本视频的目的，Flutter特意模糊了屏幕，让你了解此功能对需要它的用户的价值。&lt;/p&gt;

&lt;p&gt;插入视频&lt;/p&gt;

&lt;p&gt;Windows 讲述人是一个为 Windows 打造的屏幕阅读器，它同样能够在 Flutter 应用中良好的运行。&lt;/p&gt;

&lt;h2 id=&quot;windows-开发生态工具集&quot;&gt;Windows 开发生态工具集&lt;/h2&gt;

&lt;p&gt;Flutter的开发工具合作伙伴们也开始为 Windows 桌面端应用程序开发增加支持，比如：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://flutterflow.io/&quot; title=&quot;低代码、拖拽式生成 Flutter 应用的工具 FlutterFlow 官网&quot;&gt;FlutterFlow&lt;/a&gt; 是低代码、拖拽式生成 Flutter 应用的工具，FlutterFlow 今天正式宣布支持了 Windows 平台，同时还宣布了一些帮助 Flutter 开发者建立桌面应用的很多功能。&lt;/li&gt;
  &lt;li&gt;Realm 是一个快速的本地数据存储服务。&lt;a href=&quot;https://www.mongodb.com/developer/article/introducing-realm-flutter-sdk&quot; title=&quot;Realm 今天宣布支持使用 Flutter 构建Windows 桌面端应用程序&quot;&gt;今天发布的最新版本支持使用 Flutter 构建Windows 桌面端应用程序&lt;/a&gt;，他们使用 Dart FFI 快速访问底层数据库，并增加了他们对 iOS 和Android 等移动平台的现有支持。&lt;/li&gt;
  &lt;li&gt;Nevercode 团队更新了他们的 &lt;a href=&quot;https://flutterci.com/&quot; title=&quot;Nevercode 开发的 Codemagic CI/CD 工具&quot;&gt;Codemagic CI/CD tool&lt;/a&gt; 工具并开始支持 Windows 桌面端，你可以在云端测试和构建 Windows 应用，并将其发布到 Microsoft Store。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.syncfusion.com/flutter-widgets&quot; title=&quot;Syncfusion 官网的 Flutter widget 介绍界面&quot;&gt;Syncfusion&lt;/a&gt; 更新了工具套件以充分发挥在 Windows 平台的优势。如果你在使用他们提供的服务，你会发现他们的数据可视化组件，比如树状图、线性规、火花图表，日历组件甚至是 PDF 和 Excel 生成组件都已经支持了 Flutter，Syncfusion Flutter widget 是用 Dart 原生构建的。&lt;/li&gt;
  &lt;li&gt;近期，&lt;a href=&quot;https://rive.app/&quot; title=&quot;创建交互式矢量动画的工具 Rive 官网&quot;&gt;Rive&lt;/a&gt; 宣布推出其流行的图形工具套件的 Windows 版本，它能够让设计人员和开发人员创建交互式矢量动画，这些动画可以使用状态机实时响应代码。即将推出的 Windows 版本的应用程序提供了惊人的性能和更低的内存占用，并将很快将在 Microsoft Store 中提供下载。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/202202/flutter-2.10/41a33a428a5311ecbb58aa665a3425bf.jpeg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;看到围绕着 Flutter 的建立的成熟生态，Flutter非常激动，在你开始使用 Flutter 构建 Windows 应用的时候，Flutter鼓励你多尝试一下生态里的这些合作伙伴的服务和工具。&lt;/p&gt;

&lt;h2 id=&quot;flutter-210-中的-windows-平台支持&quot;&gt;Flutter 2.10 中的 Windows 平台支持&lt;/h2&gt;

&lt;p&gt;作为 Flutter 2.10 正式版的一部分，Flutter 已经可以为 Windows 平台构建应用程序提供稳定的、具备生产质量的支持，Flutter 2.10 还包含诸多其他新特性和性能改进以及错误修复，在今天的另一篇推文中已经详细介绍。&lt;/p&gt;

&lt;p&gt;在未来几个月里，Flutter会发布更多为 macOS 和 Linux 平台提供稳定版支持的消息，让你可以通过 Flutter 为更全的桌面平台、Web 平台和移动端平台构建精美应用！&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.devio.org/img/post/202202/flutter-2.10/41b4e2d88a5311ecbb58aa665a3425bf.jpeg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;最后&quot;&gt;最后&lt;/h2&gt;

&lt;blockquote&gt;
  &lt;p&gt;Flutter精彩课程推荐&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://u.cboy.me/ss/u?cid=672&amp;amp;aid=5&amp;amp;platform=devio&quot;&gt;ChatGPT + Flutter快速开发多端聊天机器人App&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://api.devio.org/ss/u?cid=487&amp;amp;aid=2&amp;amp;platform=devio&quot;&gt;Flutter高级进阶实战 仿哔哩哔哩APP&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://api.devio.org/ss/u?cid=741&amp;amp;aid=2&amp;amp;platform=devio&quot;&gt;全新Flutter从入门到进阶，实战仿携程网App&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
        <pubDate>Sun, 06 Feb 2022 00:00:00 +0800</pubDate>
        <link>http://localhost:4000/2022/02/06/announcing-flutter-for-windows/</link>
        <guid isPermaLink="true">http://localhost:4000/2022/02/06/announcing-flutter-for-windows/</guid>
        
        <category>Flutter更新</category>
        
        <category>Flutter</category>
        
        
      </item>
    
      <item>
        <title>React Native Hooks开发指南</title>
        <description>&lt;p&gt;&lt;img src=&quot;https://o.devio.org/images/rn2/rn-hooks.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;a href=&quot;https://coding.imooc.com/class/304.html&quot;&gt;期待已久的新教程上线啦！解锁React Native开发新姿势，一网打尽React Native最新与最热技术，点我Get!!!&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;目录&quot;&gt;目录&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;#什么是hooks&quot;&gt;什么是Hooks&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;#hooks的特性&quot;&gt;Hooks的特性&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#如何在react-native使用hooks&quot;&gt;如何在React Native使用Hooks&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;#在react-native中使用-state-hook&quot;&gt;在React Native中使用 State Hook&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#在react-native中使用-effect-hook&quot;&gt;在React Native中使用 Effect Hook&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#hooks与class的选择&quot;&gt;Hooks与class的选择&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#更多资料&quot;&gt;更多资料&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;什么是hooks&quot;&gt;什么是Hooks&lt;/h2&gt;

&lt;p&gt;Hooks 是 React 16.8 的新增特性。它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性。&lt;/p&gt;

&lt;p&gt;Hooks 是一种在函数式组件中使用有状态函数的方法。&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Hooks不支持在class中使用，比如在class中使用useState和useEffect都是不允许的。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3 id=&quot;hooks的特性&quot;&gt;Hooks的特性&lt;/h3&gt;

&lt;p&gt;在使用Hooks之前我们必须要要做明白一下几点：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Hooks是完全可选的：&lt;strong&gt;在React Native项目中Hooks不是必须的，React推出Hooks不是为了替代class，而是对class的一种补充&lt;/strong&gt;；
    &lt;ul&gt;
      &lt;li&gt;与其说Hooks是React新增的功能，倒不如说它是React新增的一种特性更为贴切；&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;不要为了Hooks而Hooks：Hooks只是React的一种新的写法，我们不必对已存在的项目通过Hooks重写，推荐小伙伴们可以对一些新的组件来尝试Hooks，这也是包括阿里在内的很多大厂通常的做法；&lt;/li&gt;
  &lt;li&gt;Hooks100% 向后兼容的： Hooks 不包含任何新增的功能，完全兼容和class混用；&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;如何在react-native使用hooks&quot;&gt;如何在React Native使用Hooks&lt;/h2&gt;

&lt;p&gt;Hooks最为常见的有两个API：&lt;code class=&quot;highlighter-rouge&quot;&gt;useState&lt;/code&gt;与&lt;code class=&quot;highlighter-rouge&quot;&gt;useEffect&lt;/code&gt;也叫&lt;code class=&quot;highlighter-rouge&quot;&gt;State Hook&lt;/code&gt;与&lt;code class=&quot;highlighter-rouge&quot;&gt;Effect Hook&lt;/code&gt;，那么接下来我们就来学习下在React Native中如何使用这两个API。&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;首先需要指出的是Hooks 是 React 16.8 的新增特性，因此我们不需要引入其它任何库，只需要确保项目依赖的React大于等于16.8即可。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3 id=&quot;在react-native中使用-state-hook&quot;&gt;在React Native中使用 State Hook&lt;/h3&gt;

&lt;blockquote&gt;
  &lt;p&gt;需求1：假如我们有个需求将从网络上请求到的数据显示在界面上，我们先看它的class写法：&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;React&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;react&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;SafeAreaView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;Text&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;TouchableOpacity&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;react-native&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Constants&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;./expand/dao/Constants&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;post&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;./expand/dao/HiNet&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;HiNetDemo&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;React&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Component&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{},&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;msg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;props&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;any&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;super&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;props&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;state&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;msg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;''&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;doFetch&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;formData&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;FormData&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;formData&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;append&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;requestPrams&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;RN&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;post&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Constants&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;test&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;api&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;formData&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)().&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;then&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;setState&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;({&lt;/span&gt;
                &lt;span class=&quot;na&quot;&gt;msg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;JSON&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;stringify&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}).&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;catch&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;setState&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;({&lt;/span&gt;
                &lt;span class=&quot;na&quot;&gt;msg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;JSON&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;stringify&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;})&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;render&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
            &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;SafeAreaView&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;
                &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;TouchableOpacity&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;onPress&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;doFetch&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;
                    &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Text&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;加载&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;sr&quot;&gt;/Text&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;gt;
&lt;/span&gt;                &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;sr&quot;&gt;/TouchableOpacity&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;gt;
&lt;/span&gt;                &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Text&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;state&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;msg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;sr&quot;&gt;/Text&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;gt;
&lt;/span&gt;            &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;sr&quot;&gt;/SafeAreaView&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;gt;
&lt;/span&gt;        &lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;那么它对应的hooks写法该是怎样子的呢？&lt;/p&gt;

&lt;p&gt;下面代码接借助RReact Native的&lt;a href=&quot;https://coding.imooc.com/class/304.html&quot;&gt;HiNet网络框架&lt;/a&gt;发出网络请求并通过&lt;code class=&quot;highlighter-rouge&quot;&gt;useState&lt;/code&gt;来控制&lt;code class=&quot;highlighter-rouge&quot;&gt;msg&lt;/code&gt;的状态，并将其展示在界面上：&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;React&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;useState&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;react&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;SafeAreaView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;Text&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;TouchableOpacity&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;react-native&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Constants&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;./expand/dao/Constants&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;post&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;./expand/dao/HiNet&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;default&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;props&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;any&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;msg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;setMsg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;useState&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;''&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;doFetch&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;formData&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;FormData&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;formData&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;append&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;requestPrams&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;RN&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;post&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Constants&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;test&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;api&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;formData&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)().&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;then&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;setMsg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;JSON&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;stringify&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}).&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;catch&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;setMsg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;JSON&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;stringify&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;})&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
        &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;SafeAreaView&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;TouchableOpacity&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;onPress&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;doFetch&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;
                &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Text&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;加载&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;sr&quot;&gt;/Text&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;gt;
&lt;/span&gt;            &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;sr&quot;&gt;/TouchableOpacity&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;gt;
&lt;/span&gt;            &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Text&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;msg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;sr&quot;&gt;/Text&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;gt;
&lt;/span&gt;        &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;sr&quot;&gt;/SafeAreaView&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;gt;
&lt;/span&gt;    &lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;从上述代码中我们不难看出，在React Native中使用&lt;code class=&quot;highlighter-rouge&quot;&gt;State Hook&lt;/code&gt;的主要步骤：&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;导入&lt;code class=&quot;highlighter-rouge&quot;&gt;useState&lt;/code&gt;：&lt;code class=&quot;highlighter-rouge&quot;&gt;import React, { useState } from 'react';&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;通过&lt;code class=&quot;highlighter-rouge&quot;&gt;useState&lt;/code&gt;定义state：&lt;code class=&quot;highlighter-rouge&quot;&gt;const [msg, setMsg] = useState('');&lt;/code&gt;
    &lt;ul&gt;
      &lt;li&gt;msg是定义的state中一个变量，&lt;strong&gt;setMsg是用来修改msg变量的关联函数，它的格式是&lt;code class=&quot;highlighter-rouge&quot;&gt;set+变量名首字母大写&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;修改状态：通过前面定义的关联函数&lt;code class=&quot;highlighter-rouge&quot;&gt;setMsg&lt;/code&gt;修改即可&lt;code class=&quot;highlighter-rouge&quot;&gt;setMsg(JSON.stringify(result));&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;State Hook&lt;/code&gt;的作用范围：因为Hooks只能应用与函数式组件，所以通过它声明的state的作用范围是函数内；&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;上面代码是摘自《&lt;a href=&quot;https://coding.imooc.com/class/304.html&quot;&gt;网络编程与数据存储技术&lt;/a&gt;》一章。&lt;/p&gt;

&lt;h3 id=&quot;在react-native中使用-effect-hook&quot;&gt;在React Native中使用 Effect Hook&lt;/h3&gt;

&lt;p&gt;Effect Hook 可以让你在函数组件中执行副作用操作。&lt;/p&gt;

&lt;p&gt;我们可以把 useEffect Hook 看做React class 的生命周期函数：&lt;code class=&quot;highlighter-rouge&quot;&gt;componentDidMount&lt;/code&gt;、&lt;code class=&quot;highlighter-rouge&quot;&gt;componentDidUpdate&lt;/code&gt; 和 &lt;code class=&quot;highlighter-rouge&quot;&gt;componentWillUnmount&lt;/code&gt; 这三个函数的组合。&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;需求2：假如我们需要在页面完成装载后的某个时刻执行某个操作，在页面卸载时执行一些清理会资源回收操作。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;对于这样的一个需求对应的class代码如下：&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;React&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;react&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;SafeAreaView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;StyleSheet&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;Text&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;TouchableOpacity&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;react-native&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Constants&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;./expand/dao/Constants&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;post&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;./expand/dao/HiNet&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;default&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;HiNetDemo&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;React&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Component&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{},&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;msg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;timer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;any&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;props&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;any&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;super&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;props&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;state&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;msg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;''&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;componentDidMount&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;timer&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;setTimeout&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;doFetch&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;2000&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;componentWillUnmount&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;timer&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;clearTimeout&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;timer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;doFetch&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;formData&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;FormData&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;formData&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;append&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;requestPrams&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;RN&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;post&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Constants&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;test&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;api&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;formData&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)().&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;then&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;setState&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;({&lt;/span&gt;
                &lt;span class=&quot;na&quot;&gt;msg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;JSON&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;stringify&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}).&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;catch&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;setState&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;({&lt;/span&gt;
                &lt;span class=&quot;na&quot;&gt;msg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;JSON&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;stringify&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;})&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;render&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
            &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;SafeAreaView&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;
                &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;TouchableOpacity&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;onPress&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;doFetch&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;
                    &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Text&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;加载&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;sr&quot;&gt;/Text&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;gt;
&lt;/span&gt;                &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;sr&quot;&gt;/TouchableOpacity&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;gt;
&lt;/span&gt;                &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Text&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;state&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;msg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;sr&quot;&gt;/Text&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;gt;
&lt;/span&gt;            &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;sr&quot;&gt;/SafeAreaView&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;gt;
&lt;/span&gt;        &lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;在上述代码中我们在&lt;code class=&quot;highlighter-rouge&quot;&gt;componentDidMount&lt;/code&gt;通过定时器实现了当页面完成装载后2s发起了网络请求；&lt;/li&gt;
  &lt;li&gt;并在页面卸载时清空了计时器以防止内存泄漏；&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;那么，上述功能用Effect Hook又该如何实现呢？&lt;/p&gt;

&lt;p&gt;还是以《&lt;a href=&quot;https://coding.imooc.com/class/304.html&quot;&gt;网络编程与数据存储技术&lt;/a&gt;》一章的网络编程一节为原型我们用Hooks来实现上述需求：&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;React&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;useState&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;useEffect&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;react&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;SafeAreaView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;StyleSheet&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;Text&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;TouchableOpacity&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;react-native&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Constants&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;./expand/dao/Constants&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;post&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;./expand/dao/HiNet&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;default&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;props&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;navigation&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;any&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;})&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;msg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;setMsg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;useState&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;''&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;useEffect&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;c1&quot;&gt;//对应componentDidUpdate&lt;/span&gt;
        &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;handleStatusChange&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;status&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;any&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;status&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;timer&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;setTimeout&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;doFetch&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;2000&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;c1&quot;&gt;// 对应componentWillUnmount&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;cleanup&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;timer&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;clearTimeout&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;timer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;doFetch&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;formData&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;FormData&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;formData&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;append&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;requestPrams&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;RN&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;post&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Constants&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;test&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;api&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;formData&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)().&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;then&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;setMsg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;JSON&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;stringify&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}).&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;catch&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;setMsg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;JSON&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;stringify&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;})&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
        &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;SafeAreaView&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;TouchableOpacity&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;onPress&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;doFetch&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;
                &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Text&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;加载&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;sr&quot;&gt;/Text&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;gt;
&lt;/span&gt;            &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;sr&quot;&gt;/TouchableOpacity&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;gt;
&lt;/span&gt;            &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Text&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;msg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;sr&quot;&gt;/Text&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;gt;
&lt;/span&gt;        &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;sr&quot;&gt;/SafeAreaView&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;gt;
&lt;/span&gt;    &lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;在上述代码中我们借助&lt;code class=&quot;highlighter-rouge&quot;&gt;useEffect&lt;/code&gt;实现了class相同的功能，接下来我们来总结下在RN中使用Effect Hook的关键点：&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;导入&lt;code class=&quot;highlighter-rouge&quot;&gt;useEffect&lt;/code&gt;：&lt;code class=&quot;highlighter-rouge&quot;&gt;import React, { useState,useEffect } from 'react';&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;使用&lt;code class=&quot;highlighter-rouge&quot;&gt;useEffect&lt;/code&gt;来实现不同生命周期函数的hooks：
    &lt;ul&gt;
      &lt;li&gt;直接写在&lt;code class=&quot;highlighter-rouge&quot;&gt;useEffect(() =&amp;gt; {}&lt;/code&gt;一层的会在组件装载时调用，对应componentDidMount&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;handleStatusChange&lt;/code&gt;对应&lt;code class=&quot;highlighter-rouge&quot;&gt;componentDidUpdate&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;cleanup&lt;/code&gt;对应&lt;code class=&quot;highlighter-rouge&quot;&gt;componentWillUnmount&lt;/code&gt;在组件卸载时调用&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;hooks与class的选择&quot;&gt;Hooks与class的选择&lt;/h2&gt;

&lt;p&gt;最后跟小伙伴们聊一聊什么时候该用Hooks？什么时候该用class？&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Hooks能够实现的class也都能实现&lt;/li&gt;
  &lt;li&gt;对于页面级等比较大的模块建议用class&lt;/li&gt;
  &lt;li&gt;对应组件级别比如封装一个按钮组件适合用Hooks&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;更多资料&quot;&gt;更多资料&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://u.cboy.me/ss/u?cid=672&amp;amp;aid=5&amp;amp;platform=devio&quot;&gt;ChatGPT + Flutter快速开发多端聊天机器人App&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://coding.imooc.com/class/304.html&quot;&gt;新版React Native+Redux打造高质量上线App&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://zh-hans.reactjs.org/docs/hooks-intro.html&quot;&gt;Hooks官方文档&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Sun, 19 Dec 2021 00:00:00 +0800</pubDate>
        <link>http://localhost:4000/2021/12/19/rn-hooks/</link>
        <guid isPermaLink="true">http://localhost:4000/2021/12/19/rn-hooks/</guid>
        
        <category>React Native</category>
        
        <category>iOS、Android</category>
        
        <category>教程</category>
        
        
      </item>
    
  </channel>
</rss>
