我创建了两个页面,一个是登录和主页,但我想从主页关闭应用程序,我正在使用Willpopscope
,但它不为我工作,我已经尝试了所有的事情,但onwillpop
方法是不调用请帮助我,谢谢。
class main_page extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData(primarySwatch: Colors.amber),
home: my_page(),
);
}
}
class my_page extends StatefulWidget {
@override
_my_pageState createState() => _my_pageState();
}
class _my_pageState extends State<my_page> {
@override
void initState() {
check_login();
super.initState();
}
Future check_login() async {
SharedPreferences preferences = await SharedPreferences.getInstance();
if (preferences.getBool("islogin") == false)
setState(() {
Navigator.of(context).push(MaterialPageRoute(
builder: (context) => MyApp(),
));
});
}
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () async=>false,
child: Scaffold(
appBar: new AppBar(
title: Text(
"Home",
style: new TextStyle(color: Colors.white),
),
actions: <Widget>[
FlatButton(
onPressed: () async {
SharedPreferences sharedPreferences =
await SharedPreferences.getInstance();
setState(() {
sharedPreferences.setBool("islogin", false);
Navigator.of(context).push(MaterialPageRoute(
builder: (context) => main_page(),
));
});
},
child: Text(
"Logout",
style: TextStyle(color: Colors.white, fontSize: 16.0),
))
],
),
),
);
}
}
我也使用Shredprefrences
,但我认为这并不重要,我想关闭应用程序从我的主页请帮助我,谢谢。
6条答案
按热度按时间0s7z1bwu1#
请查看此答案,如果有效,请告诉我:
szqfcxe22#
以下是答案
example_page
代码这是我的第二页
问题是我正在从我的主页推送另一个页面,但我忘记删除第一页,因为我使用
Navigator.of(context).pushAndRemoveUntil( MaterialPageRoute(builder: (context) => my_example()(route) => false);
在导航到另一个页面之前删除了主页fkaflof63#
"这就是你应该如何使用"
8dtrkrch4#
vdzxcuhz5#
我一直在纠结这个问题,没有一个答案有帮助,但最后我在
BackButton
小部件源代码中找到了正确的答案。当我们在小部件上使用
WillPopScope
时,我们应该使用maybePop
而不是pop
方法,pop
方法强制Navigator
弹出最后推送的页面,以便让WillPopScope
小部件决定下一个操作。vmjh9lq96#
不要在Scaffold()上使用,如示例所示 Package MaterialApp