Skip to main content

v2.5 之後移除的已棄用 API

在達到生命週期終止後,以下已棄用的 API 已從 Flutter 中移除。

摘要

#

根據 Flutter 的 棄用政策, 在 2.5 穩定版發佈後達到生命週期終止的 已棄用 API 已被移除。

所有受影響的 API 已彙整於此 主要來源,以協助遷移。 同時也提供了快速參考表

變更內容

#

本節依受影響的類別列出棄用項目。


autovalidate(屬於 Form 及相關類別)

#

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 被標記為已淘汰。

動畫 (Animation) 的 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:

  • 已在 #56413 標記為已淘汰(Deprecated)
  • 已在 #90293 移除

AndroidViewController 及其子類別的 id

#

Flutter Fix 支援:是

AndroidViewControllerTextureAndroidViewControllerSurfaceAndroidViewControllerid 已於 v1.20 被標記為已淘汰(Deprecated)。

針對這些所有使用情境,應改用 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:


BlacklistingTextInputFormatter & WhitelistingTextInputFormatter

#

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 屬性。這項遷移可提升文字縮放效果,並為 BottomNavigationBarItemBottomNavigationBar 的情境下提供內建的 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:


packageRootdart:coredart:isolatepackage:platform

#

以下 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:

  • 已從 Dart 函式庫中移除,詳見 #47769
  • 已從 package:platform 中移除,詳見 PR #38
  • Flutter 已更新為使用 package:platform 3.1.0,詳見 PR #94603

時程

#

在穩定版釋出:2.10