跳至主要內容

頁面轉場已由 ZoomPageTransitionsBuilder 取代

摘要

#

為了確保函式庫遵循最新的 OEM 行為,現在所有平台(除了 iOS 和 macOS)的預設頁面轉場建構器都使用 ZoomPageTransitionsBuilder,而不是 FadeUpwardsPageTransitionsBuilder

背景

#

FadeUpwardsPageTransitionsBuilder(在第一個 Flutter 版本中提供)定義的頁面轉場效果類似於 Android O 提供的效果。根據 Flutter 的棄用政策,此頁面轉場建構器最終將在 Android 上被棄用。

ZoomPageTransitionsBuilder 是 Android、Linux 和 Windows 的新頁面轉場建構器,它定義的頁面轉場效果類似於 Android Q 和 R 提供的效果。

根據Flutter 儲存庫的風格指南,框架將遵循最新的 OEM 行為。使用 FadeUpwardsPageTransitionsBuilder 的頁面轉場建構器已全部切換為 ZoomPageTransitionsBuilder。當目前的 TargetPlatformThemeData.pageTransitionsTheme 中未定義 PageTransitionsBuilder 時,將使用 ZoomPageTransitionsBuilder 作為預設值。

變更說明

#

PageTransitionsTheme._defaultBuilders 中定義的 PageTransitionsBuilder 已從 FadeUpwardsPageTransitionsBuilder 變更為 ZoomPageTransitionsBuilder,適用於 TargetPlatform.androidTargetPlatform.linuxTargetPlatform.windows

移轉指南

#

如果您想切換回先前的頁面轉場建構器 (FadeUpwardsPageTransitionsBuilder),您應該明確為目標平台定義建構器。

遷移前的程式碼

dart
MaterialApp(
  theme: ThemeData(colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple)),
)

遷移後的程式碼

dart
MaterialApp(
  theme: ThemeData(
    pageTransitionsTheme: const PageTransitionsTheme(
      builders: <TargetPlatform, PageTransitionsBuilder>{
        TargetPlatform.android: FadeUpwardsPageTransitionsBuilder(), // Apply this to every platforms you need.
      },
    ),
  ),
)

如果您想將相同的頁面轉場建構器應用於所有平台

dart
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)

您應該使用帶有特定小工具類型的 Finderdescendant 範圍來遷移您的測試。以下是 DataTable 測試的範例

遷移前的測試

dart
final Finder finder = find.widgetWithIcon(Transform, Icons.arrow_upward);

遷移後的測試

dart
final Finder finder = find.descendant(
  of: find.byType(DataTable),
  matching: find.widgetWithIcon(Transform, Icons.arrow_upward),
);

通常需要遷移尋找範圍的小工具包括:TransformFadeTransitionScaleTransitionColoredBox

時間軸

#

已於版本中發布:2.13.0-1.0.pre
在穩定版本中:3.0.0

參考

#

API 文件

相關問題

相關的 PR