我使用 Hero
和 PageRouteBuilder
在两个屏幕之间通过动画进行导航。问题是我的 pop
动画比我的 push
短得多,而且看起来有点笨拙。这是一个ScreenVideo为了更好的理解。
这就是我构建推送
的方式:
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
,它表示:“过渡向前的持续时间。” 最初,它设置为 300ms 持续时间(检查源代码)。
this.transitionDuration = const Duration(milliseconds: 300)
此外,还有一个 reverseTransitionDuration
属性,其中规定:“反向过渡的持续时间。” 最初,其值与transitionDuration
this.reverseTransitionDuration = const Duration(milliseconds: 300),
您为什么会遇到此问题?
您已将正向转换设置为 1000 毫秒,而反向转换仍为 300 毫秒。因此,添加 reverseTransitionDuration: const Duration(1000)
将解决您的问题。
关于Flutter 制作 pop 动画,其持续时间与 Push 相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67901464/