跳至主要內容

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


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 屬性。此遷移允許更好的文字縮放,並在 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:platform 中移除於 PR #38
  • 更新 Flutter 以在 PR #94603 中使用 package:platform 3.1.0

時間軸 (Timeline)

#

穩定版本:2.10