MaterialState 重新命名為 WidgetState
概述
#MaterialState 及其相關 API 已從 Material 庫移出,並重命名為 WidgetState。
背景
#以前,MaterialState 提供了處理小部件可能具有的多種不同狀態(如“懸停”、“聚焦”和“停用”)的邏輯。由於此功能在 Material 庫之外也很有用,尤其是在基礎 Widgets 層和 Cupertino 中,因此決定將其移出 Material。作為此舉的一部分,並避免將來混淆,不同的 MaterialState 類已被重新命名為 WidgetState。兩者行為相同。
| 之前 | 現在 |
|---|---|
MaterialState | WidgetState |
MaterialStatePropertyResolver | WidgetStatePropertyResolver |
MaterialStateColor | WidgetStateColor |
MaterialStateMouseCursor | WidgetStateColorMouseCursor |
MaterialStateBorderSide | WidgetStateBorderSide |
MaterialStateOutlinedBorder | WidgetStateOutlinedBorder |
MaterialStateTextStyle | WidgetStateTextStyle |
MaterialStateProperty | WidgetStateProperty |
MaterialStatePropertyAll | WidgetStatePropertyAll |
MaterialStatesController | WidgetStatesController |
MaterialStateOutlineInputBorder 和 MaterialStateUnderlineInputBorder 類保留在 Material 庫中,沒有 WidgetState 對應項,因為它們特定於 Material 設計。
遷移指南
#提供了一個 Flutter fix 來幫助將 MaterialState 類遷移到 WidgetState。
要遷移,請將 MaterialState 替換為 WidgetState。
遷移前的程式碼
dart
MaterialState selected = MaterialState.selected;
final MaterialStateProperty<Color> backgroundColor;
class _MouseCursor extends MaterialStateMouseCursor{
const _MouseCursor(this.resolveCallback);
final MaterialPropertyResolver<MouseCursor?> resolveCallback;
@override
MouseCursor resolve(Set<MaterialState> states) => resolveCallback(states) ?? MouseCursor.uncontrolled;
}
BorderSide side = MaterialStateBorderSide.resolveWith((Set<MaterialState> states) {
if (states.contains(MaterialState.selected)) {
return const BorderSide(color: Colors.red);
}
return null;
});遷移後的程式碼
dart
WidgetState selected = WidgetState.selected;
final WidgetStateProperty<Color> backgroundColor;
class _MouseCursor extends WidgetStateMouseCursor{
const _MouseCursor(this.resolveCallback);
final WidgetPropertyResolver<MouseCursor?> resolveCallback;
@override
MouseCursor resolve(Set<WidgetState> states) => resolveCallback(states) ?? MouseCursor.uncontrolled;
}
BorderSide side = WidgetStateBorderSide.resolveWith((Set<WidgetState> states) {
if (states.contains(WidgetState.selected)) {
return const BorderSide(color: Colors.red);
}
return null;
});時間線
#已於版本:3.21.0-11.0.pre 落地
穩定版本: 3.22.0
參考資料
#相關問題
相關 PR