Flutter 更新日志 0.0.21 - 1.0.0
此页面是 Flutter wiki 中旧版更新日志页面的转储,直至 Flutter 发布说明 在 flutter.dev 发布。
截至 1.0.0 版本(含)的变更
#- Skia 和引擎的更新以解决以下问题
- 引擎更新以修复
- 针对文档、文档以及模板附带文档的各种工具修复。
自 v0.10.2 以来的变更
#flutter/engine#6883 - FlutterViewController 将不再默认加载应用程序的启动画面。该实现已移至新的方法
loadDefaultSplashScreenView
。#23755 移除了 flutter_test 对
package:test
的直接依赖。Flutter 现在需要 test 1.5.1 版本和 mockito 4.0.0 版本。破坏性变更
#这需要向您的 pubspec.yaml 添加显式依赖
yamldev_dependencies: test: ^1.5.1
#24024 和 flutter/engine#6760 将 harfbuzz 升级到 2.1.0,显著改进了文本布局,并支持零宽连接符 (zwj),以在 iOS 上实现更好的表情符号。
#23417 当区域设置不可用或无效时,提供
null
而不是_
。#23583 改进了本地化算法,支持 scriptCodes 和完整的首选区域设置列表,更改区域设置时对回调进行了破坏性变更(传递列表而不是单个区域设置)。
v0.11.0
#v0.10.2 中的变更(自 v0.9.4 起)- Beta 10
#v0.10.2
#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
#- flutter/engine#6393 为 Android MethodChannel/MethodCall 添加了可空性注解。
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
#- #21540 向
Animatable
添加了transform()
方法。它由Tween
(Animatable
的主要子类)实现,但直接继承Animatable
的类需要实现它。通常,可以将现有的evaluate()
方法更改为实现transform()
,使用transform()
参数提供的值,而不是提供给evaluate()
的动画当前值。evaluate()
现在有一个默认实现,它委托给transform()
。
v0.8.2 中的变更(自 v0.7.3 起)- Beta 8
#v0.7.4
#- #20322 在页面导航时,在
CupertinoNavigationBar
s 和CupertinoSliverNavigationBar
s 之间执行视差过渡。
v0.7.3 中的变更(自 v0.6.0 起)- Beta 7
#v0.7.3
#- #20966 添加了
CupertinoTimerPicker
。
v0.7.2
#- #20929 修复了
CupertinoPageScaffold
在显示键盘时未内嵌其内容的错误。
v0.7.1
#- #19637
CupertinoNavigationBar
和CupertinoSliverNavigationBar
现在根据其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 做准备》文章。 - #19025 将
CupertinoRefreshControl
重命名为CupertinoSliverRefreshControl
,以保持一致性。 - #19317 向 TextField(Material)光标添加 cursorWidth 和 cursorRadius。
- #20116 减少了发布二进制文件大小约 2MB
- #20267 添加了 `CupertinoSegmentedControl'。
- #19232 添加了
CupertinoActionSheet
,用于 iOS 风格的底部弹出工作表。 - #20101 改进了
CupertinoScrollbar
在过度滚动时的视觉保真度。 - #19789 为
CupertinoPicker
添加了无限滚动和循环滚动支持。 - #18381 改进了
CupertinoAlertDialog
的视觉保真度。
v0.5.8
#- #19284 为
CupertinoPicker
添加了多列支持,用于偏轴圆柱投影。
v0.5.7
#- #18469 添加了
CupertinoApp
,用于创建 iOS 风格的应用程序。
v0.5.6
#- #18614 将
isInstanceOf
添加为从 Flutter 导出的函数,因为 package:matcher 已弃用其isInstanceOf
的实现。 - flutter/engine#5517 启用了
--sync-async
Dart 标志。
v0.5.5
#- #18488 将
flutter 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 略微减小了
Checkbox
、Radio
和Switch
的默认尺寸,以更好地符合最新的 Material design 规范。#17637 更新了
Checkbox
、Radio
和Switch
以使用ThemeData
的toggleableActiveColor
。如果您使用浅色主题且未在ThemeData
中指定accentColor
,这些控件现在将使用主色板中对比度更高的色调。#17586 向
TextStyle
添加了一个新的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
)匹配Dartawait expectLater(find.byType(MyWidget), matchesGoldenFile('foo.png'));
破坏性变更
#此更改的后果之一是,通过
flutter test
运行的所有测试现在都显式依赖于package:flutter_test
。flutter test
的用户需要更新其pubspec.yaml
文件以包含以下内容(如果尚不存在)yamldev_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
参数,如下所示Dartimage.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#4762 和 flutter/engine#5008 引入了
Image.toByteData()
,它用于获取dart:ui
中Image
实例的原始 RGBA 字节。#16721 iOS 上的滚动运动已进行微调,以避免在滚动刚开始移动时出现跳动,并更接近原生行为。
v0.2.11
#- #16039 和 #16447 大幅修改了
Chip
的实现,添加了新的 chip 类型:InputChip
、ChoiceChip
、FilterChip
、ActionChip
,并更新了 chip 的外观。
v0.2.9
#- #16187 更新了
Card
widget 的形状和海拔。
自 Flutter v0.2.8 以来的 Dart 变更
#dart:async
:移除了Stream.firstWhere
和Stream.lastWhere
上已弃用的defaultValue
参数。dart:core
:向int
、double
、num
、BigInt
、Uri
和DateTime
添加了tryParse
静态方法,并弃用了int.parse
、double.parse
和num.parse
上的onError
参数。- 现在总是可以省略
new
关键字。const
关键字是创建常量表达式所必需的,尽管在表达式内部,进一步的const
关键字也可以省略。
v0.2.8 中的变更(自 v0.2.3 起)- Beta 2
#v0.2.8
#- #16040 添加了一个 API,允许通过其
CupertinoTabBar
的currentIndex
以编程方式更改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 添加了调试标志
debugDisableClipLayers
、debugDisablePhysicalShapeLayers
和debugDisableOpacityLayers
,以帮助诊断栅格化速度的性能问题。
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
#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 更改了
FlatButton
和RaisedButton
的层次结构——它们现在都继承自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
##14449 将
SliverGridLayout.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
类型不再具有无限大小。#4487 将
io.flutter.plugin.common.PluginRegistry
中RequestPermissionResult
回调概念的所有用法替换为RequestPermissionsResult
,添加了一个缺失的 s 以与相应的 Android SDK 概念保持一致。旧的 API 已被弃用,并将在后续版本中停止使用。从引入弃用功能的版本到旧 API 不再可用的版本之间,将有至少四周的宽限期。