Skip to main content

Deprecated API removed after v3.7

Summary

#

In accordance with Flutter's Deprecation Policy, deprecated APIs that reached end of life after the 3.7 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, listed by the affected class.

GestureRecognizer.kind & subclasses

#

Supported by Flutter Fix: yes

GestureRecognizer.kind was deprecated in v2.3. Use GestureRecognizer.supportedDevices instead.

This same change affects all subclasses of GestureRecognizer:

  • EagerGestureRecognizer
  • ForcePressGestureRecognizer
  • LongPressGestureRecognizer
  • DragGestureRecognizer
  • VerticalDragGestureRecognizer
  • HorizontalDragGestureRecognizer
  • MultiDragGestureRecognizer
  • ImmediateMultiDragGestureRecognizer
  • HorizontalMultiDragGestureRecognizer
  • VerticalMultiDragGestureRecognizer
  • DelayedMultiDragGestureRecognizer
  • DoubleTapGestureRecognizer
  • MultiTapGestureRecognizer
  • OneSequenceGestureRecognizer
  • PrimaryPointerGestureRecognizer
  • ScaleGestureRecognizer

This change allowed for multiple devices to be recognized for a gesture, rather than the single option kind provided.

Migration guide

Code before migration:

dart
var myRecognizer = GestureRecognizer(
  kind: PointerDeviceKind.mouse,  
);

Code after migration:

dart
var myRecognizer = GestureRecognizer(
  supportedDevices: <PointerDeviceKind>[ PointerDeviceKind.mouse ],
);

References

API documentation:

Relevant PRs:


ThemeData accentColor, accentColorBrightness, accentColorTextTheme, accentColorIconTheme, and buttonColor

#

Supported by Flutter Fix: yes

The accentColor, accentColorBrightness, accentColorTextTheme, accentColorIconTheme, and buttonColor properties of ThemeData were deprecated in v2.3.

This change better aligned ThemeData with Material Design guidelines. It also created more clarity in theming by relying either on the core color scheme or individual component themes for desired styling.

The accentColorBrightness, accentColorTextTheme, accentColorIconTheme, and buttonColor are no longer used by the framework. References should be removed.

Uses of ThemeData.accentColor should be replaced with ThemeData.colorScheme.secondary.

Migration guide

#

Code before migration:

dart
var myTheme = ThemeData(
  //...
  accentColor: Colors.blue,
  //...
);
var color = myTheme.accentColor;

Code after migration:

dart
var myTheme = ThemeData(
  //...
  colorScheme: ColorScheme(
    //...
    secondary:Colors.blue,
    //...
  ),
  //...
);
var color = myTheme.colorScheme.secondary;

References

API documentation:

Relevant issues:

Relevant PRs:

Deprecated in:

Removed in:


AppBar, SliverAppBar, and AppBarTheme updates

#

Supported by Flutter Fix: yes

In v2.4, several changes were made ot the app bar classes and their themes to better align with Material Design. Several properties were deprecated at that time and have been removed.

For AppBar, SliverAppBar and AppBarTheme:

  • brightness has been removed, and is replaced by systemOverlayStyle
  • textTheme has been removed, and is replaced by either toolbarTextStyle or titleTextStyle.
  • backwardsCompatibility can be removed, as it was a temporary migration flag for these properties.

Additionally, AppBarTheme.color was removed, with AppBarTheme.backgroundColor as its replacement.

Migration guide

Code before migration:

dart
var toolbarTextStyle = TextStyle(...);
var titleTextStyle = TextStyle(...);
AppBar(
  brightness: Brightness.light,
  textTheme: TextTheme(
    bodyMedium: toolbarTextStyle,
    titleLarge: titleTextStyle,
  )
  backwardsCompatibility: true,
);
AppBarTheme(color: Colors.blue);

Code after migration:

dart
var toolbarTextStyle = TextStyle(...);
var titleTextStyle = TextStyle(...);
AppBar(
  systemOverlayStyle: SystemOverlayStyle(statusBarBrightness: Brightness.light),
  toolbarTextStyle: toolbarTextStyle,
  titleTextStyle: titleTextStyle,
);
AppBarTheme(backgroundColor: Colors.blue);

References

API documentation:

Relevant issues:

Deprecated in:

Removed in:


SystemChrome.setEnabledSystemUIOverlays

#

Supported by Flutter Fix: yes

In v2.3, SystemChrome.setEnabledSystemUIOVerlays, the static method for setting device system level overlays like status and navigation bars, was deprecated in favor of SystemChrome.setEnabledSystemUIMode.

This change allowed for setting up common fullscreen modes that match native Android app designs like edge to edge.

Manually setting overlays, instead of choosing a specific mode, is still supported through SystemUiMode.manual, allowing developers to pass the same list of overlays as before.

Migration guide

Code before migration:

dart
SystemChrome.setEnabledSystemUIOverlays(<SystemUiOverlay>[
  SystemUiOverlay.top,
  SystemUiOverlay.bottom,
]);

Code after migration:

dart
SystemChrome.setEnabledSystemUIMode(
  SystemUiMode.manual,
  overlays: <SystemUiOverlay>[
    SystemUiOverlay.top,
    SystemUiOverlay.bottom,
  ],
);

References

API documentation:

Relevant issues:

Deprecated in:

Removed in:


SystemNavigator.routeUpdated

#

Supported by Flutter Fix: yes

In v2.3, SystemNavigator.routeUpdated was deprecated in favor of SystemNavigator.routeInformationUpdated.

Instead of having two ways to update the engine about the current route, the change moved everything to one API, which separately selects the single-entry history mode if a Navigator that reports routes is created.

Migration guide

Code before migration:

dart
SystemNavigator.routeUpdated(routeName: 'foo', previousRouteName: 'bar');

Code after migration:

dart
SystemNavigator.routeInformationUpdated(location: 'foo');

References

API documentation:

Relevant issues:

Deprecated in:

Removed in:


AnimatedSize.vsync

#

Supported by Flutter Fix: yes

In v2.2, AnimatedSize.vsyc was deprecated. This property was no longer necessary after AnimatedSize was converted to a StatefulWidget whose State mixed in SingleTickerProviderStateMixin. The change was made to fix a memory leak.

Uses of vsync should be removed, as AnimatedSize now handles this property.

Migration guide

Code before migration:

dart
AnimatedSize(
  vsync: this,
  // ...
);

Code after migration:

dart
AnimatedSize(
  // ...
);

References

API documentation:

Deprecated in:

Removed in:


Timeline

#

In stable release: 3.10