Flutter 如何根据用户的操作在Flatter中的Navigator.pop()上设置不同的过渡动画?

Flutter 如何根据用户的操作在Flatter中的Navigator.pop()上设置不同的过渡动画?,flutter,Flutter,在我的颤振项目中,有多个屏幕,我想创建一个带有2个按钮的屏幕: 第一个按钮使用Navigator.pop()关闭当前屏幕,此时当前屏幕向右消失 第二个按钮还使用Navigator.pop()关闭当前屏幕,但这次屏幕消失在底部 到目前为止,我找到的每个示例都允许我在弹出屏幕时只设置一个可能的转换 此外,我使用命名路线在我的应用程序中导航 如何根据用户单击的按钮自定义pop动画 谢谢。无论您将其定义为路线动画,它都将是反向的,并用作pop导航。 在您的情况下,可以使用不同的动画来推送每个动画。

在我的颤振项目中,有多个屏幕,我想创建一个带有2个按钮的屏幕:

  • 第一个按钮使用
    Navigator.pop()
    关闭当前屏幕,此时当前屏幕向右消失
  • 第二个按钮还使用
    Navigator.pop()
    关闭当前屏幕,但这次屏幕消失在底部
到目前为止,我找到的每个示例都允许我在弹出屏幕时只设置一个可能的转换

此外,我使用命名路线在我的应用程序中导航

如何根据用户单击的按钮自定义pop动画


谢谢。

无论您将其定义为路线动画,它都将是反向的,并用作pop导航。
在您的情况下,可以使用不同的动画来推送每个动画。
您可以创建自定义动画,定义动画并使用它,而不是
材质页面路由器

   import 'package:flutter/material.dart';
class MyCustomRoute extends PageRouteBuilder {
  final Widget widget;
  MyCustomRoute({this.widget})
    : super(
        pageBuilder: (BuildContext context, Animation<double> animation, Animation<double> secondaryAnimation) {
          return widget;
        },
        transitionsBuilder: (BuildContext context, Animation<double> animation, Animation<double> secondaryAnimation, Widget child) {
          return new ScaleTransition(
            scale: new Tween<double>(
              begin: 0.0,
              end: 1.0,
            ).animate(
                CurvedAnimation(
                  parent: animation,
                  curve: Interval(
                    0.00,
                    0.50,
                    curve: Curves.bounceIn,
                  ),
                ),
              ),
            child: ScaleTransition(
                     scale: Tween<double>(
                       begin: 1.5,
                       end: 1.0,
                     ).animate(
                       CurvedAnimation(
                         parent: animation,
                         curve: Interval(
                           0.50,
                           1.00,
                           curve: Curves.easeIn,
                         ),
                       ),
                     ),
                     child: child,
                   ),
           );
         }
      );
}
爆裂

 onPressed: () {
                  Navigator.pop();// will reverse the animation
                },

谢谢,但它没有回答我的问题:如果我的屏幕上有两个按钮,当我弹出屏幕时,每个按钮都设置了一个自定义的(不同的!)转换动画,那该怎么办?哦,你可以使用
push
而不是
pop
,并对每个按钮使用不同的“转换动画”,每次按下都可以返回到上一页,另外,如果不想返回按钮所在的位置,可以使用
push和moveuntil
而不是像这样
Navigator.push和moveuntil(上下文,MyCustomRoute(widget:SeconPage(),(Route-Route)=>false,)哦,好吧,我不知道,我很快就会试试。谢谢但还有一个问题:如果我使用
push()
而不是
pop()
,返回到上一页,我会有该页的另一个实例吗?是的,但您可以使用
pushReplacement
,它通过推送给定路线,然后在新路线完成动画制作后处理上一条路线,来替换导航器的当前路线。有点像
push和moveuntil
,尝试一下,然后告诉我结果,我很乐意帮助您使用
pageRouteBuilder
进行自定义导航动画。看看这个和这个。我已经检查了所有这些,不幸的是,它没有回答我的问题:如何在
Navigator.pop()上选择两个不同的过渡动画
根据按下的按钮?您应该使用一个自定义的
导航器
和一个自定义的
TransitionLegate
,它可以在弹出时获取参数并决定使用哪个转换
 onPressed: () {
                  Navigator.pop();// will reverse the animation
                },