概述

#

根據 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
                  ^^^^^^^^^^^

要解決此問題,請透過升級 pubspec.yaml 檔案中的約束來升級到 package:platform3.1.0 或更高版本。

yaml
dependencies:
  platform: ^3.1.0

參考資料

相關 PR

  • 已從 Dart 庫中#47769移除
  • 已從 package:platformPR #38移除
  • Flutter 已在PR #94603中更新為使用 package:platform 3.1.0

時間線

#

穩定版本: 2.10