页面过渡由 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。 查看源代码 或 报告问题.