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 已被移除
Platform.packageRoot
在dart:core
中Isolate.packageRoot
在dart:isolate
中Platform.packageRoot
在package:platform
中
这些 API 在 Dart 2.0 中被标记为已弃用,并且在任何 Dart 2.x 版本中都无法正常工作。
迁移指南
这些 packageRoot
API 已被一组新的 packageConfig
API 替换,您应该迁移到这些 API。
Platform.packageConfig
在dart:core
中Isolate.packageConfig
在dart:isolate
中Platform.packageConfig
在package:platform
中
如果您正在使用 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 的最新稳定版本。页面上次更新于 2024-06-01。 查看源代码 或 报告问题.