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
方法。
disallowIndicator
是在引入 StretchingOverscrollIndicator
時,為了取代原始方法而建立的。先前,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 指南的一部分。對主題系統的整體更新(包括移除 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
始終指向捲軸拇指。隨著捲軸軌道的加入,以及滑鼠懸停和拖曳時其可見性的各種配置,我們重新命名此屬性以獲得更清晰的 API。
此外,Scrollbar.hoverThickness
也已在 v2.9 中棄用。取代方法是 MaterialStateProperty
ScrollbarThemeData.thickness
。
進行此變更是為了讓 Scrollbar
的粗細可以回應所有狀態,包括但不限於懸停。MaterialStateProperties
的使用也符合 Material 程式庫中根據 widget 的狀態配置 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 timeout 邏輯
#套件:flutter_test Flutter Fix 支援:否
下列與測試中的逾時邏輯相關的 API 已在 v2.6 中棄用。沒有取代方法,應移除參考,但 testWidgets
的 initialTimeout
參數除外,該參數會改用 timeout
。
TestWidgetsFlutterBinding.addTime
TestWidgetsFlutterBinding.runAsync
方法 -additionalTime
參數TestWidgetsFlutterBinding.runTest
方法 -timeout
參數AutomatedTestWidgetsFlutterBinding.runTest
方法 -timeout
參數LiveTestWidgetsFlutterBinding.runTest
方法 -timeout
參數testWidgets
方法 -initialTime
參數
發現這些參數會導致測試中的不穩定,且未被測試的客戶使用。
自從棄用以來,使用這些參數對測試沒有任何影響,因此移除參考應該不會對現有的程式碼庫造成任何影響。
遷移指南
遷移前的程式碼
testWidgets('Test', (_) {}, initialTimeout: Duration(seconds: 5));
遷移後的程式碼
testWidgets('Test', (_) {}, timeout: Timeout(Duration(seconds: 5)));
參考資料
API 文件
相關的 PR
時間軸
#在穩定版本中:3.13.0
除非另有說明,否則本網站上的文件會反映 Flutter 的最新穩定版本。頁面最後更新時間為 2024-06-01。 檢視來源 或 回報問題。