Deprecated API removed after v1.22
Summary
#In accordance with Flutter's Deprecation Policy, deprecated APIs that reached end of life after the 1.22 stable release have been removed. This is the first time that deprecated APIs have been removed from Flutter, and some of these deprecations predate our migration guide policy.
All affected APIs have been compiled into this primary source to aid in migration. A quick reference sheet is available as well.
A design document and article are available for more context on Flutter's deprecation policy.
Changes
#This section lists the deprecations, listed by the affected class.
CupertinoDialog
                  #
                Supported by fix tool: IDE fix only.
                  CupertinoDialog was deprecated in v0.2.3.
                  Use CupertinoAlertDialog or CupertinoPopupSurface instead.
                
Migration guide
CupertinoAlertDialog
Code before migration:
CupertinoDialog(child: myWidget);
                    
                    
                    
                  Code after migration:
CupertinoAlertDialog(content: myWidget);
                    
                    
                    
                  CupertinoPopupSurface
Code before migration:
CupertinoDialog(child: myWidget);
                    
                    
                    
                  Code after migration:
CupertinoPopupSurface(child: myWidget);
                    
                    
                    
                  References
API documentation:
Relevant issues:
Relevant PRs:
Cupertino navigation bars' actionsForegroundColor
                  #
                Supported by fix tool: No
                  CupertinoNavigationBar.actionsForegroundColor
                  and CupertinoSliverNavigationBar.actionsForegroundColor
                  were deprecated in v1.1.2.
                  Setting primaryColor in your CupertinoTheme propagates this instead.
                  To access the primaryColor,
                  call CupertinoTheme.of(context).primaryColor.
                
Migration guide
Code before migration:
CupertinoNavigationBar(
  actionsForegroundColor: CupertinoColors.systemBlue,
);
CupertinoSliverNavigationBar(
  actionsForegroundColor: CupertinoColors.systemBlue,
);
                    
                    
                    
                  Code after migration:
CupertinoTheme(
  data: CupertinoThemeData(
    primaryColor: CupertinoColors.systemBlue
  ),
  child: ...
);
​
// To access the color from the `CupertinoTheme`
CupertinoTheme.of(context).primaryColor;
                    
                    
                    
                  References
API documentation:
Relevant issues:
Relevant PRs:
CupertinoTextThemeData.brightness
                  #
                Supported by fix tool: Yes
                  CupertinoTextThemeData.brightness was deprecated in v1.10.14.
                  This field member was made ineffective at the time of deprecation.
                  There is no replacement for this
                  parameter, references should be removed.
                
Migration guide
Code before migration:
const CupertinoTextThemeData themeData = CupertinoTextThemeData(brightness: Brightness.dark);
themeData.copyWith(brightness: Brightness.light);
                    
                    
                    
                  Code after migration:
const CupertinoTextThemeData themeData = CupertinoTextThemeData();
themeData.copyWith();
                    
                    
                    
                  References
API documentation:
Relevant issues:
Relevant PRs:
Pointer events constructed fromHoverEvent
                  #
                Supported by fix tool: Yes
                  The fromHoverEvent constructors for PointerEnterEvent
                  and PointerExitEvent were deprecated in v1.4.3.
                  The fromMouseEvent constructor should be used instead.
                
Migration guide
Code before migration:
final PointerEnterEvent enterEvent = PointerEnterEvent.fromHoverEvent(PointerHoverEvent());
final PointerExitEvent exitEvent = PointerExitEvent.fromHoverEvent(PointerHoverEvent());
                    
                    
                    
                  Code after migration:
final PointerEnterEvent enterEvent = PointerEnterEvent.fromMouseEvent(PointerHoverEvent());
final PointerExitEvent exitEvent = PointerExitEvent.fromMouseEvent(PointerHoverEvent());
                    
                    
                    
                  References
API documentation:
Relevant issues:
Relevant PRs:
showDialog uses builder
                  #
                Supported by fix tool: Yes
                  The child parameter of showDialog was deprecated in v0.2.3.
                  The builder parameter should be used instead.
                
Migration guide
Code before migration:
showDialog(child: myWidget);
                    
                    
                    
                  Code after migration:
showDialog(builder: (context) => myWidget);
                    
                    
                    
                  References
API documentation:
Relevant issues:
Relevant PRs:
Scaffold.resizeToAvoidBottomPadding
                  #
                Supported by fix tool: Yes
                  The resizeToAvoidBottomPadding parameter of Scaffold was deprecated in v1.1.9.
                  The resizeToAvoidBottomInset parameter should be used instead.
                
Migration guide
Code before migration:
Scaffold(resizeToAvoidBottomPadding: true);
                    
                    
                    
                  Code after migration:
Scaffold(resizeToAvoidBottomInset: true);
                    
                    
                    
                  References
