跳至主要内容

v2.5 后移除的已弃用 API

摘要

#

根据 Flutter 的 弃用策略,在 2.5 稳定版发布后已达到生命周期结束的已弃用 API 已被移除。

所有受影响的 API 都已编译到此主要来源中,以帮助迁移。一个 快速参考表 也可供使用。

变更

#

本节按受影响的类列出弃用情况。


#

Flutter Fix 支持:是

autovalidate 在 v1.19 中被弃用。

请使用 autovalidateMode 代替。如果 autovalidate 为 true,则替换为 AutovalidateMode.always。如果 autovalidate 为 false,则替换为 AutovalidateMode.disabled。此更改允许指定更多行为,超出原始二元选择,并添加 AutovalidateMode.onUserInteraction 作为附加选项。

以下所有类都具有相同的 API 变更

  • Form
  • FormField
  • DropdownButtonFormField
  • TextFormField

迁移指南

提供深入的迁移指南

迁移前的代码

dart
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);

迁移后的代码

dart
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 支持:否

FloatingHeaderSnapConfigurationTickerProvider vsync 属性在 v1.19 中被弃用。

动画的 vsync 应改为使用 SliverPersistentHeaderDelegate.vsync 指定。

迁移指南

迁移前的代码

dart
class MySliverPersistentHeaderDelegate extends SliverPersistentHeaderDelegate {
  FloatingHeaderSnapConfiguration? get snapConfiguration => FloatingHeaderSnapConfiguration(vsync: myTickerProvider);
}

迁移后的代码

dart
class MySliverPersistentHeaderDelegate extends SliverPersistentHeaderDelegate {
  FloatingHeaderSnapConfiguration? get snapConfiguration => FloatingHeaderSnapConfiguration();
  TickerProvider? get vsync => myTickerProvider;
}

参考

设计文档

API 文档

相关问题

相关 PR


AndroidViewController 及其子类的 id

#

Flutter Fix 支持:是

AndroidViewControllerTextureAndroidViewControllerSurfaceAndroidViewControllerid 在 v1.20 中被弃用。

对于所有这些用例,都应使用 viewId 代替。

迁移指南

迁移前的代码

dart
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;

迁移后的代码

dart
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


BlacklistingTextInputFormatterWhitelistingTextInputFormatter

#

Flutter Fix 支持:否

BlacklistingTextInputFormatterWhitelistingTextInoutFormatter 的整个类在 v1.20 中被弃用。

它们的功能已重写到一个名为 FilteringTextInputFormatter 的单一类中。

迁移指南

迁移前的代码

dart
formatter = BlacklistingTextInputFormatter(pattern, replacementString: 'replacedPattern');
formatter = BlacklistingTextInputFormatter.singleLineFormatter;
pattern = formatter.blacklistedPattern;
formatter = WhitelistingTextInputFormatter(pattern);
formatter = WhitelistingTextInputFormatter.digitsOnly;
pattern = formatter.whitelistedPattern;

迁移后的代码

dart
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 支持:是

BottomNavigationBarItemtitle 在 v1.19 中被弃用。应改用 label 属性。此迁移允许更好的文本缩放,并在 BottomNavigationBar 上下文中为 BottomNavigationBarItem 提供内置的 Tooltip

迁移指南

提供深入的迁移指南

迁移前的代码

dart
const BottomNavigationBarItem bottomNavigationBarItem = BottomNavigationBarItem(title: myTitle);
const BottomNavigationBarItem bottomNavigationBarItem = BottomNavigationBarItem();
bottomNavigationBarItem.title;

迁移后的代码

dart
const BottomNavigationBarItem bottomNavigationBarItem = BottomNavigationBarItem(label: myTitle);
const BottomNavigationBarItem bottomNavigationBarItem = BottomNavigationBarItem();
bottomNavigationBarItem.label;

参考

设计文档

API 文档

相关 PR


dart:coredart:isolatepackage:platform 中的 packageRoot

#

以下 API 已被移除

这些 API 在 Dart 2.0 中被标记为已弃用,并且在任何 Dart 2.x 版本中都无法正常工作。

迁移指南

这些 packageRoot API 已被一组新的 packageConfig API 替换,您应该迁移到这些 API。

如果您正在使用 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 文件中升级约束

yaml
dependencies:
  platform: ^3.1.0

参考

相关 PR

  • #47769 中从 Dart 库中移除
  • PR #38 中从 package:platform 中移除
  • PR #94603 中更新 Flutter 以使用 package:platform 3.1.0

时间线

#

稳定版发布:2.10