Flutter使弹出动画的持续时间与推送相同

Flutter make pop animation with same duration as push

我正在使用 HeroPageRouteBuilder 在两个屏幕之间导航动画。问题是我的 pop 动画比我的 push 短得多,看起来有点笨拙。为了更好地理解,这里有一个ScreenVideo

这就是我构建 push 的方式:

static PageRouteBuilder _buildTransitionToMonthPage(Month month) {
    return PageRouteBuilder(
      transitionDuration: Duration(milliseconds: 1000),
      pageBuilder: (BuildContext context, Animation<double> animation,
          Animation<double> secondaryAnimation) {
        return MonthPage(
          month: month,
        );
      },
      transitionsBuilder: (BuildContext context, Animation<double> animation,
          Animation<double> secondaryAnimation, Widget child) {
        return FadeTransition(opacity: animation, child: child);
      },
    );
  }
}

在另一个屏幕上,我只是调用 Navigator.pop(context)。我在这里错过了什么?它不应该简单地反转动画持续时间吗?

基于 documentation 对于 PageRouteBuilder,对于 属性 transitionDuration 它说:“过渡的持续时间 forwards." 最初,它被设置为 300ms 持续时间(查看源代码)。

this.transitionDuration = const Duration(milliseconds: 300)

此外还有一个 reverseTransitionDuration 属性 声明:“过渡反向 的持续时间。” 最初它的值与 transitionDuration

相同

this.reverseTransitionDuration = const Duration(milliseconds: 300),

您为什么遇到这个问题?

您提供的正向转换为 1000 毫秒,而反向转换仍为 300 毫秒。因此,添加 reverseTransitionDuration: const Duration(1000) 将解决您的问题。