API documentation:
Relevant issues:
- Show warning when nesting Scaffolds
 - SafeArea with keyboard
 - Double stacked material scaffolds shouldn't double resizeToAvoidBottomPadding
 - viewInsets and padding on Window and MediaQueryData should define how they interact
 - bottom overflow issue, when using textfields inside tabbarview
 
Relevant PRs:
ButtonTheme.bar
                  #
                Supported by fix tool: No
                  The bar constructor of ButtonTheme was deprecated in v1.9.1.
                  ButtonBarTheme can be used instead for ButtonBars,
                  or use another constructor of ButtonTheme
                  if the use is not specific to ButtonBar.
                
                  Button-specific theming is also available with the TextButtonTheme,
                  ElevatedButtonTheme, and OutlinedButtonTheme classes,
                  each corresponding with the appropriate button class,
                  TextButton, ElevatedButton and OutlinedButton.
                
Migration guide
Code before migration:
ButtonTheme.bar(
  minWidth: 10.0,
  alignedDropdown: true,
  height: 40.0,
);
                    
                    
                    
                  Code after migration, using ButtonTheme:
ButtonTheme(
  minWidth: 10.0,
  alignedDropdown: true,
  height: 40.0,
);
                    
                    
                    
                  Code after migration, using ButtonBarTheme:
ButtonBarTheme(
  data: ButtonBarThemeData(
    buttonMinWidth: 10.0,
    buttonAlignedDropdown: true,
    buttonHeight: 40.0,
  )
);
                    
                    
                    
                  References
API documentation:
- 
                    
ButtonTheme - 
                    
ButtonBarTheme ButtonBar- 
                    
TextButtonTheme TextButton- 
                    
ElevatedButtonTheme - 
                    
ElevatedButton - 
                    
OutlinedButtonTheme - 
                    
OutlinedButton 
Relevant issues:
- ButtonTheme.bar uses accent color when it should be using primary color
 - ThemeData.accentColor has insufficient contrast for text
 - Increased height as a result of changes to materialTapTargetSize affecting AlertDialog/ButtonBar heights
 
Relevant PRs:
InlineSpan, TextSpan, PlaceholderSpan
                  #
                Supported by fix tool: No
                  The following methods were deprecated in the
                  InlineSpan, TextSpan and PlaceholderSpan in order
                  to enable embedding widgets inline into paragraphs, like images.
                
Migration guide
| Code before migration | Code after migration | 
|---|---|
InlineSpan.text | TextSpan.text | 
InlineSpan.children | TextSpan.children | 
InlineSpan.visitTextSpan | InlineSpan.visitChildren | 
InlineSpan.recognizer | TextSpan.recognizer | 
InlineSpan.describeSemantics | 
                        InlineSpan.computeSemanticsInformation | 
                      
PlaceholderSpan.visitTextSpan | 
                        PlaceHolderSpan.visitChildren | 
                      
TextSpan.visitTextSpan | TextSpan.visitChildren | 
References
API documentation:
Relevant issues:
Relevant PRs:
RenderView.scheduleInitialFrame
                  #
                Supported by fix tool: No
                  The RenderView.scheduleInitialFrame method was deprecated and removed in
                  order to prevent splash screens from being taken down too early,
                  resulting in a black screen.
                  This would happen when WidgetsFlutterBinding.ensureInitialized was called.
                  Instead, replace calls to this method with RenderView.prepareInitialFrame,
                  followed by RenderView.owner.requestVisualUpdate.
                
Migration guide
Code before migration:
scheduleInitialFrame();
                    
                    
                    
                  Code after migration:
prepareInitialFrame();
owner.requestVisualUpdate();
                    
                    
                    
                  References
API documentation:
Relevant issues:
Relevant PRs:
Layer.findAll
                  #
                Supported by fix tool: No
                  The Layer.findAll method was deprecated with the
                  introduction of Layer.findAnnotations in order to unify
                  the implementations of find and findAll.
                  To migrate affected code, call findAllAnnotations instead.
                  This method returns an AnnotationResult, containing the former
                  return value of findAll in AnnotationResult.annotations.
                
Migration guide
Code before migration:
findAll(offset);
                    
                    
                    
                  Code after migration:
findAllAnnotations(offset).annotations;
                    
                    
                    
                  References
API documentation:
Relevant issues:
Relevant PRs:
BinaryMessages
                  #
                Supported by fix tool: No
                  The BinaryMessages class, its associated static methods and the defaultBinaryMessenger
                   getter
                  were deprecated and removed. The defaultBinaryMessenger instance was moved to 
                  ServicesBinding.
                  This made it possible to register a different default BinaryMessenger
                   under testing environment,
                  by creating a ServicesBinding subclass for testing. Doing so allows you to track the number of
                  pending platform messages for synchronization purposes.
                
Migration guide
| Code before migration: | Code after migration: | 
|---|---|
defaultBinaryMessenger | 
                        ServicesBinding.instance.defaultBinaryMessenger | 
                      
BinaryMessages | BinaryMessenger | 
BinaryMessages.handlePlatformMessage | 
                        ServicesBinding.instance.defaultBinaryMessenger.handlePlatformMessage | 
                      
