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
^^^^^^^^^^^要解决此问题,请通过升级 pubspec.yaml 文件中的约束来升级到 package:platform 的 3.1.0 或更高版本。
dependencies:
platform: ^3.1.0参考资料
相关 PR
时间线
#稳定版本: 2.10