v3.7 后移除的已弃用 API
概述
#根据 Flutter 的 弃用策略,在 v3.7 稳定版发布后达到生命周期结束的已弃用 API 已被移除。
所有受影响的 API 都已汇总到此主要资源中,以帮助迁移。另提供了一份快速参考表。
变更
#本节列出了按受影响类别的弃用内容。
GestureRecognizer.kind
及子类
#Flutter Fix 支持:是
GestureRecognizer.kind
在 v2.3 中被弃用。请改用 GestureRecognizer.supportedDevices
。
此更改也影响 GestureRecognizer
的所有子类
EagerGestureRecognizer
ForcePressGestureRecognizer
LongPressGestureRecognizer
DragGestureRecognizer
VerticalDragGestureRecognizer
HorizontalDragGestureRecognizer
MultiDragGestureRecognizer
ImmediateMultiDragGestureRecognizer
HorizontalMultiDragGestureRecognizer
VerticalMultiDragGestureRecognizer
DelayedMultiDragGestureRecognizer
DoubleTapGestureRecognizer
MultiTapGestureRecognizer
OneSequenceGestureRecognizer
PrimaryPointerGestureRecognizer
ScaleGestureRecognizer
此更改允许为手势识别多个设备,而不是 kind
提供的单一选项。
迁移指南
迁移前的代码
var myRecognizer = GestureRecognizer(
kind: PointerDeviceKind.mouse,
);
迁移后的代码
var myRecognizer = GestureRecognizer(
supportedDevices: <PointerDeviceKind>[ PointerDeviceKind.mouse ],
);
参考资料
API 文档
GestureRecognizer
EagerGestureRecognizer
ForcePressGestureRecognizer
LongPressGestureRecognizer
DragGestureRecognizer
VerticalDragGestureRecognizer
HorizontalDragGestureRecognizer
MultiDragGestureRecognizer
ImmediateMultiDragGestureRecognizer
HorizontalMultiDragGestureRecognizer
VerticalMultiDragGestureRecognizer
DelayedMultiDragGestureRecognizer
DoubleTapGestureRecognizer
MultiTapGestureRecognizer
OneSequenceGestureRecognizer
PrimaryPointerGestureRecognizer
ScaleGestureRecognizer
相关 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
,则该 API 会单独选择单入口历史模式。
迁移指南
迁移前的代码
SystemNavigator.routeUpdated(routeName: 'foo', previousRouteName: 'bar');
迁移后的代码
SystemNavigator.routeInformationUpdated(location: 'foo');
参考资料
API 文档
相关问题
弃用于
移除于
AnimatedSize.vsync
#Flutter Fix 支持:是
在 v2.2 中,AnimatedSize.vsyc
被弃用。在 AnimatedSize
转换为一个 StatefulWidget
之后,其 State
混入了 SingleTickerProviderStateMixin
,此属性不再需要。此更改是为了修复内存泄漏。
应移除 vsync
的使用,因为 AnimatedSize
现在处理此属性。
迁移指南
迁移前的代码
AnimatedSize(
vsync: this,
// ...
);
迁移后的代码
AnimatedSize(
// ...
);
参考资料
API 文档
弃用于
移除于
时间线
#稳定版发布于:3.10