我有一个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只是告诉路由它是否是要打开的第一页。这很重要,因为您不希望在第一页上放动画。

由于似乎您的“自定义路线”实际上仅在第一页之后使用,因此您不必为此担心。因此,您可以忽略设置,除非您开始将页面用作第一页(即使那样,淡入也可能不是最坏的事情)。

09-11 18:39