BinaryMessages.send | 
                        ServicesBinding.instance.defaultBinaryMessenger.send | 
                      
BinaryMessages.setMessageHandler | 
                        ServicesBinding.instance.defaultBinaryMessenger.setMessageHandler | 
                      
BinaryMessages.setMockMessageHandler | 
                        ServicesBinding.instance.defaultBinaryMessenger.setMockMessageHandler | 
                      
References
API documentation:
Relevant issues:
Relevant PRs:
Generic methods for BuildContext
                  #
                Supported by fix tool: Yes
                  Several methods in BuildContext were using Type to search for ancestors.
                  Most of those methods implied a cast at call site because
                  their return type was a parent type.
                  Moreover the type provided was not checked at analysis time
                  even if the type is actually constrained.
                  Making these methods generics improves type safety and requires less code.
                
                  These method changes affect
                  the BuildContext, Element, and StatefulElement
                   classes.
                  The TypeMatcher class was also removed.
                
Migration guide
Code before migration:
ComplexLayoutState state = context.ancestorStateOfType(const TypeMatcher<ComplexLayoutState>()) as ComplexLayoutState;
                    
                    
                    
                  Code after migration:
ComplexLayoutState state = context.ancestorStateOfType<ComplexLayoutState>();
                    
                    
                    
                  BuildContext
| Code before migration: | Code after migration: | 
|---|---|
inheritFromElement | dependOnInheritedElement | 
inheritFromWidgetOfExactType | 
                        dependOnInheritedWidgetOfExactType | 
                      
ancestorInheritedElementForWidgetOfExactType | 
                        getElementForInheritedWidgetOfExactType | 
                      
ancestorWidgetOfExactType | findAncestorWidgetOfExactType | 
ancestorStateOfType | findAncestorStateOfType | 
rootAncestorStateOfType | findRootAncestorStateOfType | 
ancestorRenderObjectOfType | findAncestorRenderObjectOfType | 
Element
| Code before migration: | Code after migration: | 
|---|---|
inheritFromElement | dependOnInheritedElement | 
inheritFromWidgetOfExactType | 
                        dependOnInheritedWidgetOfExactType | 
                      
ancestorInheritedElementForWidgetOfExactType | 
                        getElementForInheritedWidgetOfExactType | 
                      
ancestorWidgetOfExactType | findAncestorWidgetOfExactType | 
ancestorStateOfType | findAncestorStateOfType | 
rootAncestorStateOfType | findRootAncestorStateOfType | 
ancestorRenderObjectOfType | findAncestorRenderObjectOfType | 
StatefulElement
| Code before migration: | Code after migration: | 
|---|---|
inheritFromElement | dependOnInheritedElement | 
References
API documentation:
Relevant PRs:
                    WidgetsBinding.deferFirstFrameReport & WidgetsBinding.allowFirstFrameReport
                  
                  #
                Supported by fix tool: Yes
                  The deferFirstFrameReport and allowFirstFrameReport methods
                  of WidgetsBinding were deprecated and removed in order to
                  provide the option to delay rendering the first frame.
                  This is useful for widgets that need to obtain initialization
                  information asynchronously and while they are waiting for
                  that information no frame should render as that would take
                  down the splash screen pre-maturely.
                  The deferFirstFrame and allowFirstFrame methods
                  should be used respectively instead.
                
Migration guide
Code before migration:
final WidgetsBinding binding = WidgetsBinding.instance;
binding.deferFirstFrameReport();
binding.allowFirstFrameReport();
                    
                    
                    
                  Code after migration:
final WidgetsBinding binding = WidgetsBinding.instance;
binding.deferFirstFrame();
binding.allowFirstFrame();
                    
                    
                    
                  References
API documentation:
Relevant PRs:
                    WaitUntilNoTransientCallbacks, WaitUntilNoPendingFrame, & WaitUntilFirstFrameRasterized
                  
                  #
                Supported by fix tool: No
                  The WaitUntilNoTransientCallbacks, WaitUntilNoPendingFrame, and WaitUntilFirstFrameRasterized
                  
                  methods from the flutter_driver packages were deprecated and removed in order to provide a more
                  composable waitForCondition API that can be used to compose conditions that the client would like
                  to wait for.
                
Migration guide
| Code before migration: | Code after migration: | 
|---|---|
WaitUntilNoTransientCallbacks | 
                        WaitForCondition(NoTransientCallbacks()) | 
                      
WaitUntilNoPendingFrame | 
                        WaitForCondition(NoPendingFrame()) | 
                      
WaitUntilFirstFrameRasterized | 
                        WaitForCondition(FirstFrameRasterized)) | 
                      
References
API documentation:
Relevant issues:
Relevant PRs:
Timeline
#In stable release: 2.0.0
Unless stated otherwise, the documentation on this site reflects Flutter 3.35.5. Page last updated on 2025-10-30. View source or report an issue.