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