Flutter 颤振注销&;漂亮地替换堆栈

Flutter 颤振注销&;漂亮地替换堆栈,flutter,Flutter,在我的颤振应用程序的任意深度,用户可以通过点击按钮退出应用程序。如何用auth/login屏幕替换当前的屏幕堆栈,并为转换生成一个“漂亮”的动画 我目前正在做以下工作,但动画一点也不漂亮。在iOS上,堆栈上的屏幕向右滑出,验证屏幕从右侧滑入。滑得太多了 NavigatorState navigatorState = Navigator.of(this.context); while (navigatorState.canPop()) { navigatorState.pop(); } Na

在我的颤振应用程序的任意深度,用户可以通过点击按钮退出应用程序。如何用auth/login屏幕替换当前的屏幕堆栈,并为转换生成一个“漂亮”的动画

我目前正在做以下工作,但动画一点也不漂亮。在iOS上,堆栈上的屏幕向右滑出,验证屏幕从右侧滑入。滑得太多了

NavigatorState navigatorState = Navigator.of(this.context);
while (navigatorState.canPop()) {
  navigatorState.pop();
}

Navigator.pushReplacement(
  context,
  MaterialPageRoute(builder: (BuildContext context) {
    return AuthScreen();
  }),
);
我宁愿在iOS上让auth屏幕从底部向上滑动,在Android上让auth屏幕与普通动画一起显示。然后移除堆栈中较低的所有屏幕。我找不到在颤振中以这种方式操纵堆栈的方法。

试试这个

  Navigator.pushAndRemoveUntil(
      context,
      PageRouteBuilder(pageBuilder: (BuildContext context, Animation animation,
          Animation secondaryAnimation) {
        return AuthScreen();
      }, transitionsBuilder: (BuildContext context, Animation<double> animation,
          Animation<double> secondaryAnimation, Widget child) {
        return new SlideTransition(
          position: new Tween<Offset>(
            begin: const Offset(1.0, 0.0),
            end: Offset.zero,
          ).animate(animation),
          child: child,
        );
      }),
      (Route route) => false);
Navigator.pushandremove直到(
上下文
PageRouteBuilder(pageBuilder:(构建上下文、动画、,
动画(二级动画){
返回AuthScreen();
},transitionsBuilder:(构建上下文,动画,
动画辅助动画,小部件子项){
返回新的幻灯片转换(
职位:新吐温(
开始:常数偏移(1.0,0.0),
结束:偏移0.0,
).制作动画(动画),
孩子:孩子,
);
}),
(路由)=>false);
在这里,
按下并移动,直到
清除堆栈并按下新屏幕


PageRouteBuilder
允许您设置屏幕过渡的动画。您可以通过返回
FadeTransition
或任何您喜欢的选项来玩它。通过这种方式,您可以实现动画转换。

如果您在MaterialApp中声明路由,则类似

MaterialApp(
  home: new Screen1(),
  routes: <String, WidgetBuilder> {
    '/AuthScreen': (BuildContext context) => new AuthScreen()
  },
)
MaterialApp(
主页:新屏幕1(),
路线:{
“/AuthScreen”:(BuildContext上下文)=>newauthscreen()
},
)
你可以用

Navigator.of(context).pushNamedAndRemoveUntil('/AuthScreen', (Route<dynamic> route) => false);
Navigator.of(context).pushName和removeUntil('/AuthScreen',(路由)=>false);

回答得好!你能解释一下这个论点是什么吗?(路由)=>错误