我有一个ListTile列表,每当我点击它们时,都会出现一个新页面。目前,新页面将向上滑动(出现时)并向下滑动(移除时)。我想将过渡动画更改为Fade。
我已经在here中阅读了该解决方案,然后我编辑了链接中的代码,这是结果。
class MyCustomRoute<T> extends MaterialPageRoute<T> {
MyCustomRoute({ WidgetBuilder builder})
: super(builder: builder);
@override
Widget buildTransitions(BuildContext context,
Animation<double> animation,
Animation<double> secondaryAnimation,
Widget child) {
if (settings.isInitialRoute)
return child;
return new FadeTransition(opacity: animation, child: child);
}
}
与链接解决方案的唯一区别在于我从未向MaterialPageRoute类提供“settings”变量。
以下是我使用Navigator.push的代码部分:
new ListTile(
onTap: (){
Navigator.push(context, new MyCustomRoute(builder: (context) => new SecondPage("someTitle", "someDescription") ));
},
//The rest of the code goes here
我试过运行这段代码,我从没想过这会顺利运行,因为我从未向MaterialPageRoute小部件提供设置变量,但运行得很好。
我的问题是,这是正确的方法吗?或者我应该为MaterialPageRoute类提供设置吗?而且因为我没有为MaterialPageRoute类提供设置变量,它在哪里得到它的设置?在这部分代码中:
if (settings.isInitialRoute)
return child;
我很感激任何启发。提前致谢。
这些设置仅用于两件事 - 指定名称,并让路线知道它是否是要打开的第一页。
isInitialRoute
只是告诉路线它是否是第一页要打开的;这很重要,因为您不希望在第一页上有一个上滑动画。
由于您的自定义路线似乎仅在第一页之后使用,因此您无需担心这一点。所以你可能会忽略这些设置,除非你开始使用该页面作为你的第一页(即便如此,淡入可能不是最糟糕的事情)。