v2.10 后移除的已弃用 API
- 摘要
- 更改
- TextField 及相关类的 maxLengthEnforced
- VelocityTracker 构造函数
- DayPicker 和 MonthPicker
- FlatButton、RaisedButton 和 OutlineButton
- Scaffold SnackBar 方法
- RectangularSliderTrackShape.disabledThumbGapWidth
- ThemeData 的文本选择到 TextSelectionThemeData
- RenderEditable.onSelectionChanged 到 TextSelectionDelegate.textEditingValue
- Stack.overflow
- UpdateLiveRegionEvent
- RenderObjectElement 方法
- 时间线
摘要
#根据 Flutter 的 弃用策略,在 2.10 稳定版发布后达到生命周期末端的已弃用 API 已被移除。
所有受影响的 API 都已编译到此主要来源中,以帮助迁移。还提供了一个 快速参考表。
更改
#本节按受影响的类列出弃用项。
TextField
及相关类的 maxLengthEnforced
#Flutter Fix 支持:是
maxLengthEnforced
在 v1.25 中被弃用。
使用 maxLengthEnforcement
代替。在 maxLengthEnforced
为 true 的地方,替换为 MaxLengthEnforcement.enforce
。在 maxLengthEnforced
为 false 的地方,替换为 MaxLengthEnforcement.none
。此更改允许指定超出原始二元选择的更多行为,并添加 MaxLengthEnforcement.truncateAfterCompositionEnds
作为附加选项。
以下所有类都具有相同的 API 更改
TextField
TextFormField
CupertinoTextField
迁移指南
迁移前的代码
const TextField textField = TextField(maxLengthEnforced: true);
const TextField textField = TextField(maxLengthEnforced: false);
final lengthEnforced = textField.maxLengthEnforced;
const TextFormField textFormField = TextFormField(maxLengthEnforced: true);
const TextFormField textFormField = TextFormField(maxLengthEnforced: false);
final lengthEnforced = textFormField.maxLengthEnforced;
const CupertinoTextField cupertinoTextField = CupertinoTextField(maxLengthEnforced: true);
const CupertinoTextField cupertinoTextField = CupertinoTextField(maxLengthEnforced: false);
final lengthEnforced = cupertinoTextField.maxLengthEnforced;
迁移后的代码
const TextField textField = TextField(maxLengthEnforcement: MaxLengthEnforcement.enforce);
const TextField textField = TextField(maxLengthEnforcement: MaxLengthEnforcement.none);
final lengthEnforced = textField.maxLengthEnforcement;
const TextFormField textFormField = TextFormField(maxLengthEnforcement: MaxLengthEnforcement.enforce);
const TextFormField textFormField = TextFormField(maxLengthEnforcement: MaxLengthEnforcement.none);
final lengthEnforced = textFormField.maxLengthEnforcement;
const CupertinoTextField cupertinoTextField = CupertinoTextField(maxLengthEnforcement: MaxLengthEnforcement.enforce);
const CupertinoTextField cupertinoTextField = CupertinoTextField(maxLengthEnforcement: MaxLengthEnforcement.none);
final lengthEnforced = cupertinoTextField.maxLengthEnforcement;
参考
API 文档
相关问题
相关 PR
VelocityTracker
构造函数
#Flutter Fix 支持:是
VelocityTracker
的默认构造函数在 v1.22 中被弃用。
应改用 VelocityTracker.withKind()
。这允许为跟踪器指定 PointerDeviceKind
。VelocityTracker.kind
之前的默认值为 PointerDeviceKind.touch
。
迁移指南
迁移前的代码
final VelocityTracker tracker = VelocityTracker();
迁移后的代码
final VelocityTracker tracker = VelocityTracker.withKind(PointerDeviceKind.touch);
参考
API 文档
相关 PR
DayPicker
和 MonthPicker
#Flutter Fix 支持:否
DayPicker
和 MonthPicker
组件最初在 v1.15 中被弃用,然后在 v1.26 中扩展。
它们已被一个综合组件 CalendarDatePicker
取代。
这些组件是使用 showDatePicker
方法显示的。此方法已迁移到在此版本之前呈现新的 CalendarDatePicker
,因此它们的最终删除不应需要进一步操作。
参考
设计文档
API 文档
相关问题
相关 PR
FlatButton
、RaisedButton
和 OutlineButton
#Flutter Fix 支持:否
FlatButton
、RaisedButton
和 OutlineButton
组件最初在 v1.20 中被弃用,然后在 v1.26 中扩展。
它们被新的按钮 TextButton
、ElevatedButton
和 OutlinedButton
取代。这些新组件也使用新的关联主题,而不是通用的 ButtonTheme
。
旧组件 | 旧主题 | 新组件 | 新主题 |
---|---|---|---|
FlatButton | ButtonTheme | TextButton | TextButtonTheme |
RaisedButton | ButtonTheme | ElevatedButton | ElevatedButtonTheme |
OutlineButton | ButtonTheme | OutlinedButton | OutlinedButtonTheme |
迁移指南
迁移前的代码
FlatButton(
onPressed: onPressed,
child: Text('Button'),
// ...
);
RaisedButton(
onPressed: onPressed,
child: Text('Button'),
// ...
);
OutlineButton(
onPressed: onPressed,
child: Text('Button'),
// ...
);
迁移后的代码
TextButton(
onPressed: onPressed,
child: Text('Button'),
// ...
);
ElevatedButton(
onPressed: onPressed,
child: Text('Button'),
// ...
);
OutlinedButton(
onPressed: onPressed,
child: Text('Button'),
// ...
);
参考
设计文档
API 文档
ButtonStyle
ButtonStyleButton
ElevatedButton
ElevatedButtonTheme
ElevatedButtonThemeData
OutlinedButton
OutlinedButtonTheme
OutlinedButtonThemeData
TextButton
TextButtonTheme
TextButtonThemeData
相关 PR
Scaffold
的 SnackBar
方法
#Flutter Fix 支持:否
以下 Scaffold
的 SnackBar
方法在 v1.23 中被弃用。
showSnackBar
removeCurrentSnackBar
hideCurrentSnackBar
应改用 ScaffoldMessenger
的同名方法。每个 MaterialApp
中都已创建了一个默认的 ScaffoldMessenger
。
迁移指南
迁移前的代码
Scaffold.of(context).showSnackBar(mySnackBar);
Scaffold.of(context).removeCurrentSnackBar(mySnackBar);
Scaffold.of(context).hideCurrentSnackBar(mySnackBar);
迁移后的代码
ScaffoldMessenger.of(context).showSnackBar(mySnackBar);
ScaffoldMessenger.of(context).removeCurrentSnackBar(mySnackBar);
ScaffoldMessenger.of(context).hideCurrentSnackBar(mySnackBar);
参考
设计文档
视频内容
API 文档
相关问题
相关 PR
RectangularSliderTrackShape.disabledThumbGapWidth
#Flutter Fix 支持:是
RectangularSliderTrackShape.disabledThumbGapWidth
最初在 v1.5 中被弃用,然后在 v1.26 中扩展。
框架不再使用此功能,因为滑块拇指的动画在禁用时不再发生。
迁移指南
迁移前的代码
RectangularSliderTrackShape(disabledThumbGapWidth: 2.0);
迁移后的代码
RectangularSliderTrackShape();
参考
API 文档
相关 PR
ThemeData
的文本选择到 TextSelectionThemeData
#Flutter Fix 支持:是
以下 ThemeData
成员最初在 v1.23 中被弃用,并在 v1.26 中扩展。
useTextSelectionTheme
textSelectionColor
cursorColor
textSelectionHandleColor
这些应替换为更全面的 TextSelectionThemeData
,该数据现在在 ThemeData
本身中指定。
useTextSelectionTheme
标志用作临时迁移标志以区分这两个 API,现在可以将其删除。
迁移指南
迁移前的代码
ThemeData(
useTextSelectionTheme: false,
textSelectionColor: Colors.blue,
cursorColor: Colors.green,
textSelectionHandleColor: Colors.red,
);
迁移后的代码
ThemeData(
textSelectionTheme: TextSelectionThemeData(
selectionColor: Colors.blue,
cursorColor: Colors.green,
selectionHandleColor: Colors.red,
),
);
参考
设计文档
API 文档
相关问题
相关 PR
RenderEditable.onSelectionChanged
到 TextSelectionDelegate.textEditingValue
#Flutter Fix 支持:否
RenderEditable.onSelectionChanged
和 TextSelectionDelegate.textEditingValue
在 v1.26 中被弃用。
不要调用这些方法中的一个或两个,而是调用 TextSelectionDelegate.userUpdateTextEditingValue
。这修复了一个错误,即 TextInputFormatter
将接收错误的选择值。
迁移指南
迁移前的代码
renderEditable.onSelectionChanged(selection, renderObject, cause);
textSelectionDelegate.textEditingValue = value;
迁移后的代码
textSelectionDelegate.userUpdateTextEditingValue(value, cause);
参考
API 文档
相关问题
- 已解决 #75505
相关 PR
Stack.overflow
#Flutter Fix 支持:是
Stack.overflow
以及 Overflow
枚举在 v1.22 中被弃用。
替换项为 Stack.clipBehavior
,此更改是框架中统一剪辑行为和语义的一部分。在使用 Overflow.visible
的地方,使用 Clip.none
。在使用 Overflow.clip
的地方,使用 Clip.hardEdge
。
迁移指南
迁移前的代码
const Stack stack = Stack(overflow: Overflow.visible);
const Stack stack = Stack(overflow: Overflow.clip);
迁移后的代码
const Stack stack = Stack(clipBehavior: Clip.none);
const Stack stack = Stack(clipBehavior: Clip.hardEdge);
参考
API 文档
相关问题
- 已解决 #66030
相关 PR
UpdateLiveRegionEvent
#Flutter Fix 支持:否
SemanticsEvent
的 UpdateLiveRegionEvent
最初在 v1.12 中被弃用,然后在 v1.26 中扩展。
框架从未实现过此功能,应删除所有引用。
参考
API 文档
相关 PR
RenderObjectElement
方法
#Flutter Fix 支持:是
以下 RenderObjectElement
方法在 v1.21 中被弃用。
insertChildRenderObject
moveChildRenderObject
removeChildRenderObject
这些方法分别被以下方法替换
insertRenderObjectChild
moveRenderObjectChild
removeRenderObjectChild
这些更改作为软中断弃用进行,以更改函数签名。
迁移指南
迁移前的代码
element.insertChildRenderObject(child, slot);
element.moveChildRenderObject(child, slot);
element.removeChildRenderObject(child);
迁移后的代码
element.insertRenderObjectChild(child, slot);
element.moveRenderObjectChild(child, oldSlot, newSlot);
element.removeRenderObjectChild(child, slot);
参考
API 文档
相关问题
相关 PR
时间线
#稳定版:3.0.0
除非另有说明,否则本网站上的文档反映了 Flutter 的最新稳定版本。页面上次更新于 2024-07-07。 查看源代码 或 报告问题。