此页面是 Flutter wiki 中旧版更新日志页面的转储,直至 Flutter 发布说明 在 flutter.dev 发布。

截至 1.0.0 版本(含)的变更

#

自 v0.10.2 以来的变更

#
  • flutter/engine#6883 - FlutterViewController 将不再默认加载应用程序的启动画面。该实现已移至新的方法 loadDefaultSplashScreenView

  • #23755 移除了 flutter_test 对 package:test 的直接依赖。Flutter 现在需要 test 1.5.1 版本和 mockito 4.0.0 版本。

    破坏性变更

    #

    这需要向您的 pubspec.yaml 添加显式依赖

    yaml
    dev_dependencies:
      test: ^1.5.1
  • #24024flutter/engine#6760 将 harfbuzz 升级到 2.1.0,显著改进了文本布局,并支持零宽连接符 (zwj),以在 iOS 上实现更好的表情符号。

  • #23417 当区域设置不可用或无效时,提供 null 而不是 _

  • #23583 改进了本地化算法,支持 scriptCodes 和完整的首选区域设置列表,更改区域设置时对回调进行了破坏性变更(传递列表而不是单个区域设置)。

v0.11.0

#
  • #23320 重新添加了对 Cupertino 导航栏跨页面过渡的滑动手势支持。
  • #23320 添加了对跨多个 Navigator 的 Hero 过渡支持。

v0.10.2 中的变更(自 v0.9.4 起)- Beta 10

#

v0.10.2

#
  • #23194 添加了 CupertinoTextField,一个 iOS 风格的文本输入字段。
  • #23221 添加了对 Cupertino 导航栏跨页面过渡的 RTL(从右到左)支持。

v0.10.1

#
  • #22977 将大部分 Null 替换为 void。请参阅提议此更改的邮件
  • #22985 实现正确的正交投影
  • #23104 更新包装消息
  • #22924 支持禁用交互式 TextField 光标和选择
  • #22870 对超级混合使用新的 mixin 语法
  • #22022 允许在 flutter create 中使用命令行选项“--project-name”
  • #23126 每次导航发生时分派一个 Flutter.Navigation 事件。
  • #23183 修复了从…切换时 gradle 构建规则会重新运行的错误
  • #22394 修复 ClampingScrollSimulation 中超出范围的弹簧模拟
  • #23174 启用 lint prefer_void_to_null
  • #23184 TextTheme.apply() 不应假定 TextStyle 字段为非空
  • #23168 添加了蒙古语 (mn) 翻译
  • #23167 修复禁用的表单字段验证
  • #23015 在单行 TextField 上按回车键时完成编辑
  • #23021 简化使用 CocoaPods 进行 iOS Add2App 的过程
  • #22825 修复 Curves.bounceInOut 的数学计算
  • #22977 优先使用 void 而非 null
  • #22822 添加了长按抬起回调
  • #18770 向 DropdownButton 添加 disabledHint
  • #21657 使 AndroidView 接受手势识别器工厂。
  • #22449 添加文本阴影支持
  • flutter/engine#6644 向 Paragraph.getBoxesForRange() 添加 BoxHeightStyle 和 BoxWidthStyle 作为参数,以获取各种样式的封闭框。
  • Skia 更新,更改了模糊和抗锯齿的底层实现,这可能会破坏黄金测试。

v0.9.7

#

v0.9.6

#
  • #21251 添加了 CupertinoDatePicker,一个 iOS 风格的选择器控件,支持日期模式和日期+时间模式。

v0.9.4 中的变更(自 v0.8.2 起)- Beta 9

#

v0.9.4

#
  • #21715,默认的 MaterialPageRoute 过渡现在由 Theme 定义。添加了(可选)对 Android P 样式页面过渡的支持。MaterialPageRoute 对“托管”另一个路由以重用其 buildTransitions() 方法的支持已被移除,因为 PageTransitionsBuilders(包括 CupertinoPageTransitionBuilder)是独立的开对象。

v0.9.3

#
  • #22108 稍微改变了 flutter doctor 的输出,这可能会影响依赖于精确输出的自动化脚本。

v0.9.2

#
  • #21540Animatable 添加了 transform() 方法。它由 TweenAnimatable 的主要子类)实现,但直接继承 Animatable 的类需要实现它。通常,可以将现有的 evaluate() 方法更改为实现 transform(),使用 transform() 参数提供的值,而不是提供给 evaluate() 的动画当前值。evaluate() 现在有一个默认实现,它委托给 transform()

v0.8.2 中的变更(自 v0.7.3 起)- Beta 8

#

v0.7.4

#
  • #20322 在页面导航时,在 CupertinoNavigationBars 和 CupertinoSliverNavigationBars 之间执行视差过渡。

