Web 控制浏览器后退按钮

Ron*_*ler 5 browser back-button flutter-navigation flutter-web

我正在使用 Navigation 2 并setUrlStrategy(PathUrlStrategy()); 添加了它WillPopScope,但onWillPop单击浏览器的后退按钮时不会调用 。

  Widget build(context) {
return WillPopScope(
  onWillPop: () async {
    print('here');
    if (currentStep == 0) {
      return false;
    }
    return true;
  },
  child: Scaffold(...
Run Code Online (Sandbox Code Playgroud)

Joe*_*ler 1

在 Navigator 2.0 中,Web 浏览器是按时间顺序排列的,并且基本上将所有导航视为推送。

设想:

  1. 从屏幕 1 导航到屏幕 2
  2. 单击浏览器的后退按钮。

在这种情况下,Flutter 会将之前的路由(屏幕 1)压入堆栈。

换句话说,浏览器后退按钮不再触发onPopRoute。相反,它会触发 onPushRoute。

我相信它是这样设计的,以便每个导航操作都可以被视为深度链接。考虑到这一点,如果您正在开发一款 Web Flutter 应用程序,您应该尽可能避免将参数从一个路由传递到另一个路由。

https://github.com/flutter/flutter/issues/71122#issuecomment-733864359