頁面轉場已由 ZoomPageTransitionsBuilder 取代
摘要
#為了確保函式庫遵循最新的 OEM 行為,現在所有平台(除了 iOS 和 macOS)的預設頁面轉場建構器都使用 ZoomPageTransitionsBuilder
,而不是 FadeUpwardsPageTransitionsBuilder
。
背景
#FadeUpwardsPageTransitionsBuilder
(在第一個 Flutter 版本中提供)定義的頁面轉場效果類似於 Android O 提供的效果。根據 Flutter 的棄用政策,此頁面轉場建構器最終將在 Android 上被棄用。
ZoomPageTransitionsBuilder
是 Android、Linux 和 Windows 的新頁面轉場建構器,它定義的頁面轉場效果類似於 Android Q 和 R 提供的效果。
根據Flutter 儲存庫的風格指南,框架將遵循最新的 OEM 行為。使用 FadeUpwardsPageTransitionsBuilder
的頁面轉場建構器已全部切換為 ZoomPageTransitionsBuilder
。當目前的 TargetPlatform
的 ThemeData.pageTransitionsTheme
中未定義 PageTransitionsBuilder
時,將使用 ZoomPageTransitionsBuilder
作為預設值。
變更說明
#PageTransitionsTheme._defaultBuilders
中定義的 PageTransitionsBuilder
已從 FadeUpwardsPageTransitionsBuilder
變更為 ZoomPageTransitionsBuilder
,適用於 TargetPlatform.android
、TargetPlatform.linux
和 TargetPlatform.windows
。
移轉指南
#如果您想切換回先前的頁面轉場建構器 (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.
},
),
),
)
如果您想將相同的頁面轉場建構器應用於所有平台
MaterialApp(
theme: ThemeData(
pageTransitionsTheme: PageTransitionsTheme(
builders: Map<TargetPlatform, PageTransitionsBuilder>.fromIterable(
TargetPlatform.values,
value: (dynamic _) => const FadeUpwardsPageTransitionsBuilder(),
),
),
),
)
測試移轉
#如果您在使用新的轉場效果時,嘗試尋找小工具但因元素過多而失敗,並且看到類似以下的錯誤
══╡ 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),
);
通常需要遷移尋找範圍的小工具包括:Transform
、FadeTransition
、ScaleTransition
和 ColoredBox
。
時間軸
#已於版本中發布:2.13.0-1.0.pre
在穩定版本中:3.0.0
參考
#API 文件
相關問題
相關的 PR
除非另有說明,本網站上的文件反映了 Flutter 的最新穩定版本。頁面最後更新於 2024-06-01。 查看原始碼 或 回報問題。