v0.7.3 中的变更(自 v0.6.0 起)- Beta 7

#

v0.7.3

#
  • #20966 添加了 CupertinoTimerPicker

v0.7.2

#
  • #20929 修复了 CupertinoPageScaffold 在显示键盘时未内嵌其内容的错误。

v0.7.1

#
  • #19637 CupertinoNavigationBarCupertinoSliverNavigationBar 现在根据其 CupertinoPageRoute.title 自动填充其标题和返回按钮标签。

v0.6.0 中的变更(自 v0.5.1 起)- Beta 6

#

v0.6.0

#
  • Dart SDK 更新至 Dart 2 构建版本 (2.1.0-dev.0.0)。包和插件作者应确保其 pubspec.yaml 文件包含 Dart SDK 约束,上限为 <3.0.0。有关详细信息,请参阅《为 Dart 2 做准备》文章
  • #19025CupertinoRefreshControl 重命名为 CupertinoSliverRefreshControl,以保持一致性。
  • #19317 向 TextField(Material)光标添加 cursorWidth 和 cursorRadius。
  • #20116 减少了发布二进制文件大小约 2MB
  • #20267 添加了 `CupertinoSegmentedControl'。
  • #19232 添加了 CupertinoActionSheet,用于 iOS 风格的底部弹出工作表。
  • #20101 改进了 CupertinoScrollbar 在过度滚动时的视觉保真度。
  • #19789CupertinoPicker 添加了无限滚动和循环滚动支持。
  • #18381 改进了 CupertinoAlertDialog 的视觉保真度。

v0.5.8

#
  • #19284CupertinoPicker 添加了多列支持,用于偏轴圆柱投影。

v0.5.7

#
  • #18469 添加了 CupertinoApp,用于创建 iOS 风格的应用程序。

v0.5.6

#
  • #18614isInstanceOf 添加为从 Flutter 导出的函数,因为 package:matcher 已弃用其 isInstanceOf 的实现。
  • flutter/engine#5517 启用了 --sync-async Dart 标志。

v0.5.5

#
  • #18488flutter trace--debug-port 参数设为必需,因为之前的行为不可靠且导致测试不稳定。

v0.5.2

#
  • #18096 更改了文本字段中字符计数器的渲染方式,使其更接近 Material design 规范。

v0.5.1 中的变更(自 v0.3.2 起)- Beta 5

#

v0.5.0

#
  • #17661 更改了 ListTile 的布局和大小,使其更好地符合最新的 Material design 规范。

  • #17620 略微减小了 CheckboxRadioSwitch 的默认尺寸,以更好地符合最新的 Material design 规范。

  • #17637 更新了 CheckboxRadioSwitch 以使用 ThemeDatatoggleableActiveColor。如果您使用浅色主题且未在 ThemeData 中指定 accentColor,这些控件现在将使用主色板中对比度更高的色调。

  • #17586TextStyle 添加了一个新的 background 属性。子类必须确保在构造函数和 copyWith 中处理此属性。

v0.4.4 中的变更(自 v0.3.2 起)- Beta 4

#

v0.4.0

#
  • #17021 为 iOS 添加了隐式无障碍滚动。为此,视口在前端和后端边缘之前定义了缓存范围,并且 slivers 如果落入缓存范围,则应提供语义信息。

    破坏性变更

    #

    通过此更改,目前在视口中不可见的视口子项现在被视为 off-stage。要在测试中找到它们,请在 Finder 上指定 skipOffstage: false

v0.3.6

#
  • #17094 引入了在 widget 测试中进行黄金图像测试的能力。在 widget 测试中,您现在可以使用以下匹配器来确保您的 widget 的栅格化图像与黄金文件(例如 foo.png)匹配

    Dart
    await expectLater(find.byType(MyWidget), matchesGoldenFile('foo.png'));

    破坏性变更

    #

    此更改的后果之一是,通过 flutter test 运行的所有测试现在都显式依赖于 package:flutter_testflutter test 的用户需要更新其 pubspec.yaml 文件以包含以下内容(如果尚不存在)

    yaml
    dev_dependencies:
      flutter_test:
        sdk: flutter

    如果您的 pubspec.yaml 不包含所需的依赖项,并且您运行 flutter test,您将看到以下形式的错误

    compiler message: Error: Could not resolve the package 'flutter_test' in 'package:flutter_test/flutter_test.dart'.

v0.3.3

#
  • flutter/engine#5060 引入了通过 Image.toByteData()dart:ui Image 编码为 PNG 的能力。希望获取编码字节的调用者可以传递 format 参数,如下所示

    Dart
    image.toByteData(format: ui.ImageByteFormat.png);

