v2.5 后移除的已弃用 API
摘要
#根据 Flutter 的弃用策略,在 2.5 稳定版之后达到生命周期结束的已弃用 API 已被移除。
所有受影响的 API 都已编译到此主要资源中,以帮助迁移。还提供了一个快速参考表。
变更
#本节按受影响的类列出弃用情况。
Form 及相关类的 autovalidate
#Flutter Fix 支持:是
autovalidate 在 v1.19 中已弃用。
请改用 autovalidateMode。 如果 autovalidate 为 true,则替换为 AutovalidateMode.always。 如果 autovalidate 为 false,则替换为 AutovalidateMode.disabled。 此更改允许指定超出原始二元选择的更多行为,并添加 AutovalidateMode.onUserInteraction 作为附加选项。
以下所有类都具有相同的 API 更改:
FormFormFieldDropdownButtonFormFieldTextFormField
迁移指南
迁移前的代码:
const Form form = Form(autovalidate: true);
const Form form = Form(autovalidate: false);
final autoMode = form.autovalidate;
const FormField formField = FormField(autovalidate: true);
const FormField formField = FormField(autovalidate: false);
final autoMode = formField.autovalidate;
const TextFormField textFormField = TextFormField(autovalidate: true);
const TextFormField textFormField = TextFormField(autovalidate: false);
const DropdownButtonFormField dropDownButtonFormField = DropdownButtonFormField(autovalidate: true);
const DropdownButtonFormField dropdownButtonFormField = DropdownButtonFormField(autovalidate: false);迁移后的代码:
const Form form = Form(autovalidateMode: AutovalidateMode.always);
const Form form = Form(autovalidateMode: AutovalidateMode.disabled);
final autoMode = form.autovalidateMode;
const FormField formField = FormField(autovalidateMode: AutovalidateMode.always);
const FormField formField = FormField(autovalidateMode: AutovalidateMode.disabled);
final autoMode = formField.autovalidateMode;
const TextFormField textFormField = TextFormField(autovalidateMode: AutovalidateMode.always);
const TextFormField textFormField = TextFormField(autovalidateMode: AutovalidateMode.disabled);
const DropdownButtonFormField dropDownButtonFormField = DropdownButtonFormField(autovalidateMode: AutovalidateMode.always);
const DropdownButtonFormField dropdownButtonFormField = DropdownButtonFormField(autovalidateMode: AutovalidateMode.disabled);参考
API 文档:
相关问题:
相关 PR:
FloatingHeaderSnapConfiguration.vsync
#Flutter Fix 支持:否
FloatingHeaderSnapConfiguration 的 TickerProvider vsync 属性在 v1.19 中已弃用。
动画的 vsync 应改用 SliverPersistentHeaderDelegate.vsync 指定。
迁移指南
迁移前的代码:
class MySliverPersistentHeaderDelegate extends SliverPersistentHeaderDelegate {
FloatingHeaderSnapConfiguration? get snapConfiguration => FloatingHeaderSnapConfiguration(vsync: myTickerProvider);
}迁移后的代码:
class MySliverPersistentHeaderDelegate extends SliverPersistentHeaderDelegate {
FloatingHeaderSnapConfiguration? get snapConfiguration => FloatingHeaderSnapConfiguration();
TickerProvider? get vsync => myTickerProvider;
}参考
设计文档:
API 文档:
相关问题:
相关 PR:
AndroidViewController 及子类的 id
#Flutter Fix 支持:是
AndroidViewController、TextureAndroidViewController 和 SurfaceAndroidViewController 的 id 在 v1.20 中已弃用。
对于所有这些用例,都应改用 viewId。
迁移指南
迁移前的代码:
final SurfaceAndroidViewController surfaceController = SurfaceAndroidViewController(
viewId: 10,
viewType: 'FixTester',
layoutDirection: TextDirection.ltr,
);
int viewId = surfaceController.id;
final SurfaceAndroidViewController surfaceController = SurfaceAndroidViewController(
error: '',
);
final TextureAndroidViewController textureController = TextureAndroidViewController(
error: '',
);
final TextureAndroidViewController textureController = TextureAndroidViewController(
viewId: 10,
viewType: 'FixTester',
layoutDirection: TextDirection.ltr,
);
viewId = textureController.id;迁移后的代码:
final SurfaceAndroidViewController surfaceController = SurfaceAndroidViewController(
viewId: 10,
viewType: 'FixTester',
layoutDirection: TextDirection.ltr,
);
int viewId = surfaceController.viewId;
final SurfaceAndroidViewController surfaceController = SurfaceAndroidViewController(
error: '',
);
final TextureAndroidViewController textureController = TextureAndroidViewController(
error: '',
);
final TextureAndroidViewController textureController = TextureAndroidViewController(
viewId: 10,
viewType: 'FixTester',
layoutDirection: TextDirection.ltr,
);
viewId = textureController.viewId;参考
设计文档:
API 文档:
相关问题:
相关 PR:
BlacklistingTextInputFormatter 及 WhitelistingTextInputFormatter
#Flutter Fix 支持:否
BlacklistingTextInputFormatter 和 WhitelistingTextInoutFormatter 的整个类在 v1.20 中已弃用。
它们的功能已重写为单个类 FilteringTextInputFormatter。
迁移指南
迁移前的代码:
formatter = BlacklistingTextInputFormatter(pattern, replacementString: 'replacedPattern');
formatter = BlacklistingTextInputFormatter.singleLineFormatter;
pattern = formatter.blacklistedPattern;
formatter = WhitelistingTextInputFormatter(pattern);
formatter = WhitelistingTextInputFormatter.digitsOnly;
pattern = formatter.whitelistedPattern;迁移后的代码:
formatter = FilteringTextInputFormatter.deny(pattern, replacementString: 'replacedPattern');
formatter = FilteringTextInputFormatter.singleLineFormatter;
pattern = formatter.filterPattern;
formatter = FilteringTextInputFormatter.allow(pattern);
formatter = FilteringTextInputFormatter.digitsOnly;
pattern = formatter.filterPattern;参考
API 文档:
相关 PR:
BottomNavigationBarItem.title
#Flutter Fix 支持:是
BottomNavigationBarItem 的 title 在 v1.19 中已弃用。 应改用 label 属性。此迁移允许更好的文本缩放,并在 BottomNavigationBar 的上下文中为 BottomNavigationBarItem 提供内置的 Tooltip。
迁移指南
迁移前的代码:
const BottomNavigationBarItem bottomNavigationBarItem = BottomNavigationBarItem(title: myTitle);
const BottomNavigationBarItem bottomNavigationBarItem = BottomNavigationBarItem();
bottomNavigationBarItem.title;迁移后的代码:
const BottomNavigationBarItem bottomNavigationBarItem = BottomNavigationBarItem(label: myTitle);
const BottomNavigationBarItem bottomNavigationBarItem = BottomNavigationBarItem();
bottomNavigationBarItem.label;参考
设计文档:
API 文档:
相关 PR:
dart:core、dart:isolate 和 package:platform 中的 packageRoot
#以下 API 已被移除:
dart:core中的Platform.packageRootdart:isolate中的Isolate.packageRootpackage:platform中的Platform.packageRoot
这些 API 在 Dart 2.0 中被标记为已弃用,并且在任何 Dart 2.x 版本中都不能正常工作。
迁移指南
这些 packageRoot API 已被一组新的 packageConfig API 替换,您应该迁移到这些新的 API。
dart:core中的Platform.packageConfigdart:isolate中的Isolate.packageConfigpackage:platform中的Platform.packageConfig
如果您使用的是 package:platform 包,请注意,无论您是否使用 packageRoot API,该包的旧版本都不兼容 Dart 2.16 及更高版本,因为它们依赖于现在已移除的 packageRoot API。尝试运行您的应用程序时,您可能会看到类似这样的错误:
../../.pub-cache/hosted/pub.dartlang.org/platform-3.0.0/
lib/src/interface/local_platform.dart:46:19:
Error: Member not found: 'packageRoot'.
io.Platform.packageRoot; // ignore: deprecated_member_use
^^^^^^^^^^^要解决此问题,请将 package:platform 升级到 3.1.0 或更高版本,方法是升级 pubspec.yaml 文件中的约束:
dependencies:
platform: ^3.1.0参考
相关 PR:
- 在 #47769 中从 Dart 库中移除
- 在 PR #38 中从
package:platform中移除 - 在 PR #94603 中更新 Flutter 以使用
package:platform3.1.0
时间线
#稳定版发布:2.10
除非另有说明,否则本网站上的文档反映的是 Flutter 的最新稳定版本。页面最后更新于 2025-01-30。 查看源代码 或 报告问题。