如何在 Flutter Web 中处理浏览器的后退按钮

Posted

技术标签:

【中文标题】如何在 Flutter Web 中处理浏览器的后退按钮【英文标题】:How to handle back button of browser in Flutter Web 【发布时间】:2021-04-04 22:00:22 【问题描述】:

这个问题已经在这个链接中问过How to configure go back button in Browser for Flutter Web App 我实现了 onWillPop,所以当用户在 A 屏幕然后单击按钮 See Detail 我会将它们导航到 B 屏幕然后.. 当用户在 B 屏幕并单击浏览器的后退按钮时,我会将它们导航回一个屏幕...第一次尝试成功,但是当我第二次尝试时,我遇到了这样的错误

Error: Assertion failed: org-dartlang-sdk:///flutter_web_sdk/lib/_engine/engine/navigation/history.dart:288:14
_userProvidedRouteName != null
is not true

在我的第一个屏幕(A Screen)中,我有一个这样的按钮:

FlatButton(
                                        onPressed: () 
                                          Navigator.pushReplacement(
                                              context,
                                              MaterialPageRoute(
                                                  builder: (BuildContext ctx) =>
                                                      Detail(
                                                          value:x[i])));
                                        ,
                                        child: Text("See Detail"),
                                        textColor: Colors.white,
                                        color: Colors.blueAccent,
                                      )

对于细节屏幕(B 屏幕),我像这样使用 onWillPop

WillPopScope(
      onWillPop: () 
        Navigator.pushReplacement(context,
            MaterialPageRoute(builder: (BuildContext ctx) => FirstScreen()));
        return Future.value(true);
      ,
      child: Scaffold(
          key: _globalKey,
....

还有什么需要补充的吗?

【问题讨论】:

FirstScreen 是您的应用主页吗? 不,这里的第一个屏幕是我单击按钮之前的屏幕...(由按钮组成的屏幕请参阅上面的详细信息) 我已经编辑了我的问题以获得详细解释 @uyhaW 你能解决这个问题吗? @Mary Hi.. 抱歉我的回复晚了,我无法修复它,所以我使用了另一种方法 【参考方案1】:

在屏幕BonWillPop内调用Navigator.pop(context);

确保当您从 屏幕 A 导航到 屏幕 B 时,您不应使用 Navigator.pushReplacement,因为它会将 ScreenA 从 屏幕堆栈(不确定这是否是正确的术语)

Navigator.push(
    context,
    MaterialPageRoute(builder: (context) => ScreenB()),
  );

这里是flutter的一个例子。

https://flutter.dev/docs/cookbook/navigation/navigation-basics

【讨论】:

以上是关于如何在 Flutter Web 中处理浏览器的后退按钮的主要内容,如果未能解决你的问题,请参考以下文章

Flutter Web - 无法通过浏览器的后退和前进按钮导航

Flutter Web 中的路由有意外行为

如何在 Flutter 的底部导航中处理后退导航

Web 浏览器中的后退按钮如何工作?

如何在nativescript vue中处理webview上的android后退按钮

在颤振中,按下后退按钮时如何返回上一个 URL?