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))
我有像这样使用导航打开应用程序的流程:
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))