要使用 Flutter 预装 animations 加载新屏幕,请使用它们各自的转换类。例如:
容器转换
基本上,我们将第一个小部件或屏幕转换为下一个屏幕。为此,我们需要使用OpenContainer。下面的代码说明了 ListView 中的一个项目转换为它的详细信息页面。
@override
Widget build(BuildContext context) {
return Card(
color: Colors.white,
elevation: 2.0,
child: OpenContainer(
transitionType: ContainerTransitionType.fadeThrough,
closedColor: Theme.of(context).cardColor,
closedElevation: 0.0,
openElevation: 4.0,
transitionDuration: Duration(milliseconds: 1500),
openBuilder: (BuildContext context, VoidCallback _) => THENEXTSCREEN(),
closedBuilder: (BuildContext _, VoidCallback openContainer) {
return ListTile(
leading: Icon(Icons.album),
title: Text("ITEM NAME"),
);
},
),
);
}
共享轴
此过渡类似于 Tab 或 Stepper 中的过渡。我们需要SharedAxisTransition、PageTransitionSwitcher,以及用于模拟活动页面和前一页面之间转换的状态。如果我们只在两个页面之间切换,我们可以使用一个简单的布尔值isFirstPage。这是使用 Provider 作为状态管理的 sn-p:
@override
Widget build(BuildContext context) {
return Consumer<YourState>(
builder: (context, state, child) {
return PageTransitionSwitcher(
duration: const Duration(milliseconds: 1500),
reverse: !state.isFirstPage, // STATE
transitionBuilder: (
Widget child,
Animation<double> animation,
Animation<double> secondaryAnimation,
) {
return SharedAxisTransition(
child: child,
animation: animation,
secondaryAnimation: secondaryAnimation,
transitionType: SharedAxisTransitionType.horizontal,
);
},
child: state.isFirstPage? FIRSTPAGE() : SECONDPAGE(), // STATE
);
},
);
}
请注意,在所有这些场景中,我们都不使用 Navigator 和 MaterialPageRoute。所有这些代码均来自animations repo,因此您可能需要先查看一下。