v0.3.2 中的变更(自 v0.3.1 起)- Beta 3

#

v0.3.1 中的变更(自 v0.2.8 起)- Beta 2 更新

#

我们已知 HttpClient 实现中存在证书验证的潜在问题。要跟踪我们的调查,请参阅 Dart issue 32936

v0.3.1

#
  • flutter/engine#4932 引入了一个新的 shell 嵌入 API,具有许多新功能。特别是,单个进程现在可以托管多个 Flutter shell。

  • flutter/engine#4762flutter/engine#5008 引入了 Image.toByteData(),它用于获取 dart:uiImage 实例的原始 RGBA 字节。

  • #16721 iOS 上的滚动运动已进行微调,以避免在滚动刚开始移动时出现跳动,并更接近原生行为。

v0.2.11

#
  • #16039#16447 大幅修改了 Chip 的实现,添加了新的 chip 类型:InputChipChoiceChipFilterChipActionChip,并更新了 chip 的外观。

v0.2.9

#
  • #16187 更新了 Card widget 的形状和海拔。

自 Flutter v0.2.8 以来的 Dart 变更

#
  • dart:async:移除了 Stream.firstWhereStream.lastWhere 上已弃用的 defaultValue 参数。
  • dart:core:向 intdoublenumBigIntUriDateTime 添加了 tryParse 静态方法,并弃用了 int.parsedouble.parsenum.parse 上的 onError 参数。
  • 现在总是可以省略 new 关键字。const 关键字是创建常量表达式所必需的,尽管在表达式内部,进一步的 const 关键字也可以省略。

v0.2.8 中的变更(自 v0.2.3 起)- Beta 2

#

v0.2.8

#
  • #16040 添加了一个 API,允许通过其 CupertinoTabBarcurrentIndex 以编程方式更改 CupertinoTabScaffold 的当前选项卡。

v0.2.5

#
  • #15416 从 Flutter 中移除了 package:http,并将其所有用法替换为 dart:io 中的 HttpClient。如果您使用 package:http,则必须将其作为依赖项添加到您的 pubspec.yaml 中才能继续使用。

    createHttpClient() 在被标记为已弃用后也已被移除。要更改框架创建 http 客户端的方式,您可以使用 dart:io 中的 HttpOverrides 来全局或按区域提供自己的 createHttpClient() 回调。

    更多详细信息可在公告中查看。

  • #15871 更改了 flutter create 创建的 AndroidManifest.xml 的默认配置。“screenLayout”和“density”现在默认包含在 configChanges 属性中,防止 Flutter 应用程序在这些更改时重新启动。

  • #15324 添加了一个新的 CupertinoRefreshControl widget,样式仿照 iOS 的下拉刷新模式。可在 Flutter Gallery 中查看演示。

v0.2.4

#
  • #15565 默认开启 Dart 2 模式。要在 Dart 1 模式下运行,您仍然可以使用 --no-preview-dart-2

    更多详细信息可在公告中查看。

  • #15537 移除了 SemanticsSortOrder。从现在开始,遍历排序仅在同级节点之间进行。

    更多详细信息可在公告中查看。

  • #15484 更改了 TextFormField initialValue 构造函数参数的含义。

    TextFormField 的 initialValue 参数不再无条件地初始化其 TextEditingController 的 text 属性。如果您创建 TextFormField 并提供控制器,则 initialValue 必须为 null(现在是默认值)。如果您提供控制器,则可以使用 TextEditingController 的 text 属性指定其初始文本值。

    之前

    #

    new TextFormField( initialValue: 'Hello World', controller: _myTextEditingController, );

    之后

    #

    new TextFormField( controller: _myTextEditingController ..text = 'Hello World', ) // 或者更典型的方式: _myTextEditingController = new TextEditingController( text: 'Hello World', ); new TextFormField( controller: _myTextEditingController, );

  • #15303 更新了 showDialog 函数以接受 builder 参数并弃用 widget 参数。

    之前

    #

    showDialog(context: context, child: new Text('hello'))

    之后

    #

    showDialog(context: context, builder: (BuildContext context) => new Text('hello'))

  • #15265 更新了 ThemeData,使其使用 MaterialColor 的主色,而不是在浅色主题中无条件使用 500 色调。颜色值保持不变。

    之前

    #

    expect(widget.color, Colors.blue.shade500) // 主色

    之后

    #

    expect(widget.color, Colors.blue) // 主色

  • #15548 添加了调试标志 debugDisableClipLayersdebugDisablePhysicalShapeLayersdebugDisableOpacityLayers,以帮助诊断栅格化速度的性能问题。

v0.2.3 中的变更(自 v0.1.5 起)- Beta 1 更新

#

v0.2.0

