v3.7 后移除的已弃用 API
概述
#根据 Flutter 的弃用政策,在 3.7 稳定版发布后生命周期已结束的已弃用 API 已被移除。
所有受影响的 API 都已编译到此主源中,以协助迁移。同时还提供了一份快速参考表。
变更
#本节列出了按受影响类别的弃用内容。
GestureRecognizer.kind & 子类
#Flutter Fix 支持:是
GestureRecognizer.kind 在 v2.3 中被弃用。请改用 GestureRecognizer.supportedDevices。
此更改同样影响 GestureRecognizer 的所有子类。
EagerGestureRecognizerForcePressGestureRecognizerLongPressGestureRecognizerDragGestureRecognizerVerticalDragGestureRecognizerHorizontalDragGestureRecognizerMultiDragGestureRecognizerImmediateMultiDragGestureRecognizerHorizontalMultiDragGestureRecognizerVerticalMultiDragGestureRecognizerDelayedMultiDragGestureRecognizerDoubleTapGestureRecognizerMultiTapGestureRecognizerOneSequenceGestureRecognizerPrimaryPointerGestureRecognizerScaleGestureRecognizer
此更改允许识别手势的多个设备,而不是 kind 提供的单一选项。
迁移指南
迁移前的代码
var myRecognizer = GestureRecognizer(
kind: PointerDeviceKind.mouse,
);迁移后的代码
var myRecognizer = GestureRecognizer(
supportedDevices: <PointerDeviceKind>[ PointerDeviceKind.mouse ],
);参考资料
API 文档
GestureRecognizerEagerGestureRecognizerForcePressGestureRecognizerLongPressGestureRecognizerDragGestureRecognizerVerticalDragGestureRecognizerHorizontalDragGestureRecognizerMultiDragGestureRecognizerImmediateMultiDragGestureRecognizerHorizontalMultiDragGestureRecognizerVerticalMultiDragGestureRecognizerDelayedMultiDragGestureRecognizerDoubleTapGestureRecognizerMultiTapGestureRecognizerOneSequenceGestureRecognizerPrimaryPointerGestureRecognizerScaleGestureRecognizer
相关 PR
ThemeData 的 accentColor、accentColorBrightness、accentColorTextTheme、accentColorIconTheme 和 buttonColor
#Flutter Fix 支持:是
ThemeData 的 accentColor、accentColorBrightness、accentColorTextTheme、accentColorIconTheme 和 buttonColor 属性在 v2.3 中被弃用。
此更改使 ThemeData 与 Material Design 指南更好地对齐。它还通过依赖核心配色方案或单独的组件主题来实现所需的样式,从而提高了主题设置的清晰度。
框架不再使用 accentColorBrightness、accentColorTextTheme、accentColorIconTheme 和 buttonColor。应移除对此的引用。
ThemeData.accentColor 的用法应替换为 ThemeData.colorScheme.secondary。
迁移指南
#迁移前的代码
var myTheme = ThemeData(
//...
accentColor: Colors.blue,
//...
);
var color = myTheme.accentColor;迁移后的代码
var myTheme = ThemeData(
//...
colorScheme: ColorScheme(
//...
secondary:Colors.blue,
//...
),
//...
);
var color = myTheme.colorScheme.secondary;参考资料
API 文档
相关问题
相关 PR
弃用自
移除自
AppBar、SliverAppBar 和 AppBarTheme 更新
#Flutter Fix 支持:是
在 v2.4 中,对应用栏类及其主题进行了几项更改,以更好地与 Material Design 对齐。当时已弃用几项属性,现已被移除。
对于 AppBar、SliverAppBar 和 AppBarTheme
brightness已被移除,并由systemOverlayStyle替换。textTheme已被移除,并由toolbarTextStyle或titleTextStyle替换。- 可以移除
backwardsCompatibility,因为它是在这些属性上的临时迁移标志。
此外,AppBarTheme.color 已被移除,并由 AppBarTheme.backgroundColor 替换。
迁移指南
迁移前的代码
var toolbarTextStyle = TextStyle(...);
var titleTextStyle = TextStyle(...);
AppBar(
brightness: Brightness.light,
textTheme: TextTheme(
bodyMedium: toolbarTextStyle,
titleLarge: titleTextStyle,
)
backwardsCompatibility: true,
);
AppBarTheme(color: Colors.blue);迁移后的代码
var toolbarTextStyle = TextStyle(...);
var titleTextStyle = TextStyle(...);
AppBar(
systemOverlayStyle: SystemOverlayStyle(statusBarBrightness: Brightness.light),
toolbarTextStyle: toolbarTextStyle,
titleTextStyle: titleTextStyle,
);
AppBarTheme(backgroundColor: Colors.blue);参考资料
API 文档
相关问题
弃用自
移除自
SystemChrome.setEnabledSystemUIOverlays
#Flutter Fix 支持:是
在 v2.3 中,用于设置状态栏和导航栏等设备系统级别覆盖层的静态方法 SystemChrome.setEnabledSystemUIOverlays 被弃用,改为使用 SystemChrome.setEnabledSystemUIMode。
此更改允许设置与原生 Android 应用(如沉浸式全屏)匹配的常见全屏模式。
仍然可以通过 SystemUiMode.manual 手动设置覆盖层,而不是选择特定模式,这允许开发人员传递与以前相同的覆盖层列表。
迁移指南
迁移前的代码
SystemChrome.setEnabledSystemUIOverlays(<SystemUiOverlay>[
SystemUiOverlay.top,
SystemUiOverlay.bottom,
]);迁移后的代码
SystemChrome.setEnabledSystemUIMode(
SystemUiMode.manual,
overlays: <SystemUiOverlay>[
SystemUiOverlay.top,
SystemUiOverlay.bottom,
],
);参考资料
API 文档
相关问题
弃用自
移除自
SystemNavigator.routeUpdated
#Flutter Fix 支持:是
在 v2.3 中,SystemNavigator.routeUpdated 被弃用,改为使用 SystemNavigator.routeInformationUpdated。
该更改将更新引擎当前路由的两种方式合并为一种 API,如果创建了报告路由的 Navigator,则会单独选择单次入口历史记录模式。
迁移指南
迁移前的代码
SystemNavigator.routeUpdated(routeName: 'foo', previousRouteName: 'bar');迁移后的代码
SystemNavigator.routeInformationUpdated(location: 'foo');参考资料
API 文档
相关问题
弃用自
移除自
AnimatedSize.vsync
#Flutter Fix 支持:是
在 v2.2 中,AnimatedSize.vsync 被弃用。在 AnimatedSize 被转换为 StatefulWidget 且其 State 混入了 SingleTickerProviderStateMixin 后,此属性不再需要。此更改是为了修复内存泄漏。
应移除 vsync 的用法,因为 AnimatedSize 现在已处理此属性。
迁移指南
迁移前的代码
AnimatedSize(
vsync: this,
// ...
);迁移后的代码
AnimatedSize(
// ...
);参考资料
API 文档
弃用自
移除自
时间线
#稳定版:3.10