v2.5 後移除的已棄用 API
摘要
#依照 Flutter 的棄用政策,在 2.5 穩定版本之後達到生命週期終點的已棄用 API 已被移除。
所有受影響的 API 都已編譯到此主要來源中,以協助遷移。同時也提供一份快速參考表。
變更
#本節列出按受影響類別分類的棄用項目。
Form
及相關類別的 autovalidate
屬性
#Flutter Fix 支援:是
autovalidate
已在 v1.19 中棄用。
請改用 autovalidateMode
。將 autovalidate
為 true 的地方替換為 AutovalidateMode.always
。將 autovalidate
為 false 的地方替換為 AutovalidateMode.disabled
。此變更允許指定超出原始二元選擇的更多行為,並新增 AutovalidateMode.onUserInteraction
作為額外選項。
以下類別皆有相同的 API 變更
Form
FormField
DropdownButtonFormField
TextFormField
遷移指南
遷移前的程式碼
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 中棄用。
動畫的 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 中棄用。
對於所有這些使用案例,應改用 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
屬性。此遷移允許更好的文字縮放,並在 BottomNavigationBar
的上下文中的 BottomNavigationBarItem
提供內建的 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
dart:core
、dart:isolate
和 package:platform
中的 packageRoot
#以下 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
^^^^^^^^^^^
要解決此問題,請透過升級 pubspec.yaml
檔案中的約束條件來升級到 package:platform
的 3.1.0
或更高版本
dependencies:
platform: ^3.1.0
參考資料
相關 PR
- 從 Dart 程式庫中移除於 #47769
- 從
package:platform
中移除於 PR #38 - 更新 Flutter 以在 PR #94603 中使用
package:platform
3.1.0
時間軸 (Timeline)
#穩定版本:2.10
除非另有說明,否則本網站上的文件反映了 Flutter 的最新穩定版本。頁面最後更新於 2024-06-01。 檢視原始碼 或 回報問題。