v3.10 后移除的已弃用 API
摘要
#根据 Flutter 的弃用策略,在 3.10 稳定版本发布后达到生命周期结束的已弃用 API 已被移除。
所有受影响的 API 都已在此主要资源中进行编译,以帮助迁移。还有一个快速参考表可用。
变更
#本节列出了按包和受影响类列出的弃用项。
ThemeData.fixTextFieldOutlineLabel
#包:flutter Flutter Fix 支持:是
ThemeData.fixTextFieldOutlineLabel 在 v2.5 中已弃用。可以移除对此属性的引用。
fixTextFieldOutlineLabel 是一个临时的迁移标志,允许用户平滑地迁移到新的行为,而不是遇到硬中断。在弃用之前,此属性已从文本字段标签的修复程序转换为新的默认值。
迁移指南
迁移前的代码:
var themeData = ThemeData(
fixTextFieldOutlineLabel: true,
);迁移后的代码:
var themeData = ThemeData(
);参考
API 文档:
相关的 PR:
OverscrollIndicatorNotification.disallowGlow
#包:flutter Flutter Fix 支持:是
OverscrollIndicatorNotification.disallowGlow 在 v2.5 中已弃用。替代方法是 disallowIndicator 方法。
disallowIndicator 是在引入 StretchingOverscrollIndicator 时作为原始方法的替代方法创建的。以前,GlowingOverscrollIndicator 是唯一一种分派 OverscrollIndicatorNotification 的类型,因此该方法已更新以更好地反映多种类型的指示器。
迁移指南
迁移前的代码:
bool _handleOverscrollIndicatorNotification(OverscrollIndicatorNotification notification) {
notification.disallowGlow();
return false;
}迁移后的代码:
bool _handleOverscrollIndicatorNotification(OverscrollIndicatorNotification notification) {
notification.disallowIndicator();
return false;
}参考
API 文档:
相关的 PR:
ColorScheme primaryVariant & secondaryVariant
#包:flutter Flutter Fix 支持:是
ColorScheme.primaryVariant 和 ColorScheme.secondaryVariant 在 v2.6 中已弃用。替换项分别是 ColorScheme.primaryContainer 和 ColorScheme.secondaryContainer。
这些更改是为了与更新的 ColorScheme 的 Material Design 规范保持一致。Material 3 的 ColorScheme 设计文档更全面地介绍了对 ColorScheme 的更新。
迁移指南
迁移前的代码:
var colorScheme = ColorScheme(
primaryVariant: Colors.blue,
secondaryVariant: Colors.amber,
);
var primaryColor = colorScheme.primaryVariant;
var secondaryColor = colorScheme.secondaryVariant;迁移后的代码:
var colorScheme = ColorScheme(
primaryContainer: Colors.blue,
secondaryContainer: Colors.amber,
);
var primaryColor = colorScheme.primaryContainer;
var secondaryColor = colorScheme.secondaryContainer;参考
设计文档:
API 文档:
相关的 PR:
ThemeData.primaryColorBrightness
#包:flutter Flutter Fix 支持:是
ThemeData.primaryColorBrightness 在 v2.6 中已弃用,此后框架未再使用它。应移除引用。如果未明确提供 ThemeData.brightness,则现在从 ThemeData.primaryColor 推断出 Brightness。
此更改是作为对 Theme 的更新的一部分进行的,以匹配新的 Material Design 指南。Material 主题系统更新 设计文档更全面地讨论了主题系统的整体更新,包括 primaryColorBrightness 的移除。
迁移指南
迁移前的代码:
var themeData = ThemeData(
primaryColorBrightness: Brightness.dark,
);迁移后的代码:
var themeData = ThemeData(
);参考
设计文档:
API 文档:
相关的 PR:
RawScrollbar 及其子类更新
#包:flutter Flutter Fix 支持:是
RawScrollbar、Scrollbar、ScrollbarThemeData 和 CupertinoScrollbar 的 isAlwaysShown 属性在 v2.9 中已弃用。所有情况下的替换项都是 thumbVisibility。
进行此更改是因为 isAlwaysShown 始终指的是滚动条拇指。随着滚动条轨迹的添加以及其可见性响应鼠标悬停和拖动的各种配置,我们重命名了此属性以获得更清晰的 API。
此外,Scrollbar.hoverThickness 也在 v2.9 中被弃用。它的替换项是 MaterialStateProperty ScrollbarThemeData.thickness。
进行此更改是为了允许 Scrollbar 的厚度响应所有类型的状态,包括但不限于悬停。使用 MaterialStateProperties 也符合 material 库中基于其状态配置小部件的约定,而不是枚举每种交互状态的排列属性。
迁移指南
迁移前的代码:
var rawScrollbar = RawScrollbar(
isAlwaysShown: true,
);
var scrollbar = Scrollbar(
isAlwaysShown: true,
hoverThickness: 15.0,
);
var cupertinoScrollbar = CupertinoScrollbar(
isAlwaysShown: true,
);
var scrollbarThemeData = ScrollbarThemeData(
isAlwaysShown: true,
);迁移后的代码:
var rawScrollbar = RawScrollbar(
thumbVisibility: true,
);
var scrollbar = Scrollbar(
thumbVisibility: true,
);
var cupertinoScrollbar = CupertinoScrollbar(
thumbVisibility: true,
);
var scrollbarThemeData = ScrollbarThemeData(
thumbVisibility: true,
thickness: MaterialStateProperty.resolveWith((Set<MaterialState> states) {
return states.contains(MaterialState.hovered) ? null : 15.0;
}),
);参考
API 文档:
相关的 PR:
AnimationSheetBuilder display & sheetSize
#包:flutter_test Flutter Fix 支持:是
AnimationSheetBuilder 的 display 和 sheetSize 方法在 v2.3 中已弃用。替换项是 collate 方法。
AnimationSheetBuilder 的输出步骤以前需要调用这两个方法,但现在通过对 collate 的单次调用进行简化。
collate 函数直接将图像放在一起并异步返回图像。它需要更少的样板代码,并且在不影响质量的情况下输出更小的图像。
迁移指南
迁移前的代码:
final AnimationSheetBuilder animationSheet = AnimationSheetBuilder(
frameSize: const Size(40, 40)
);
await tester.pumpFrames(animationSheet.record(
const Directionality(
textDirection: TextDirection.ltr,
child: Padding(
padding: EdgeInsets.all(4),
child: CircularProgressIndicator(),
),
),
), const Duration(seconds: 2));
tester.binding.setSurfaceSize(animationSheet.sheetSize());
final Widget display = await animationSheet.display();
await tester.pumpWidget(display);
await expectLater(
find.byWidget(display),
matchesGoldenFile('material.circular_progress_indicator.indeterminate.png'),
);迁移后的代码:
final AnimationSheetBuilder animationSheet = AnimationSheetBuilder(
frameSize: const Size(40, 40)
);
await tester.pumpFrames(animationSheet.record(
const Directionality(
textDirection: TextDirection.ltr,
child: Padding(
padding: EdgeInsets.all(4),
child: CircularProgressIndicator(),
),
),
), const Duration(seconds: 2));
await expectLater(
animationSheet.collate(20),
matchesGoldenFile('material.circular_progress_indicator.indeterminate.png'),
);参考
API 文档:
相关的 PR:
flutter_test 超时逻辑
#包:flutter_test Flutter Fix 支持:否
以下与测试中超时逻辑相关的 API 在 v2.6 中已弃用。没有替代项,应移除引用,除了 testWidgets 的 initialTimeout 参数,它被 timeout 替换。
TestWidgetsFlutterBinding.addTimeTestWidgetsFlutterBinding.runAsync方法 -additionalTime参数TestWidgetsFlutterBinding.runTest方法 -timeout参数AutomatedTestWidgetsFlutterBinding.runTest方法 -timeout参数LiveTestWidgetsFlutterBinding.runTest方法 -timeout参数testWidgets方法 -initialTime参数
发现这些会导致测试不稳定,并且测试客户未使用它们。
自弃用以来,这些参数的使用对测试没有影响,因此移除引用不会对现有代码库产生影响。
迁移指南
迁移前的代码:
testWidgets('Test', (_) {}, initialTimeout: Duration(seconds: 5));迁移后的代码:
testWidgets('Test', (_) {}, timeout: Timeout(Duration(seconds: 5)));参考
API 文档:
相关的 PR:
时间线
#稳定版本:3.13.0
除非另有说明,否则本网站上的文档反映的是 Flutter 的最新稳定版本。页面最后更新于 2025-01-30。 查看源代码 或 报告问题。