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 更改:
Form
FormField
DropdownButtonFormField
TextFormField
迁移指南
迁移前的代码:
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.packageRoot
dart:isolate
中的Isolate.packageRoot
package:platform
中的Platform.packageRoot
这些 API 在 Dart 2.0 中被标记为已弃用,并且在任何 Dart 2.x 版本中都不能正常工作。
迁移指南
这些 packageRoot
API 已被一组新的 packageConfig
API 替换,您应该迁移到这些新的 API。
dart:core
中的Platform.packageConfig
dart:isolate
中的Isolate.packageConfig
package: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:platform
3.1.0
时间线
#稳定版发布:2.10
除非另有说明,否则本网站上的文档反映的是 Flutter 的最新稳定版本。页面最后更新于 2025-01-30。 查看源代码 或 报告问题。