gpt4 book ai didi

android-studio - 如何修复 WillPopScope() 对我不起作用

转载 作者:行者123 更新时间:2023-12-03 03:21:30 24 4
gpt4 key购买 nike

我创建了两个页面,一个是登录页面和主页,但我想从主页关闭应用程序,我正在使用 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但我认为没关系,我想从我的 main_page 关闭应用程序,请帮助我,谢谢。

最佳答案

看看这个答案,让我知道它是否有效:

import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:flutter/services.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData(primarySwatch: Colors.amber),
home: SecondPage(),
);
}
}

class LoginPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
child: Center(
child: RaisedButton(
child: Text('Move to second page after Login'),
onPressed: () async {
SharedPreferences preferences =
await SharedPreferences.getInstance();

preferences.setBool("islogin", true);
// this will remove the login page after routing to the second page and then the stack will have only one page that is second page.
// so later you can use the willpopscape
Navigator.pushAndRemoveUntil(
context,
MaterialPageRoute(builder: (context) => SecondPage()),
ModalRoute.withName("/Home"));
},
)),
),
);
}
}

class SecondPage extends StatefulWidget {
@override
_SecondPageState createState() => _SecondPageState();
}

class _SecondPageState extends State<SecondPage> {
@override
void initState() {
check_login();

super.initState();
}

Future check_login() async {
SharedPreferences preferences = await SharedPreferences.getInstance();
if (preferences.getBool("islogin") == null)

//This above if statement will check if the parameter islogin is null then redirect to the login screeen
// else if the value is not null then i will not enter the if statement
setState(() {
Navigator.of(context).push(MaterialPageRoute(
builder: (context) => LoginPage(),
));
});
}

Future<bool> _onWillPop() async {

// This dialog will exit your app on saying yes
return (await showDialog(
context: context,
builder: (context) => new AlertDialog(
title: new Text('Are you sure?'),
content: new Text('Do you want to exit an App'),
actions: <Widget>[
new FlatButton(
onPressed: () => Navigator.of(context).pop(false),
child: new Text('No'),
),
new FlatButton(
onPressed: () => Navigator.of(context).pop(true),
child: new Text('Yes'),
),
],
),
)) ??
false;
}

@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: _onWillPop,
child: Scaffold(
appBar: new AppBar(
title: Text(
"Home",
style: new TextStyle(color: Colors.white),
),
actions: <Widget>[
FlatButton(
onPressed: () async {
SystemNavigator.pop();
},
child: Text(
"Logout",
style: TextStyle(color: Colors.white, fontSize: 16.0),
))
],
),
),
);
}
}

关于android-studio - 如何修复 WillPopScope() 对我不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62726522/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com