如何同时处理移动端和网页版GoRouter中的后退按钮

问题描述 投票:0回答:1

根据GoRouter文档

GoRouter 可以使用以下方法将屏幕推送到导航器的历史堆栈上 context.push(),并且可以通过context.pop()弹出当前屏幕。 然而,众所周知,命令式导航会导致以下问题: 浏览器历史记录。

所以,在网络上,我们必须使用

.go()
。然后,如果我们希望能够使用浏览器和应用内后退按钮返回,最好拨打
window.history.back();

但这不适用于本机移动应用程序。所以在应用程序上,我们必须使用

Navigator.of(context).maybePop();
。但是...如果使用
.go()
浏览应用程序,则不起作用,因为它只会关闭应用程序。

那么这是否意味着我们应该在网络上使用

.go()
导航,在移动应用程序上使用
.push()
导航?还有其他解决办法吗?

我尝试在 GoRouter 官方文档页面以及 GoRouter 的 GitHub 问题页面上寻找解决方案,但我什么也没找到。

flutter mobile gorouter
1个回答
0
投票

要在网络上导航,请使用

context.go()
并使用
window.history.back()
启用浏览器历史记录。当谈到移动应用程序时,用户
Navigator.of(context).push()
进行导航。建议根据使用 dart:io 的 kIsWeb 的平台选择性地选择合适的方法。

请检查以下代码:

if (kIsWeb) {
    context.go('/your_screen');
    window.history.back();
  } else {
    Navigator.of(context).push(MaterialPageRoute(
      builder: (context) => YourScreen(),
    ));
  }
© www.soinside.com 2019 - 2024. All rights reserved.