Breaking changes and migration guides
- Breaking changes by release
- Not yet released to stable
- Released in Flutter 3.24
- Released in Flutter 3.22
- Released in Flutter 3.19
- Released in Flutter 3.16
- Released in Flutter 3.13
- Released in Flutter 3.10
- Released in Flutter 3.7
- Released in Flutter 3.3
- Released in Flutter 3
- Released in Flutter 2.10
- Released in Flutter 2.5
- Reverted change in 2.2
- Released in Flutter 2.2
- Released in Flutter 2
- Released in Flutter 1.22
- Released in Flutter 1.20
- Released in Flutter 1.17
As described in the breaking change policy, on occasion we publish guides for migrating code across a breaking change.
To be notified about future breaking changes, join the groups Flutter announce and Dart announce.
When facing Dart errors after upgrading Flutter, consider using the dart fix
command to automatically migrate your code. Not every breaking change is supported in this way, but many are.
To avoid being broken by future versions of Flutter, consider submitting your tests to our test registry.
Breaking changes by release
#The following guides are available. They are sorted by release, and listed in alphabetical order:
Not yet released to stable
#ImageFilter.blur
default tile mode automatic selection- Localized messages are generated into source, not a synthetic package
.flutter-plugins-dependencies
replaces.flutter-plugins
Color
wide gamut support- Remove invalid parameters for
InputDecoration.collapsed
- Stop generating
AssetManifest.json
- Deprecate
TextField.canRequestFocus
- Set default for SystemUiMode to Edge-to-Edge
- Deprecate
ThemeData.dialogBackgroundColor
in favor ofDialogThemeData.backgroundColor
Released in Flutter 3.24
#- Navigator's page APIs breaking change
- Generic types in
PopScope
- Deprecate
ButtonBar
in favor ofOverflowBar
- New APIs for Android plugins that render to a
Surface
Released in Flutter 3.22
#- Deprecated API removed after v3.19
- Rename
MaterialState
toWidgetState
- Introduce new
ColorScheme
roles - Dropping support for Android KitKat
- Nullable
PageView.controller
- Rename
MemoryAllocations
toFlutterMemoryAllocations
Released in Flutter 3.19
#- Deprecated API removed after v3.16
- Migrate RawKeyEvent/RawKeyboard system to KeyEvent/HardwareKeyboard system
- Deprecate imperative apply of Flutter's Gradle plugins
- Default multitouch scrolling
- Accessibility traversal order of tooltip changed
Released in Flutter 3.16
#- Migrating to Material 3
- Migrate ShortcutActivator and ShortcutManager to KeyEvent system
- The
ThemeData.useMaterial3
property is now set to true by default - Deprecated API removed after v3.13
- Customize tabs alignment using the new
TabBar.tabAlignment
property - Deprecate
textScaleFactor
in favor ofTextScaler
- Android 14 nonlinear font scaling enabled
- Deprecate
describeEnum
and updateEnumProperty
to be type strict - Deprecated just-in-time navigation pop APIs for Android Predictive Back
- Deprecated
Paint.enableDithering
- Updated default text styles for menus
- Windows: External windows should notify Flutter engine of lifecycle changes
- Windows build path changed to add the target architecture
Released in Flutter 3.13
#- Added missing
dispose()
for some disposable objects in Flutter - Deprecated API removed after v3.10
- Added AppLifecycleState.hidden enum value
- Moved ReorderableListView's localized strings from material to widgets localizations
- Removed
ignoringSemantics
properties - Deprecated
RouteInformation.location
and its related APIs - Updated EditableText scroll into view behavior
- Migrate a Windows project to ensure the window is shown
- Updated
Checkbox.fillColor
behavior
Released in Flutter 3.10
#- Dart 3 changes in Flutter v3.10 and later
- Deprecated API removed after v3.7
- Insert content text input client
- Deprecated the window singleton
- Resolve the Android Java Gradle error
- Require one data variant for
ClipboardData
constructor - "Zone mismatch" message
Released in Flutter 3.7
#- Deprecated API removed after v3.3
- Replaced parameters for customizing context menus with a generic widget builder
- iOS FlutterViewController splashScreenView made nullable
- Migrate
of
to non-nullable return values, and addmaybeOf
- Removed RouteSettings.copyWith
- ThemeData's toggleableActiveColor property has been deprecated
- Migrate a Windows project to support dark title bars
Released in Flutter 3.3
#- Adding ImageProvider.loadBuffer
- Default PrimaryScrollController on Desktop
- Trackpad gestures can trigger GestureRecognizer
- Migrate a Windows project to set version information
Released in Flutter 3
#- Deprecated API removed after v2.10
- Migrate useDeleteButtonTooltip to deleteButtonTooltipMessage of Chips
- Page transitions replaced by ZoomPageTransitionsBuilder
Released in Flutter 2.10
#- Deprecated API removed after v2.5
- Raw images on Web uses correct origin and colors
- Required Kotlin version
- Scribble Text Input Client
Released in Flutter 2.5
#- Default drag scrolling devices
- Deprecated API removed after v2.2
- Change the enterText method to move the caret to the end of the input text
- GestureRecognizer cleanup
- Introducing package:flutter_lints
- Replace AnimationSheetBuilder.display with collate
- ThemeData's accent properties have been deprecated
- Transition of platform channel test interfaces to flutter_test package
- Using HTML slots to render platform views in the web
- Migrate a Windows project to the idiomatic run loop
Reverted change in 2.2
#The following breaking change was reverted in release 2.2:
- Network Policy on iOS and Android
- Introduced in version: 2.0.0
Reverted in version: 2.2.0
Released in Flutter 2.2
#Released in Flutter 2
#- Added BuildContext parameter to TextEditingController.buildTextSpan
- Android ActivityControlSurface attachToActivity signature change
- Android FlutterMain.setIsRunningInRobolectricTest testing API removed
- Clip behavior
- Deprecated API removed after v1.22
- Dry layout support for RenderBox
- Eliminating nullOk Parameters
- Material Chip button semantics
- SnackBars managed by the ScaffoldMessenger
- TextSelectionTheme migration
- Transition of platform channel test interfaces to flutter_test package
- Use maxLengthEnforcement instead of maxLengthEnforced
Released in Flutter 1.22
#- Android v1 embedding app and plugin creation deprecation
- Cupertino icons 1.0.0
- The new Form, FormField auto-validation API
Released in Flutter 1.20
#- Actions API revision
- Adding TextInputClient.currentAutofillScope property
- New Buttons and Button Themes
- Dialogs' Default BorderRadius
- More Strict Assertions in the Navigator and the Hero Controller Scope
- The Route Transition record and Transition delegate updates
- The RenderEditable needs to be laid out before hit testing
- Reversing the dependency between the scheduler and services layer
- Semantics Order of the Overlay Entries in Modal Routes
- showAutocorrectionPromptRect method added to TextInputClient
- TestWidgetsFlutterBinding.clock
- TextField requires MaterialLocalizations
Released in Flutter 1.17
#- Adding 'linux' and 'windows' to TargetPlatform enum
- Annotations return local position relative to object
- Container color optimization
- CupertinoTabBar requires Localizations parent
- Generic type of ParentDataWidget changed to ParentData
- ImageCache and ImageProvider changes
- ImageCache large images
- MouseTracker moved to rendering
- MouseTracker no longer attaches annotations
- Nullable CupertinoTheme.brightness
- Rebuild optimization for OverlayEntries and Routes
- Scrollable AlertDialog
- TestTextInput state reset
- TextInputClient currentTextEditingValue
- The forgetChild() method must call super
- The Route and Navigator refactoring
- FloatingActionButton and ThemeData's accent properties
Unless stated otherwise, the documentation on this site reflects the latest stable version of Flutter. Page last updated on 2024-11-01. View source or report an issue.