跳至主要內容

v3.10 後移除的已棄用 API

摘要

#

根據 Flutter 的 棄用政策,在 3.10 穩定版本之後達到生命週期結束的已棄用 API 已被移除。

所有受影響的 API 都已編譯到此主要來源中,以協助遷移。此外,還提供了一份快速參考表

變更

#

本節列出依套件和受影響的類別排列的棄用項目。

ThemeData.fixTextFieldOutlineLabel

#

套件:flutter Flutter Fix 支援:是

ThemeData.fixTextFieldOutlineLabel 已在 v2.5 中棄用。可以移除對此屬性的參考。

fixTextFieldOutlineLabel 是一個臨時遷移標誌,允許使用者順利遷移到新的行為,而不是體驗到硬性的中斷。在棄用之前,此屬性已從修正轉換為文字欄位的標籤的新預設值。

遷移指南

遷移前的程式碼

dart
var themeData = ThemeData(
  fixTextFieldOutlineLabel: true,  
);

遷移後的程式碼

dart
var themeData = ThemeData(
);

參考資料

API 文件

相關的 PR


OverscrollIndicatorNotification.disallowGlow

#

套件:flutter Flutter Fix 支援:是

OverscrollIndicatorNotification.disallowGlow 已在 v2.5 中棄用。取代方法是 disallowIndicator 方法。

disallowIndicator 是在引入 StretchingOverscrollIndicator 時,為了取代原始方法而建立的。先前,GlowingOverscrollIndicator 是唯一會發送 OverscrollIndicatorNotification 的類型,因此此方法已更新為更好地反映多種指示器。

遷移指南

遷移前的程式碼

dart
bool _handleOverscrollIndicatorNotification(OverscrollIndicatorNotification notification) {
  notification.disallowGlow();
  return false;
}

遷移後的程式碼

dart
bool _handleOverscrollIndicatorNotification(OverscrollIndicatorNotification notification) {
  notification.disallowIndicator();
  return false;
}

參考資料

API 文件

相關的 PR


ColorScheme primaryVariant & secondaryVariant

#

套件:flutter Flutter Fix 支援:是

ColorScheme.primaryVariantColorScheme.secondaryVariant 已在 v2.6 中棄用。取代方法分別是 ColorScheme.primaryContainerColorScheme.secondaryContainer

進行這些變更是為了與更新的 Material Design 規格的 ColorScheme 對齊。ColorScheme 的更新在 Material 3 的 ColorScheme 設計文件中做了更廣泛的介紹。

遷移指南

遷移前的程式碼

dart
var colorScheme = ColorScheme(
  primaryVariant: Colors.blue,
  secondaryVariant: Colors.amber,
);
var primaryColor = colorScheme.primaryVariant;
var secondaryColor = colorScheme.secondaryVariant;

遷移後的程式碼

dart
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 主題系統更新設計文件中做了更廣泛的討論。

遷移指南

遷移前的程式碼

dart
var themeData = ThemeData(
  primaryColorBrightness: Brightness.dark,
);

遷移後的程式碼

dart
var themeData = ThemeData(
);

參考資料

設計文件

API 文件

相關的 PR


RawScrollbar & 子類別更新

#

套件:flutter Flutter Fix 支援:是

RawScrollbarScrollbarScrollbarThemeDataCupertinoScrollbarisAlwaysShown 屬性已在 v2.9 中棄用。在所有情況下,取代的方法都是 thumbVisibility

進行此變更是因為 isAlwaysShown 始終指向捲軸拇指。隨著捲軸軌道的加入,以及滑鼠懸停和拖曳時其可見性的各種配置,我們重新命名此屬性以獲得更清晰的 API。

此外,Scrollbar.hoverThickness 也已在 v2.9 中棄用。取代方法是 MaterialStateProperty ScrollbarThemeData.thickness

進行此變更是為了讓 Scrollbar 的粗細可以回應所有狀態,包括但不限於懸停。MaterialStateProperties 的使用也符合 Material 程式庫中根據 widget 的狀態配置 widget 的慣例,而不是為每個互動狀態的排列列舉屬性。

遷移指南

遷移前的程式碼

dart
var rawScrollbar = RawScrollbar(
  isAlwaysShown: true,
);
var scrollbar = Scrollbar(
  isAlwaysShown: true,
  hoverThickness: 15.0,
);
var cupertinoScrollbar = CupertinoScrollbar(
  isAlwaysShown: true,
);
var scrollbarThemeData = ScrollbarThemeData(
  isAlwaysShown: true,
);

遷移後的程式碼

dart
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 支援:是

AnimationSheetBuilderdisplaysheetSize 方法已在 v2.3 中棄用。取代方法是 collate 方法。

AnimationSheetBuilder 的輸出步驟先前需要呼叫這兩個方法,但現在透過單次呼叫 collate 來簡化。

collate 函式會直接將影像放在一起,並以非同步方式傳回影像。它需要較少的樣板程式碼,並在不犧牲品質的情況下輸出較小的影像。

遷移指南

提供深入的遷移指南

遷移前的程式碼

dart
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'),
);

遷移後的程式碼

dart
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 中棄用。沒有取代方法,應移除參考,但 testWidgetsinitialTimeout 參數除外,該參數會改用 timeout

  • TestWidgetsFlutterBinding.addTime
  • TestWidgetsFlutterBinding.runAsync 方法 - additionalTime 參數
  • TestWidgetsFlutterBinding.runTest 方法 - timeout 參數
  • AutomatedTestWidgetsFlutterBinding.runTest 方法 - timeout 參數
  • LiveTestWidgetsFlutterBinding.runTest 方法 - timeout 參數
  • testWidgets 方法 - initialTime 參數

發現這些參數會導致測試中的不穩定,且未被測試的客戶使用。

自從棄用以來,使用這些參數對測試沒有任何影響,因此移除參考應該不會對現有的程式碼庫造成任何影響。

遷移指南

遷移前的程式碼

dart
testWidgets('Test', (_) {}, initialTimeout:  Duration(seconds: 5));

遷移後的程式碼

dart
testWidgets('Test', (_) {}, timeout:  Timeout(Duration(seconds: 5)));

參考資料

API 文件

相關的 PR


時間軸

#

在穩定版本中:3.13.0