我的问题是,我有一个主页,然后登录页面,然后是一个主页,如果我按主页上的注销,它应该将我导航回到包含willpopscope的主页,我想要做的是阻止用户按下主页上的后退按钮,以使应用程序在没有用户登录的情况下不会返回首页,问题是,当我Navigator.push主页时,willpopscope无法使用返回按钮,它使我回到主页。
我尝试更改WillPopScope的位置,如果用它包装整个小部件,它将永远无法工作
要复制的代码
//Main page:
class MainActivity extends StatefulWidget {
final bool isWelcome;
MainActivity(this.isWelcome);
@override
State<StatefulWidget> createState() {
return OperateMainActivity(isWelcome);
}
}
class OperateMainActivity extends State<MainActivity> {
bool isWelcome = false;
OperateMainActivity(this.isWelcome);
@override
Widget build(BuildContext context) {
//print(isWelcome);
return MaterialApp(
home: MyHome(
isWelcome: isWelcome,
));
}
}
class myHome extends StatelessWidget
return Scaffold(
body: Center(
child: WillPopScope(
onWillPop: () async => false,
child: Container(....)
// Home page
Navigator.push(context,MaterialPageRoute(builder: (context) => MainActivity(false)));
//When pushing to main activity WillPopScope does not work
答案 0 :(得分:0)
WillPopScope
。这是合乎逻辑的行为,因为当您推入另一个视图时,它会超出堆栈中的当前视图。因此,当前视图永远不会弹出。
如果您知道MainActivity
在堆栈中当前页面的下方,则可以更改:
Navigator.push(context,MaterialPageRoute(builder: (context) => MainActivity(false)));
收件人:
Navigator.pop(context); // This will make a call to onWillPop.
更新:
要实现的目标,您可以使用pushAndRemoveUntil
:
Navigator.of(context).pushAndRemoveUntil(
MaterialPageRoute(
builder: (context) {
return MainActivity();
},
),
(Route<dynamic> route) => false,
);
它将推送所需的页面并从堆栈中删除所有其他内容。