Deprecated API removed after v2.10
- Summary
-
Changes
- maxLengthEnforced of TextField & related classes
- VelocityTracker constructor
- DayPicker & MonthPicker
- FlatButton, RaisedButton, & OutlineButton
- Scaffold SnackBar methods
- RectangularSliderTrackShape.disabledThumbGapWidth
- Text selection of ThemeData to TextSelectionThemeData
- RenderEditable.onSelectionChanged to TextSelectionDelegate.textEditingValue
- Stack.overflow
- UpdateLiveRegionEvent
- RenderObjectElement methods
- Timeline
Summary
#In accordance with Flutter's Deprecation Policy, deprecated APIs that reached end of life after the 2.10 stable release have been removed.
All affected APIs have been compiled into this primary source to aid in migration. A quick reference sheet is available as well.
Changes
#This section lists the deprecations by affected class.
maxLengthEnforced
of TextField
& related classes
#Supported by Flutter Fix: yes
maxLengthEnforced
was deprecated in v1.25.
Use maxLengthEnforcement
instead.
Where maxLengthEnforced
was true, replace with MaxLengthEnforcement.enforce
.
Where maxLengthEnforced
was false, replace with MaxLengthEnforcement.none
.
This change allows more behaviors to be specified beyond the original binary
choice, adding MaxLengthEnforcement.truncateAfterCompositionEnds
as an
additional option.
The following classes all have the same change of API:
TextField
TextFormField
CupertinoTextField
Migration guide
In-depth migration guide available
Code before migration:
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;
Code after migration:
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;
References
API documentation:
Relevant issues:
Relevant PRs:
VelocityTracker
constructor
#Supported by Flutter Fix: yes
The default constructor for VelocityTracker
was deprecated in v1.22.
The VelocityTracker.withKind()
should be used instead. This allows for a
PointerDeviceKind
to be specified for the tracker. The previous default for
VelocityTracker.kind
was PointerDeviceKind.touch
.
Migration guide
Code before migration:
final VelocityTracker tracker = VelocityTracker();
Code after migration:
final VelocityTracker tracker = VelocityTracker.withKind(PointerDeviceKind.touch);
References
API documentation:
Relevant PRs:
DayPicker
& MonthPicker
#Supported by Flutter Fix: no
The DayPicker
and MonthPicker
widgets were first deprecated in v1.15, and
then extended in v1.26.
They have been replaced by one comprehensive widget, CalendarDatePicker
.
These widgets were displayed using the showDatePicker
method. This method was
migrated to present the new CalendarDatePicker
before this release, and so
their final removal should not necessitate further action.
References
Design document:
API documentation:
Relevant issues:
Relevant PRs:
FlatButton
, RaisedButton
, & OutlineButton
#Supported by Flutter Fix: no
The FlatButton
, RaisedButton
, and OutlineButton
widgets were first
deprecated in v1.20, and then extended in v1.26.
They are replaced by new buttons, TextButton
, ElevatedButton
, and
OutlinedButton
. These new widgets also use new associated themes, rather than
the generic ButtonTheme
.
Old Widget | Old Theme | New Widget | New Theme |
---|---|---|---|
FlatButton |
ButtonTheme |
TextButton |
TextButtonTheme |
RaisedButton |
ButtonTheme |
ElevatedButton |
ElevatedButtonTheme |
OutlineButton |
ButtonTheme |
OutlinedButton |
OutlinedButtonTheme |
Migration guide
In-depth migration guide available for detailed styling
Code before migration:
FlatButton(
onPressed: onPressed,
child: Text('Button'),
// ...
);
RaisedButton(
onPressed: onPressed,
child: Text('Button'),
// ...
);
OutlineButton(
onPressed: onPressed,
child: Text('Button'),
// ...
);
Code after migration:
TextButton(
onPressed: onPressed,
child: Text('Button'),
// ...
);
ElevatedButton(
onPressed: onPressed,
child: Text('Button'),
// ...
);
OutlinedButton(
onPressed: onPressed,
child: Text('Button'),
// ...
);
References
Design document:
API documentation:
ButtonStyle
ButtonStyleButton
ElevatedButton
ElevatedButtonTheme
ElevatedButtonThemeData
OutlinedButton
OutlinedButtonTheme
OutlinedButtonThemeData
TextButton
TextButtonTheme
TextButtonThemeData
Relevant PRs:
Scaffold
SnackBar
methods
#Supported by Flutter Fix: no
The following Scaffold
SnackBar
methods were deprecated in v1.23.
showSnackBar
removeCurrentSnackBar
hideCurrentSnackBar
The same named methods of the ScaffoldMessenger
should be used instead. A
default ScaffoldMessenger
is already created in every MaterialApp
.
Migration guide
In-depth migration guide available
Code before migration:
Scaffold.of(context).showSnackBar(mySnackBar);
Scaffold.of(context).removeCurrentSnackBar(mySnackBar);
Scaffold.of(context).hideCurrentSnackBar(mySnackBar);
Code after migration:
ScaffoldMessenger.of(context).showSnackBar(mySnackBar);
ScaffoldMessenger.of(context).removeCurrentSnackBar(mySnackBar);
ScaffoldMessenger.of(context).hideCurrentSnackBar(mySnackBar);
References
Design document:
Video content:
API documentation:
Relevant issues:
Relevant PRs:
RectangularSliderTrackShape.disabledThumbGapWidth
#Supported by Flutter Fix: yes
The RectangularSliderTrackShape.disabledThumbGapWidth
was first deprecated in
v1.5, and then extended in v1.26.
This was no longer used by the framework, as the animation of the slider thumb no longer occurs when disabled.
Migration guide
Code before migration:
RectangularSliderTrackShape(disabledThumbGapWidth: 2.0);
Code after migration:
RectangularSliderTrackShape();
References
API documentation:
Relevant PRs:
Text selection of ThemeData
to TextSelectionThemeData
#Supported by Flutter Fix: yes
The following ThemeData
members were first deprecated in v1.23, and extended
in v1.26.
useTextSelectionTheme
textSelectionColor
cursorColor
textSelectionHandleColor
These should be replaced by a more comprehensive TextSelectionThemeData
,
which is now specified in ThemeData
itself.
The useTextSelectionTheme
flag served as a temporary migration flag to
distinguish the two APIs, it can be removed now.
Migration guide
In-depth migration guide available
Code before migration:
ThemeData(
useTextSelectionTheme: false,
textSelectionColor: Colors.blue,
cursorColor: Colors.green,
textSelectionHandleColor: Colors.red,
);
Code after migration:
ThemeData(
textSelectionTheme: TextSelectionThemeData(
selectionColor: Colors.blue,
cursorColor: Colors.green,
selectionHandleColor: Colors.red,
),
);
References
Design document:
API documentation:
Relevant issues:
Relevant PRs:
RenderEditable.onSelectionChanged
to TextSelectionDelegate.textEditingValue
#Supported by Flutter Fix: no
RenderEditable.onSelectionChanged
and TextSelectionDelegate.textEditingValue
were deprecated in v1.26.
Instead of calling one or both of these methods, call
TextSelectionDelegate.userUpdateTextEditingValue
. This fixed a bug where the
TextInputFormatter
would receive the wrong selection value.
Migration guide
Code before migration:
renderEditable.onSelectionChanged(selection, renderObject, cause);
textSelectionDelegate.textEditingValue = value;
Code after migration:
textSelectionDelegate.userUpdateTextEditingValue(value, cause);
References
API documentation:
Relevant issues:
- Resolved #75505
Relevant PRs:
Stack.overflow
#Supported by Flutter Fix: yes
Stack.overflow
, as well as the Overflow
enum were deprecated in v1.22.
The replacement is Stack.clipBehavior
, a change made as part of unifying clip
behaviors and semantics across the framework. Where Overflow.visible
was used,
use Clip.none
. Where Overflow.clip
was used, use Clip.hardEdge
.
Migration guide
In-depth migration guide available
Code before migration:
const Stack stack = Stack(overflow: Overflow.visible);
const Stack stack = Stack(overflow: Overflow.clip);
Code after migration:
const Stack stack = Stack(clipBehavior: Clip.none);
const Stack stack = Stack(clipBehavior: Clip.hardEdge);
References
API documentation:
Relevant issues:
- Resolved #66030
Relevant PRs:
UpdateLiveRegionEvent
#Supported by Flutter Fix: no
The SemanticsEvent
UpdateLiveRegionEvent
, was first deprecated in v1.12, and
then extended in v1.26.
This was never implemented by the framework, and any references should be removed.
References
API documentation:
Relevant PRs:
RenderObjectElement
methods
#Supported by Flutter Fix: yes
The following RenderObjectElement
methods were deprecated in v1.21.
insertChildRenderObject
moveChildRenderObject
removeChildRenderObject
These methods are replaced, respectively, by:
insertRenderObjectChild
moveRenderObjectChild
removeRenderObjectChild
These changes were made as a soft breaking deprecation in order to change the function signature.
Migration guide
Code before migration:
element.insertChildRenderObject(child, slot);
element.moveChildRenderObject(child, slot);
element.removeChildRenderObject(child);
Code after migration:
element.insertRenderObjectChild(child, slot);
element.moveRenderObjectChild(child, oldSlot, newSlot);
element.removeRenderObjectChild(child, slot);
References
API documentation:
Relevant issues:
Relevant PRs:
Timeline
#除非另有说明,本文档之所提及适用于 Flutter 的最新稳定版本,本页面最后更新时间: 2024-10-09。 查看文档源码 或者 为本页面内容提出建议。