頁面轉場已由 ZoomPageTransitionsBuilder 取代
使用最新的頁面轉場取代舊版。
摘要
#
為了確保函式庫遵循最新的 OEM 行為,現在所有平台(不包括 iOS 與 macOS)上的預設頁面轉場建構器,皆改為使用 ZoomPageTransitionsBuilder,而非
FadeUpwardsPageTransitionsBuilder。
背景說明
#
FadeUpwardsPageTransitionsBuilder(隨首個 Flutter 版本提供)定義了一種與 Android O 類似的頁面轉場。根據 Flutter 的棄用政策,這個頁面轉場建構器未來將在 Android 上被棄用。
ZoomPageTransitionsBuilder,是 Android、Linux 和 Windows 的新頁面轉場建構器,其定義的頁面轉場與 Android Q 和 R 所提供的效果相似。
根據 Flutter repo 風格指南,框架將遵循最新的 OEM 行為。所有使用
FadeUpwardsPageTransitionsBuilder 的頁面轉場建構器皆已切換為 ZoomPageTransitionsBuilder。當目前的
TargetPlatform 在 ThemeData.pageTransitionsTheme 中未定義 PageTransitionsBuilder
時,則會以 ZoomPageTransitionsBuilder 作為預設值。
變更說明
#
PageTransitionsTheme._defaultBuilders 中所定義的 PageTransitionsBuilder,針對 TargetPlatform.android、TargetPlatform.linux
以及 TargetPlatform.windows,已由 FadeUpwardsPageTransitionsBuilder 改為 ZoomPageTransitionsBuilder。
移轉指南
#如果你希望切換回先前的頁面轉場建構器(FadeUpwardsPageTransitionsBuilder),請明確為目標平台定義建構器。
移轉前的程式碼:
MaterialApp(
theme: ThemeData(colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple)),
)
移轉後的程式碼:
MaterialApp(
theme: ThemeData(
pageTransitionsTheme: const PageTransitionsTheme(
builders: <TargetPlatform, PageTransitionsBuilder>{
TargetPlatform.android: FadeUpwardsPageTransitionsBuilder(), // Apply this to every platforms you need.
},
),
),
)
如果你想要在所有平台上套用相同的頁面轉場建構器(page transition builder):
MaterialApp(
theme: ThemeData(
pageTransitionsTheme: PageTransitionsTheme(
builders: Map<TargetPlatform, PageTransitionsBuilder>.fromIterable(
TargetPlatform.values,
value: (dynamic _) => const FadeUpwardsPageTransitionsBuilder(),
),
),
),
)
測試移轉
#如果你在使用新轉場時,嘗試尋找元件 (Widget) 但因 Too many elements(元素過多)而失敗,並看到類似以下的錯誤訊息:
══╡ EXCEPTION CAUGHT BY FLUTTER TEST FRAMEWORK ╞════════════════════════════════════════════════════
The following StateError was thrown running a test:
Bad state: Too many elements
When the exception was thrown, this was the stack:
#0 Iterable.single (dart:core/iterable.dart:656:24)
#1 WidgetController.widget (package:flutter_test/src/controller.dart:69:30)
#2 main.<anonymous closure> (file:///path/to/your/test.dart:1:2)
你應該透過在具有特定元件型別的 Finder 上使用 descendant 範圍,來移轉你的測試。以下是 DataTable
測試的範例:
移轉前的測試:
final Finder finder = find.widgetWithIcon(Transform, Icons.arrow_upward);
移轉後的測試:
final Finder finder = find.descendant(
of: find.byType(DataTable),
matching: find.widgetWithIcon(Transform, Icons.arrow_upward),
);
通常需要移轉 finder scope 的元件包括:
Transform、FadeTransition、ScaleTransition 和
ColoredBox。
時程
#
合併於版本:2.13.0-1.0.pre
穩定版釋出:3.0.0
參考資料
#API 文件:
相關議題:
相關 PR:
Unless stated otherwise, the documentation on this site reflects Flutter 3.44.0. Page last updated on 2026-06-14. View source or report an issue.