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 更改
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 中棄用。
動畫的 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 已被移除
dart:core中的Platform.packageRootdart:isolate中的Isolate.packageRootpackage:platform中的Platform.packageRoot
這些 API 已在Dart 2.0中標記為棄用,並且在任何 Dart 2.x 版本中都無法正常工作。
遷移指南
這些 packageRoot API 已被一套新的 packageConfig API 取代,您應該遷移到這些 API。
dart:core中的Platform.packageConfigdart:isolate中的Isolate.packageConfigpackage:platform中的Platform.packageConfig
如果您正在使用 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
時間線
#穩定版本: 2.10