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 變更:
FormFormFieldDropdownButtonFormFieldTextFormField
遷移指南
遷移前的程式碼:
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 被標記為已淘汰。
動畫 (Animation) 的 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 被標記為已淘汰(Deprecated)。
針對這些所有使用情境,應改用 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 屬性。這項遷移可提升文字縮放效果,並為 BottomNavigationBarItem
在 BottomNavigationBar 的情境下提供內建的 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:
packageRoot 在 dart:core、dart:isolate 和 package:platform
中
#
以下 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:
- 已從 Dart 函式庫中移除,詳見 #47769
-
已從
package:platform中移除,詳見 PR #38 -
Flutter 已更新為使用
package:platform3.1.0,詳見 PR #94603
時程
#在穩定版釋出:2.10
Unless stated otherwise, the documentation on this site reflects Flutter 3.44.0. Page last updated on 2026-06-14. View source or report an issue.