Issue
I created two pages one is login and main page but i want close app from main page i am using Willpopscope
but it is not working for me i have tried all things but the onwillpop
method is not calling please help me thank you.
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),
))
],
),
),
);
}
}
I am also using Shredprefrences
but i think it does not matter i want close app from my main_page please help me for this Thank you.
Solution
Just check out this answer and let me know if it works:
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),
))
],
),
),
);
}
}
Answered By - Sagar Acharya
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.