我有一个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;
我将不胜感激。提前致谢。
最佳答案
设置仅用于两件事-指定名称,并让路由知道它是否是要打开的第一页。isInitialRoute
只是告诉路由它是否是要打开的第一页。这很重要,因为您不希望在第一页上放动画。
由于似乎您的“自定义路线”实际上仅在第一页之后使用,因此您不必为此担心。因此,您可以忽略设置,除非您开始将页面用作第一页(即使那样,淡入也可能不是最坏的事情)。