Flutter Navigation.pop()和Navigation.push()的行为异常
我正在使用Flatter在应用程序中创建一个注册部分,并尝试执行以下操作:Flutter Navigation.pop()和Navigation.push()的行为异常,flutter,dart,flutter-navigation,Flutter,Dart,Flutter Navigation,我正在使用Flatter在应用程序中创建一个注册部分,并尝试执行以下操作: 用户单击“注册” 用户在注册过程中的任何阶段都可以按下后退按钮 然后弹出一个警告对话框,询问用户是否真的想离开注册过程 用户按Yes 然后,用户将返回应用程序的第一个(主页) 这适用于我单击“注册”后的第一页,但当我进入第二页时,步骤4使我保持在同一页上,然后当我再次尝试时,它就起作用了。但事实不应该如此 经过一些调试,我发现了问题,但我不知道为什么会发生 我在第二个代码片段中,在onBackPressed()
onBackPressed()
函数的末尾,以注释的形式写下了这个问题,这样就可以清楚地知道它在哪里被破坏了:)
以下是我从mymain.dart导航到注册过程页面的代码:
Navigator.push(
上下文
MaterialPage路由(生成器:(上下文)=>SignUp())
)
然后,在注册过程中,每当我进入下一页时,我都会执行一个Navigation.pop(context)
到pop堆栈中的当前注册页,然后执行一个Navigation.push()
,以打开下一页
以下是每个注册页面中后退按钮功能的代码:
bool backIsPressed=false;
工具_Tools=新工具();
@凌驾
void initState(){
super.initState();
BackButtonInterceptor.add(on Backpressed);
}
@凌驾
无效处置(){
BackButtonInterceptor.remove(按Backpressed);
super.dispose();
}
bool onBackPressed(bool stop defaultbuttonevent){
this.backIsPressed=!backIsPressed;
如果(反压){
_工具。yesNoAlert(
上下文
“回去吗?”,
“确实要返回吗?所做的更改将不会保存。”,
() {
this.backIsPressed=false;
pop(上下文,true);
},
() {
this.backIsPressed=false;
pop(上下文,false);
},
).然后((res){
//-------在这里休息-----------------
//第一次按“是”时,“res”返回null
//但是根据Flatter的文档,Navigation.pop(context,true)应该返回true
如果(res){
Navigator.pop(上下文);
}
});
}
否则{
Navigator.pop(上下文);
}
返回true;
}
最后是Tools
类中的yesOrNoAlert()
函数
Future yesNoAlert(BuildContext上下文、字符串标题、,
字符串说明、函数yes函数、函数noFunction){
这是。_isDialogOpen=true;
返回显示对话框(
上下文:上下文,
禁止:错误,
生成器:(BuildContext上下文){
返回警报对话框(
标题:新文本(标题),
内容:新文本(说明),
行动:[
新扁平按钮(
子项:新文本(“是”),
已按下:(){
_isDialogOpen=false;
是函数();
},
),
新扁平按钮(
子项:新文本(“否”),
已按下:(){
_isDialogOpen=false;
noFunction();
},
)
],
);
});
}
希望我解释得很好。如果你想回到第一页,而不是pop(),你可以在用户选择yes时使用popUntil()。。。无需通过“res”
在此处了解更多信息:从何处调用onBackPressed()?@pablobarera-它在
initState
方法中设置为backbuttonierceptor
。