如何在 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】:
在屏幕B的onWillPop
内调用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 - 无法通过浏览器的后退和前进按钮导航