v3.10 後已移除棄用的 API
概述
#根據 Flutter 的棄用策略,已於 3.10 穩定版釋出後生命週期結束的棄用 API 已被移除。
所有受影響的 API 都已彙集在此處,以協助遷移。同時還提供了一個快速參考表。
變更
#本節按軟體包和受影響的類列出了棄用項。
ThemeData.fixTextFieldOutlineLabel
#軟體包:flutter Flutter Fix 支援:是
ThemeData.fixTextFieldOutlineLabel 在 v2.5 中已棄用。可以移除對此屬性的引用。
fixTextFieldOutlineLabel 是一個臨時的遷移標誌,允許使用者平滑地遷移到新的行為,而不是遇到硬性中斷。在棄用之前,此屬性已從文字欄位標籤的修復遷移到新的預設值。
遷移指南
遷移前的程式碼
var themeData = ThemeData(
fixTextFieldOutlineLabel: true,
);遷移後的程式碼
var themeData = ThemeData(
);參考資料
API 文件
相關 PR
OverscrollIndicatorNotification.disallowGlow
#軟體包:flutter Flutter Fix 支援:是
OverscrollIndicatorNotification.disallowGlow 在 v2.5 中已棄用。替代方法是 disallowIndicator 方法。
引入 StretchingOverscrollIndicator 時,建立了 disallowIndicator 作為原始方法的替代。以前,GlowingOverscrollIndicator 是唯一分發 OverscrollIndicatorNotification 的型別,因此該方法已更新,以更好地反映多種指示器型別。
遷移指南
遷移前的程式碼
bool _handleOverscrollIndicatorNotification(OverscrollIndicatorNotification notification) {
notification.disallowGlow();
return false;
}遷移後的程式碼
bool _handleOverscrollIndicatorNotification(OverscrollIndicatorNotification notification) {
notification.disallowIndicator();
return false;
}參考資料
API 文件
相關 PR
ColorScheme primaryVariant & secondaryVariant
#軟體包:flutter Flutter Fix 支援:是
ColorScheme.primaryVariant 和 ColorScheme.secondaryVariant 在 v2.6 中已棄用。它們分別被 ColorScheme.primaryContainer 和 ColorScheme.secondaryContainer 替代。
這些更改是為了與更新的 Material Design 規範對 ColorScheme 的要求保持一致。關於 ColorScheme 的更新在Material 3 的 ColorScheme 設計文件中有更詳細的介紹。
遷移指南
遷移前的程式碼
var colorScheme = ColorScheme(
primaryVariant: Colors.blue,
secondaryVariant: Colors.amber,
);
var primaryColor = colorScheme.primaryVariant;
var secondaryColor = colorScheme.secondaryVariant;遷移後的程式碼
var colorScheme = ColorScheme(
primaryContainer: Colors.blue,
secondaryContainer: Colors.amber,
);
var primaryColor = colorScheme.primaryContainer;
var secondaryColor = colorScheme.secondaryContainer;參考資料
設計文件
API 文件
相關 PR
ThemeData.primaryColorBrightness
#軟體包:flutter Flutter Fix 支援:是
ThemeData.primaryColorBrightness 在 v2.6 中已棄用,並且自那時起框架就未使用過它。應移除相關引用。現在,如果未顯式提供 ThemeData.brightness,則 Brightness 會從 ThemeData.primaryColor 推斷出來。
此更改是為了更新 Theme 以匹配新的 Material Design 指南。關於 theaming 系統的整體更新,包括 primaryColorBrightness 的移除,在Material 主題系統更新設計文件中有更詳細的討論。
遷移指南
遷移前的程式碼
var themeData = ThemeData(
primaryColorBrightness: Brightness.dark,
);遷移後的程式碼
var themeData = ThemeData(
);參考資料
設計文件
API 文件
相關 PR
RawScrollbar & 子類更新
#軟體包:flutter Flutter Fix 支援:是
RawScrollbar、Scrollbar、ScrollbarThemeData 和 CupertinoScrollbar 的 isAlwaysShown 屬性在 v2.9 中已棄用。在所有情況下,替代屬性都是 thumbVisibility。
此更改之所以做出,是因為 isAlwaysShown 始終指向捲軸的 thumb。隨著捲軸 track 的新增,以及其在響應滑鼠懸停和拖動時的可見性配置的多樣化,我們重新命名了此屬性以提供更清晰的 API。
此外,Scrollbar.hoverThickness 在 v2.9 中也已棄用。它的替代是 MaterialStateProperty ScrollbarThemeData.thickness。
此更改是為了讓 Scrollbar 的 thickness 能夠響應所有型別的狀態,而不僅僅是懸停。使用 MaterialStateProperties 也符合 material 庫中基於狀態配置 widget 的約定,而不是為每種互動狀態的排列列舉屬性。
遷移指南
遷移前的程式碼
var rawScrollbar = RawScrollbar(
isAlwaysShown: true,
);
var scrollbar = Scrollbar(
isAlwaysShown: true,
hoverThickness: 15.0,
);
var cupertinoScrollbar = CupertinoScrollbar(
isAlwaysShown: true,
);
var scrollbarThemeData = ScrollbarThemeData(
isAlwaysShown: true,
);遷移後的程式碼
var rawScrollbar = RawScrollbar(
thumbVisibility: true,
);
var scrollbar = Scrollbar(
thumbVisibility: true,
);
var cupertinoScrollbar = CupertinoScrollbar(
thumbVisibility: true,
);
var scrollbarThemeData = ScrollbarThemeData(
thumbVisibility: true,
thickness: MaterialStateProperty.resolveWith((Set<MaterialState> states) {
return states.contains(MaterialState.hovered) ? null : 15.0;
}),
);參考資料
API 文件
相關 PR
AnimationSheetBuilder display & sheetSize
#包:flutter_test 由 Flutter Fix 支援:是
AnimationSheetBuilder 的 display 和 sheetSize 方法在 v2.3 中已棄用。替代方法是 collate 方法。
AnimationSheetBuilder 的輸出步驟以前需要呼叫這兩個方法,但現在透過呼叫 collate 單次呼叫即可完成。
collate 函式直接組合影像,並非同步返回一個影像。它需要更少的樣板程式碼,並輸出更小的影像,而不會犧牲質量。
遷移指南
遷移前的程式碼
final AnimationSheetBuilder animationSheet = AnimationSheetBuilder(
frameSize: const Size(40, 40)
);
await tester.pumpFrames(animationSheet.record(
const Directionality(
textDirection: TextDirection.ltr,
child: Padding(
padding: EdgeInsets.all(4),
child: CircularProgressIndicator(),
),
),
), const Duration(seconds: 2));
tester.binding.setSurfaceSize(animationSheet.sheetSize());
final Widget display = await animationSheet.display();
await tester.pumpWidget(display);
await expectLater(
find.byWidget(display),
matchesGoldenFile('material.circular_progress_indicator.indeterminate.png'),
);遷移後的程式碼
final AnimationSheetBuilder animationSheet = AnimationSheetBuilder(
frameSize: const Size(40, 40)
);
await tester.pumpFrames(animationSheet.record(
const Directionality(
textDirection: TextDirection.ltr,
child: Padding(
padding: EdgeInsets.all(4),
child: CircularProgressIndicator(),
),
),
), const Duration(seconds: 2));
await expectLater(
animationSheet.collate(20),
matchesGoldenFile('material.circular_progress_indicator.indeterminate.png'),
);參考資料
API 文件
相關 PR
flutter_test 超時邏輯
#包:flutter_test 由 Flutter Fix 支援:否
在 v2.6 中,與測試中的超時邏輯相關的以下 API 已被棄用。沒有替代方法,應移除相關引用,但 testWidgets 的 initialTimeout 引數除外,它已被使用 timeout 替代。
TestWidgetsFlutterBinding.addTimeTestWidgetsFlutterBinding.runAsync方法 -additionalTime引數TestWidgetsFlutterBinding.runTest方法 -timeout引數AutomatedTestWidgetsFlutterBinding.runTest方法 -timeout引數LiveTestWidgetsFlutterBinding.runTest方法 -timeout引數testWidgets方法 -initialTime引數
這些 API 被發現會導致測試不穩定,並且未被已測試的客戶使用。
自棄用以來,使用這些引數對測試沒有影響,因此移除相關引用應對現有程式碼庫沒有影響。
遷移指南
遷移前的程式碼
testWidgets('Test', (_) {}, initialTimeout: Duration(seconds: 5));遷移後的程式碼
testWidgets('Test', (_) {}, timeout: Timeout(Duration(seconds: 5)));參考資料
API 文件
相關 PR
時間線
#在穩定版中釋出: 3.13.0