Flutter:移动到上一个屏幕(第 2 个)并仅删除上一个屏幕(第 2 个,第 3 个,第 4 个),而不是所有屏幕(第 1 个,第 2 个,第 3 个,第 4 个)

Flutter: Move to previous screen(2nd) and remove only previous screen (2nd 3rd 4th), not all screen (1st 2nd 3rd 4th)

我有像这样使用导航打开应用程序的流程:

Profile Page(1st) -> List Attachments(2nd) -> List Resumes(3rd) -> Edit Resume(4th)

然后,从"Edit Resume(4th)"我想和"remove the navigation state from 2nd 3rd 4th"一起去"List Attachments(2nd)"。因此,当我成功导航并打开 "List Attachments(2nd)" 屏幕时,当我从 AppBar(在 "List Attachments(2nd)" 屏幕中)或从设备(在 "List Attachments(2nd)" 中单击后退按钮时屏幕),它不会返回到 "Edit Resume(4th)",但会返回到 "Profile Page(1st)"。怎么做?

我已经尝试 :

    Navigator.pushAndRemoveUntil(
      context,
      MaterialPageRoute(builder: (context) => AttachmentsListPage(widget.userEntity)),
          (Route<dynamic> route) => false,
    );

它删除了 "List Attachments(2nd)" 中 AppBar 上的后退按钮。

我也试试这个:

Navigator.of(context).pushReplacement(MaterialPageRoute(builder: (BuildContext context) => AttachmentsListPage(widget.userEntity)));

但还是不行。

仅供参考,我没有使用 route

如果你想使用它,那么你必须 return 真你想停止的地方而不是 return 总是假的。

Navigator.pushAndRemoveUntil(
      context,
      MaterialPageRoute(builder: (context) => AttachmentsListPage(widget.userEntity)),
          (Route<dynamic> route) => route is ProfilePage,
    );

您可以做的另一件事是,致电

Navigator.pop(context); //will return to the previous screen
Navigator.pop(context); //will return to two screens before

您可以根据需要多次使用它。

尝试使用它移动到第二页(设置路由名称)。

Navigator.push(
  context,
  MaterialPageRoute(
    builder: (_) => SecondPage(),
    settings: RouteSettings(name: '/second'),
  ),
);

然后在第四页使用这个尝试return到第二页而不丢失第二页状态,如果没有找到然后return到主页面(初始路由)。

Navigator.popUntil(
  context,
  (Route route) {
    String name = route.settings.name;
    bool secondPage = name == '/second';
    bool initPage = name == '/';
    return !initPage ? secondPage : initPage;
  },
);

this是结果。

我使用 popUntil 解决了这个问题。

Navigator.popUntil(context, ModalRoute.withName(routeName))