我有一个ListTile列表,每当我点击它们时,就会出现一个新页面。当前,新页面将向上滑动(出现时)和向下滑动(被删除时)。我想将过渡动画更改为“淡入淡出”。
我已经在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;
我将不胜感激。预先感谢。
答案 0 :(得分:1)
设置仅用于两件事-指定名称,并让路由知道它是否是要打开的第一页。
isInitialRoute
只是告诉路由它是否是要打开的第一页;这很重要,因为您不希望在第一页放上动画。
由于似乎您的“自定义路线”实际上仅在第一页之后使用,因此您不必为此担心。因此,除非您开始将页面用作第一页,否则您可以忽略这些设置(即使那样,淡入淡出也不是最糟糕的事情)。