#
  • flutter/engine#4742 更新了 Android 上资产的读取方式,使其直接从 APK 中读取。因此,图像资产路径不再支持开头的斜杠

    之前

    #

    new Image.asset('/foo/bar.png')

    之后

    #

    new Image.asset('foo/bar.png')

v0.1.9

#
  • #14901 Slider 的视觉更新改变了颜色、不透明度以及值指示器的形状和行为。它还从 Slider 类中移除了“thumbOpenAtMin”标志,该标志已不再需要,并且可以通过自定义滑块形状支持进行模拟。

v0.1.5 中的变更(自 v0.1.4 起)- Beta 1.1

#

v0.1.5

#
  • #14714 修复了 Flutter Gallery 的 groovy 脚本,从而修复了 #14912

v0.1.4 中的变更(自 v0.0.20 起)- Beta 1

#

v0.1.3

#
  • #14702 从 Flutter 工具的 Version 类中移除了 engineDartVersion getter。

v0.1.1

#
  • flutter/engine#4607#14601 从以下 dart:ui 类中移除了默认构造函数

    • Codec
    • FrameInfo
    • Gradient
    • Image
    • Paragraph
    • Picture
    • Scene
    • SemanticsUpdate
    • Shader

    移除默认构造函数是为了防止创建这些类的未初始化实例(在某些情况下是为了防止扩展这些类)。这些类只能由 Flutter 引擎或通过命名构造函数(如果提供)实例化。

v0.0.24

#
  • #14410 包含对 ButtonTheme 的破坏性 API 更改

    • 构造函数 ButtonTheme()ButtonTheme.bar() 不再是 const 可构造的
    • ButtonTheme.textTheme 现在是 ButtonTheme.data.textTheme
    • ButtonTheme.minWidth 现在是 ButtonTheme.data.minWidth
    • ButtonTheme.height 现在是 ButtonTheme.data.height
    • ButtonTheme.padding 现在是 ButtonTheme.data.padding
  • #14410 更改了 FlatButtonRaisedButton 的层次结构——它们现在都继承自 RawMaterialButton,而不是 MaterialButton

  • #14410 更改了 RaisedButton,使其在禁用时不再投射阴影。

v0.0.23

#
  • #14343 修改了 EditableText 的复制、剪切和粘贴工作方式:抽象类 TextSelectionControls 具有新的方法 canCopy、canCut 等,用于确定这些操作是否可用。TextSelectionDelegate 接口现在需要一个额外的方法 bringIntoView(TextPosition position) 将 TextPosition 滚动到 TextField 的可见部分。此外,该接口不再由 TextSelectionOverlay 实现。取而代之的是,应使用 EditableTextState,它实现了该接口。另请参阅:flutter-dev/IHPndyUDy0M

Sliver API

#
  • #14449SliverGridLayout.estimateMaxScrollOffset 方法替换为 SliverGridLayout.computeMaxScrollOffset 方法。这个新方法必须报告一个精确的值,而不仅仅是估计值。这对于修复一个有限的 SliverGrid 无法处理从屏幕顶部滚动的错误是必要的(因为我们无法确定它有多少内容)。

    出于类似原因,RenderSliverBoxChildManager 接口有一个新的 getter,childCount,如果 createChild 可以返回 null,它必须返回一个非空值。实际上,实现此接口并不常见,因此这应该没有影响。更常见的是实现 widgets 层等效的 SliverChildDelegate。此接口已经有一个 estimatedChildCount getter。该 getter 继续存在,尽管其语义已稍作调整,要求如果委托上的 build 方法返回 null,则返回的值必须准确。

v0.0.21

#
  • #13734#14055#14177 大幅修改了 InputDecorator 及相关 widget。输入装饰器组件的布局略有改变,这意味着文本字段的内部布局也发生了变化。依赖于文本字段内部几何结构的测试需要更新。

    此外,hideDivider: true 必须替换为新的 border: InputBorder.none。这是我们简化输入渲染自定义过程的一部分;如果您对输入装饰有特别新颖的需求,现在还可以提供自定义 InputBorder 子类。

  • #4528#14011 弃用了标准平台通道消息/方法编解码器中对大整数的支持,并在四周的宽限期后停止提供。此更改是向 Dart 2.0 过渡的结果,其中 int 类型不再具有无限大小。

  • #4487io.flutter.plugin.common.PluginRegistryRequestPermissionResult 回调概念的所有用法替换为 RequestPermissionsResult,添加了一个缺失的 s 以与相应的 Android SDK 概念保持一致。

    旧的 API 已被弃用,并将在后续版本中停止使用。从引入弃用功能的版本到旧 API 不再可用的版本之间,将有至少四周的宽限期。