1

设想

我正在将用户从应用程序中的不同屏幕(例如destinationScreen、tractionScreen、reviewScreen 等)导航到loginScreen/signUpScreen,并且在成功登录后,我想将他从导航到loginScreen/signupScreen 的位置弹出回同一屏幕。

所以,我想弹出注册/登录过程中涉及的所有屏幕,比如3 个屏幕

我已经尝试过的

我已经尝试过navigator.popUntil但只有当你想每次都像这样弹回单个屏幕时它才能工作:

推送路线:

Navigator.push(
  context,
  MaterialPageRoute(
    settings: RouteSettings(name: '/loginRedirect'),
      builder: (context) => AttractionScreen(
            attractionData: att,
          )),
);

signInScreen 中的弹出路径:

Navigator.popUntil(context, ModalRoute.withName('/loginRedirect'));

但是这种情况仅在您必须路由到单个特定屏幕时才有效,但在我的情况下,我必须根据用户被引导到登录屏幕的位置路由到不同的屏幕。

我现在想做什么

现在我想要一个实现,在成功登录后,我从导航器堆栈中弹出前三个屏幕,我搜索了很多但找不到任何解决方案。那么,如何从导航器堆栈中弹出最后一条路线?

4

3 回答 3

3

我刚刚得到了一个我以前不确定的解决方案。

我只需要打三遍:

Navigator.pop(context)

像这样:

if (needBackRedirect) {
    Navigator.of(context)..pop()..pop()..pop();
}
于 2020-01-23T13:53:19.473 回答
2

如果您想从导航堆栈中弹出 3 个屏幕,请取一个变量并跟踪已删除的 Routes。然后检查该计数是否达到 3,然后停止弹出路由。

  1. 添加这个变量:
   List<Route> arrayRoutes = [];
  1. 在要执行弹出逻辑的地方添加:
    Navigator.popUntil(context, (Route<dynamic> route){
                          arrayRoutes.add(route);
                          if (arrayRoutes.length != 3) {
                            print('continue popping if length is not 3');
                            return true;
                          } else {
                            print('stop to pop when count is 3');
                            return false;
                          }
                        }); 
于 2020-05-13T11:20:39.250 回答
0

只需在 main.dart(appRoutes) 文件中定义路由,使用 navigator pushNamed方法在屏幕之间导航并弹出直到任意数量的屏幕,例如使用popUnti

Navigator.of(context).popUntil((route) {
               return route.settings.name ==
                          'RouteName'; // Use defined route like Dashboard.routeName
     });
于 2021-08-17T10:20:29.060 回答