v3.10 后移除的已弃用 API
摘要
#根据 Flutter 的 弃用策略,在 3.10 稳定版发布后达到生命周期结束的已弃用 API 已被移除。
所有受影响的 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 规范保持一致。ColorScheme
的更新在 Material 3 的 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 指南的一部分进行的。主题系统的整体更新,包括移除 primaryColorBrightness
,在 Material 主题系统更新 设计文档中进行了更广泛的讨论。
迁移指南
迁移前的代码
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
也符合材料库中基于其状态配置小部件的约定,而不是枚举每个交互状态排列的属性。
迁移指南
迁移前的代码
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.addTime
TestWidgetsFlutterBinding.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 的最新稳定版本。页面上次更新于 2024-06-01。 查看源代码 或 报告问题。