Deprecated API removed after v3.19
- Summary
- Changes
- TextTheme
- ThemeData
- CupertinoContextMenu.previewBuilder
- Scrollbar.showTrackOnHover
- KeepAliveHandle.release method
- InteractiveViewer.alignPanAxis
- MediaQuery.boldTextOverride
- Renamed builder typedefs for AnimatedList
- FlutterDriver.enableAccessibility
- TimelineSummary.writeSummaryToFile
- Android Platform Views on API 22 and below
- Timeline
Summary
#In accordance with Flutter's Deprecation Policy, deprecated APIs that reached end of life after the 3.19 stable release have been removed.
All affected APIs have been compiled into this primary source to aid in migration. To further aid your migration, check out this quick reference sheet.
Changes
#This section lists the deprecations by the package and affected class.
TextTheme
#Package: flutter Supported by Flutter Fix: yes
Several TextStyle
properties of TextTheme
were deprecated in v3.1 to support new stylings from the Material Design specification. They are listed in the following table alongside the appropriate replacement in the new API.
Deprecation | New API |
---|---|
headline1 | displayLarge |
headline2 | displayMedium |
headline3 | displaySmall |
headline4 | headlineMedium |
headline5 | headlineSmall |
headline6 | titleLarge |
subtitle1 | titleMedium |
subtitle2 | titleSmall |
bodyText1 | bodyLarge |
bodyText2 | bodyMedium |
caption | bodySmall |
button | labelLarge |
overline | labelSmall |
Migration guide
Code before migration:
// TextTheme
// Base constructor
TextTheme(
headline1: headline1Style,
headline2: headline2Style,
headline3: headline3Style,
headline4: headline4Style,
headline5: headline5Style,
headline6: headline6Style,
subtitle1: subtitle1Style,
subtitle2: subtitle2Style,
bodyText1: bodyText1Style,
bodyText2: bodyText2Style,
caption: captionStyle,
button: buttonStyle,
overline: overlineStyle,
);
// copyWith
TextTheme.copyWith(
headline1: headline1Style,
headline2: headline2Style,
headline3: headline3Style,
headline4: headline4Style,
headline5: headline5Style,
headline6: headline6Style,
subtitle1: subtitle1Style,
subtitle2: subtitle2Style,
bodyText1: bodyText1Style,
bodyText2: bodyText2Style,
caption: captionStyle,
button: buttonStyle,
overline: overlineStyle,
);
// Getters
TextStyle style;
style = textTheme.headline1,
style = textTheme.headline2,
style = textTheme.headline3,
style = textTheme.headline4,
style = textTheme.headline5,
style = textTheme.headline6,
style = textTheme.subtitle1,
style = textTheme.subtitle2,
style = textTheme.bodyText1,
style = textTheme.bodyText2,
style = textTheme.caption,
style = textTheme.button,
style = textTheme.overline,
Code after migration:
// TextTheme
// Base constructor
TextTheme(
displayLarge: headline1Style,
displayMedium: headline2Style,
displaySmall: headline3Style,
headlineMedium: headline4Style,
headlineSmall: headline5Style,
titleLarge: headline6Style,
titleMedium: subtitle1Style,
titleSmall: subtitle2Style,
bodyLarge: bodyText1Style,
bodyMedium: bodyText2Style,
bodySmall: captionStyle,
labelLarge: buttonStyle,
labelSmall: overlineStyle,
);
TextTheme.copyWith(
displayLarge: headline1Style,
displayMedium: headline2Style,
displaySmall: headline3Style,
headlineMedium: headline4Style,
headlineSmall: headline5Style,
titleLarge: headline6Style,
titleMedium: subtitle1Style,
titleSmall: subtitle2Style,
bodyLarge: bodyText1Style,
bodyMedium: bodyText2Style,
bodySmall: captionStyle,
labelLarge: buttonStyle,
labelSmall: overlineStyle,
);
TextStyle style;
style = textTheme.displayLarge;
style = textTheme.displayMedium;
style = textTheme.displaySmall;
style = textTheme.headlineMedium;
style = textTheme.headlineSmall;
style = textTheme.titleLarge;
style = textTheme.titleMedium;
style = textTheme.titleSmall;
style = textTheme.bodyLarge;
style = textTheme.bodyMedium;
style = textTheme.bodySmall;
style = textTheme.labelLarge;
style = textTheme.labelSmall;
References
API documentation:
Relevant PRs:
ThemeData
#Package: flutter Supported by Flutter Fix: yes
Several Color
properties of ThemeData
were deprecated in v3.3 to support new stylings from the Material Design specification. These colors were errorColor
, backgroundColor
, bottomAppBarColor
, and toggleableActiveColor
. The first two are replaced by properties of the ThemeData.colorScheme
, while bottomAppBarColor
is replaced by the color of the component theme, BottomAppBarTheme
. The toggleableActiveColor
was no longer used by the framework and was removed.
Migration guide
Code before migration:
var myTheme = ThemeData(
//...
errorColor: Colors.red,
backgroundColor: Colors.blue,
bottomAppBarColor: Colors.purple,
toggleableActiveColor: Colors.orange,
//...
);
var errorColor = myTheme.errorColor;
var backgroundColor = myTheme.backgroundColor;
var bottomAppBarColor = myTheme.bottomAppBarColor;
var toggleableActiveColor = myTheme.toggleableActiveColor;
Code after migration:
var myTheme = ThemeData(
//...
colorScheme: ColorScheme(
/// ...
error: Colors.red,
background: Colors.blue,
),
bottomAppBarTheme: BottomAppBarTheme(
color: Colors.purple,
),
//...
);
var errorColor = myTheme.colorScheme.error;
var backgroundColor = myTheme.colorScheme.background;
var bottomAppBarColor = myTheme.bottomAppBarTheme.color;
var toggleableActiveColor = Colors.orange;
References
API documentation:
Relevant PRs:
CupertinoContextMenu.previewBuilder
#Package: flutter Supported by Flutter Fix: yes
The previewBuilder
was replaced by the builder
of CupertinoContextMenu
after v3.4. By adding builder
, the entirety of the animation executed by the context menu is covered, the second half of which was performed by previewBuilder
, and delineated by CupertinoContextMenu.animationOpensAt
.
Migration guide
Code before migration:
CupertinoContextMenu(
previewBuilder: (BuildContext context, Animation<double> animation, Widget child) {
return FittedBox(
fit: BoxFit.cover,
child: ClipRRect(
borderRadius: BorderRadius.circular(64.0 * animation.value),
child: Image.asset('assets/photo.jpg'),
),
);
},
actions: <Widget>[
CupertinoContextMenuAction(
child: const Text('Action one'),
onPressed: () {},
),
],
child: FittedBox(
fit: BoxFit.cover,
child: Image.asset('assets/photo.jpg'),
),
);
Code after migration:
CupertinoContextMenu(
actions: <Widget>[
CupertinoContextMenuAction(
child: const Text('Action one'),
onPressed: () {},
),
],
builder: (BuildContext context, Animation<double> animation) {
final Animation<BorderRadius?> borderRadiusAnimation = BorderRadiusTween(
begin: BorderRadius.circular(0.0),
end: BorderRadius.circular(CupertinoContextMenu.kOpenBorderRadius),
).animate(
CurvedAnimation(
parent: animation,
curve: Interval(
CupertinoContextMenu.animationOpensAt,
1.0,
),
),
);
final Animation<Decoration> boxDecorationAnimation = DecorationTween(
begin: const BoxDecoration(
color: Color(0xFFFFFFFF),
boxShadow: <BoxShadow>[],
),
end: BoxDecoration(
color: Color(0xFFFFFFFF),
boxShadow: CupertinoContextMenu.kEndBoxShadow,
),
).animate(
CurvedAnimation(
parent: animation,
curve: Interval(
0.0,
CupertinoContextMenu.animationOpensAt,
)
)
);
return Container(
decoration: animation.value < CupertinoContextMenu.animationOpensAt
? boxDecorationAnimation.value
: null,
child: FittedBox(
fit: BoxFit.cover,
child: ClipRRect(
borderRadius: borderRadiusAnimation.value ?? BorderRadius.circular(0.0),
child: SizedBox(
height: 150,
width: 150,
child: Image.asset('assets/photo.jpg'),
),
),
)
);
}
)
References
API documentation:
Relevant PRs:
Scrollbar.showTrackOnHover
#Package: flutter Supported by Flutter Fix: yes
The showTrackOnHover
property of Scrollbar
, and its associated component theme, ScrollbarThemeData.showTrackOnHover
, were replaced by the stateful property ScrollbarThemeData.trackVisibility
after v3.4. By utilizing trackVisibility
, all permutations of state can factor into revealing the scrollbar track, not just hover.
Migration guide
Code before migration:
Scrollbar(
showTrackOnHover: true,
child: //...
);
ScrollbarThemeData(
showTrackOnHover: true,
);
Code after migration:
Scrollbar(
child: //...
);
ScrollbarThemeData(
// This will always show the track for any state.
trackVisibility: MaterialStateProperty<bool>.all(true),
);
// Or
ScrollbarThemeData(
// Only show on hover.
trackVisibility: (Set<MaterialState> states) => states.contains(MaterialState.hovered),
);
References
API documentation:
Relevant PRs:
KeepAliveHandle.release
method
#Package: flutter Supported by Flutter Fix: no
The release
method of KeepAliveHandle
was removed and replaced by calling dispose
after v3.3. This change was made because release
was found to often be called without then calling dispose
, leading to memory leaks. The dispose
method executes the same functionality as release
did now.
Migration guide
Code before migration:
KeepAliveHandle handle = KeepAliveHandle();
handle.release();
handle.dispose();
Code after migration:
KeepAliveHandle handle = KeepAliveHandle();
handle.dispose();
References
API documentation:
Relevant PRs:
InteractiveViewer.alignPanAxis
#Package: flutter Supported by Flutter Fix: yes
The alignPanAxis
property of InteractiveViewer
was removed and replaced with panAxis
after v3.3. This change was made to enable more modes of panning in InteractiveViewer
.
Migration guide
Code before migration:
InteractiveViewer(
alignPanAxis: true,
);
Code after migration:
InteractiveViewer(
panAxis: PanAxis.aligned,
);
References
API documentation:
Relevant PRs:
MediaQuery.boldTextOverride
#Package: flutter Supported by Flutter Fix: yes
The boldTextOverride
method of MediaQuery
was removed and replaced with boldTextOf
after v3.5. This change was made as part of larger refactor of MediaQuery
, most notably reducing the number of rebuilds that would be triggered by widgets that depend on it.
Migration guide
Code before migration:
MediaQuery.boldTextOverride(context);
Code after migration:
MediaQuery.boldTextOf(context)
References
API documentation:
Relevant PRs:
Renamed builder typedefs for AnimatedList
#Package: flutter Supported by Flutter Fix: no
With the addition of AnimatedGrid
, AnimatedList
was refactored to share a common base class. The previously named AnimatedListItemBuilder
and AnimatedListRemovedItemBuilder
were renamed to better reflect the classes they could be used with after v3.5. Rename any references to AnimatedItemBuilder
and AnimatedRemovedItemBuilder
.
References
API documentation:
Relevant PRs:
FlutterDriver.enableAccessibility
#Package: flutter_driver Supported by Flutter Fix: yes
The enableAccessibility
method of flutterDriver
was deprecated in v2.3. It was removed and replaced with setSemantics
. This change made is possible to enable or disable accessibility, rather than only enable it.
Migration guide
Code before migration:
FlutterDriver driver = FlutterDriver.connectedTo(
// ...
);
driver.enableAccessibility();
Code after migration:
FlutterDriver driver = FlutterDriver.connectedTo(
// ...
);
driver.setSemantics(true);
References
API documentation:
Relevant PRs:
TimelineSummary.writeSummaryToFile
#Package: flutter_driver Supported by Flutter Fix: yes
The writeSummaryToFile
method of TimelineSummary
was deprecated in v2.1. It was removed and replaced with writeTimelineToFile
.
Migration guide
Code before migration:
TimelineSummary summary = TimelineSummary.summarize(
myTimeline,
);
summary.writeSummaryToFile(
traceName,
pretty: true,
);
Code after migration:
TimelineSummary summary = TimelineSummary.summarize(
myTimeline,
);
summary.writeTimelineToFile(
traceName,
pretty: true,
);
References
API documentation:
Relevant PRs:
Android Platform Views on API 22 and below
#Supported by Flutter Fix: no
As of Flutter 3.0 platform views require api 23 or higher. In Flutter 3.19 we now throw UnsupportedOperationException when using platform views on android devices running api level 22 and below.
Migration guide
Set minimum api level to 23 (or higher) or check the android api level before displaying a platform view.
The previously announced deprecations for context menus, relating to ToolbarOptions
as well as parts of TextSelectionController
and SelectableRegionState
were not removed this cycle, to allow more time for migration. Expect these deprecations to be removed in the next cycle, which will be announced again when the time comes.
Timeline
#In stable release: 3.22.0
Unless stated otherwise, the documentation on this site reflects the latest stable version of Flutter. Page last updated on 2024-10-24. View source or report an issue.