You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter如何实现页面无动画推入、退出时顶部滑出?

解决方案

问题出在你只禁用了推入时的动画时长,但PageRouteBuilder默认会把reverseTransitionDuration(退出时的动画时长)和transitionDuration设为相同值,所以退出时也没有动画。要实现「推入无动画,退出时页面从顶部滑到底部」的效果,需要手动指定退出动画时长,并自定义退出动画逻辑:

Navigator.push(
  context,
  PageRouteBuilder(
    pageBuilder: (context, animation, secondaryAnimation) => MyNewPage(),
    transitionDuration: Duration.zero, // 推入时无动画
    reverseTransitionDuration: const Duration(milliseconds: 300), // 退出时动画时长
    transitionsBuilder: (context, animation, secondaryAnimation, child) {
      // 定义退出时的动画:从当前位置向下滑出屏幕
      final slideOutAnimation = Tween<Offset>(
        begin: Offset.zero,
        end: const Offset(0, 1),
      ).animate(animation);
      
      return SlideTransition(
        position: slideOutAnimation,
        child: child,
      );
    },
  ),
);

关键说明

  • transitionDuration: Duration.zero:确保推入新页面时没有过渡动画,直接显示。
  • reverseTransitionDuration:单独指定退出时的动画时长,这里设为300ms(可根据需求调整)。
  • transitionsBuilder:自定义退出动画逻辑,使用SlideTransition让页面从当前位置向下滑出(Offset(0,1)代表向下移动一个屏幕高度)。

此时调用Navigator.pop(context),新页面就会以从顶部滑到底部的动画退出。

内容的提问来源于stack exchange,提问作者user246392

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 14:47:10