Flutter Flatter SharedReferences在应用程序重启后获取数据
我已经实现了用于存储当前登录用户的共享首选项,在用户每次登录后,我都可以获取用户名,但是在重新启动应用程序后,用户名消失了,但当前用户仍然登录。我附上了gif以便更好地解释。下面是我的代码 main.dartFlutter Flatter SharedReferences在应用程序重启后获取数据,flutter,Flutter,我已经实现了用于存储当前登录用户的共享首选项,在用户每次登录后,我都可以获取用户名,但是在重新启动应用程序后,用户名消失了,但当前用户仍然登录。我附上了gif以便更好地解释。下面是我的代码 main.dart Future<void> main() async { SharedPreferences prefs = await SharedPreferences.getInstance(); var usernamee = prefs.getString('yourusername
Future<void> main() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
var usernamee = prefs.getString('yourusername');
print(usernamee);
runApp(MaterialApp(
home: usernamee == null
? LoginPage()
: MainPage(
username: username,
)));
}
String username = '';
class LoginPage extends StatefulWidget {
@override
LoginPageState createState() => LoginPageState();
}
class LoginPageState extends State<LoginPage> {
TextEditingController user = new TextEditingController();
TextEditingController pass = new TextEditingController();
String txtmsg = '';
@override
void initState() {
super.initState();
}
Future<bool> _onWillPop() {
return 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;
}
Future<List> _login() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
final response =
await http.post("http://192.168.1.2/login/login.php", body: {
"username": user.text,
"password": pass.text,
});
var datauser = json.decode(response.body);
if (datauser.length == 0) {
setState(() {
txtmsg = "Username or password is wrong, please try again.";
Fluttertoast.showToast(msg: txtmsg);
});
} else {
if (datauser[0]['level'] == 'admin') {
prefs.setString('yourusername', '$username');
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (BuildContext ctx) => MainPage(
username: username,
)));
}
setState(() {
username = datauser[0]['username'];
});
}
print(username);
return datauser;
}
final logo = Hero(
tag: 'hero',
child: CircleAvatar(
backgroundColor: Colors.transparent,
radius: 48.0,
child: Image.asset('assets/images/ic_launcher.png'),
),
);
final forgotLabel = FlatButton(
child: Text(
'Forgot password?',
style: TextStyle(color: Colors.black54),
),
onPressed: () {},
);
@override
Widget build(BuildContext context) {
ScreenUtil.instance = ScreenUtil.getInstance()..init(context);
ScreenUtil.instance =
ScreenUtil(width: 750, height: 1334, allowFontScaling: true);
return WillPopScope(
onWillPop: _onWillPop,
child: Scaffold(
body: Center(
child: ListView(
shrinkWrap: true,
padding: EdgeInsets.only(left: 24.0, right: 24.0),
children: <Widget>[
logo,
SizedBox(height: 48.0),
Center(
child: FormUI(),
)
],
),
)));
}
Widget FormUI() {
return new Column(
children: <Widget>[
TextFormField(
controller: user,
decoration: InputDecoration(
hintText: 'Username',
contentPadding: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 20.0),
border:
OutlineInputBorder(borderRadius: BorderRadius.circular(20.0)),
),
validator: validateusername,
),
SizedBox(height: 18.0),
TextFormField(
controller: pass,
obscureText: true,
decoration: InputDecoration(
hintText: 'Password',
contentPadding: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 20.0),
border:
OutlineInputBorder(borderRadius: BorderRadius.circular(20.0)),
),
validator: validatepassword,
),
SizedBox(
height: ScreenUtil.getInstance().setHeight(40),
),
RaisedButton(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(24),
),
onPressed: () => _login(),
padding: EdgeInsets.all(12),
color: Colors.lightBlueAccent,
child: Text('Log In', style: TextStyle(color: Colors.white)),
),
forgotLabel,
],
);
}
String validateusername(String value) {
if (value.length == 0) {
return "Name is Required";
}
return null;
}
String validatepassword(String value) {
if (value.length == 0) {
return "Password is Required";
}
return null;
}
}
class MainPage extends StatefulWidget {
MainPage({this.username});
final String username;
@override
MainPageState createState() => MainPageState();
}
class MainPageState extends State<MainPage> {
Future<bool> _onWillPop() {
return 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;
}
void showWifiAlert() async {
var wifiEnabled = await getWifiStatus();
if (wifiEnabled) {
//Do stuff
} else {
AlertDialog(
title: Center(
child: Text('Alert'),
),
content: Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Expanded(
child: Text(
'Please connect to the internet',
textAlign: TextAlign.center,
style: TextStyle(
color: Colors.red,
),
),
)
],
),
actions: <Widget>[
FlatButton(
child: Text(
'Ok',
),
onPressed: () {
Navigator.of(context).pop();
},
),
],
);
}
}
Future<bool> getWifiStatus() async {
try {
final result = await InternetAddress.lookup('google.com');
if (result.isNotEmpty && result[0].rawAddress.isNotEmpty) {
print('connected');
return true;
}
} on SocketException catch (_) {
print('not connected');
return false;
}
}
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
String username;
print(username);
showWifiAlert();
return WillPopScope(
onWillPop: _onWillPop,
child: Scaffold(
appBar: AppBar(
title: Text('My App'),
),
body: Center(
child: Text(
widget.username,
),
),
drawer: new DrawerOnly()),
);
}
}
class DrawerOnly extends StatefulWidget {
@override
DrawerOnlyState createState() => DrawerOnlyState();
}
class DrawerOnlyState extends State<DrawerOnly> {
@override
Widget build(BuildContext ctxt) {
return new Drawer(
child: new ListView(
children: <Widget>[
new UserAccountsDrawerHeader(
accountName: Text('$username'),
accountEmail: null,
currentAccountPicture: CircleAvatar(
child: FlutterLogo(size: 42.0),
backgroundColor: Colors.white,
),
),
new ListTile(
leading: Icon(Icons.library_music),
title: Text('Fragment 1'),
onTap: () {
Navigator.pop(ctxt);
Navigator.push(ctxt,
new MaterialPageRoute(builder: (ctxt) => new FirstFragment()));
},
),
new ListTile(
leading: Icon(Icons.movie),
title: Text('Fragment 2'),
onTap: () {
Navigator.pop(ctxt);
Navigator.push(ctxt,
new MaterialPageRoute(builder: (ctxt) => new SecondFragment()));
},
),
new ListTile(
leading: Icon(Icons.exit_to_app),
title: Text('Logout'),
onTap: () async {
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.remove('yourusername');
Navigator.pushReplacement(ctxt,
MaterialPageRoute(builder: (BuildContext ctx) => LoginPage()));
/* Navigator.pop(ctxt);
Navigator.pushReplacementNamed(ctxt, '/landingpage'); */
},
),
],
));
}
}
Future main()异步{
SharedReferences prefs=等待SharedReferences.getInstance();
var usernamee=prefs.getString('yourusername');
打印(用户名);
runApp(材料应用程序)(
主页:usernamee==null
?登录页面()
:主页(
用户名:用户名,
)));
}
字符串用户名=“”;
loginpage.dart
Future<void> main() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
var usernamee = prefs.getString('yourusername');
print(usernamee);
runApp(MaterialApp(
home: usernamee == null
? LoginPage()
: MainPage(
username: username,
)));
}
String username = '';
class LoginPage extends StatefulWidget {
@override
LoginPageState createState() => LoginPageState();
}
class LoginPageState extends State<LoginPage> {
TextEditingController user = new TextEditingController();
TextEditingController pass = new TextEditingController();
String txtmsg = '';
@override
void initState() {
super.initState();
}
Future<bool> _onWillPop() {
return 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;
}
Future<List> _login() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
final response =
await http.post("http://192.168.1.2/login/login.php", body: {
"username": user.text,
"password": pass.text,
});
var datauser = json.decode(response.body);
if (datauser.length == 0) {
setState(() {
txtmsg = "Username or password is wrong, please try again.";
Fluttertoast.showToast(msg: txtmsg);
});
} else {
if (datauser[0]['level'] == 'admin') {
prefs.setString('yourusername', '$username');
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (BuildContext ctx) => MainPage(
username: username,
)));
}
setState(() {
username = datauser[0]['username'];
});
}
print(username);
return datauser;
}
final logo = Hero(
tag: 'hero',
child: CircleAvatar(
backgroundColor: Colors.transparent,
radius: 48.0,
child: Image.asset('assets/images/ic_launcher.png'),
),
);
final forgotLabel = FlatButton(
child: Text(
'Forgot password?',
style: TextStyle(color: Colors.black54),
),
onPressed: () {},
);
@override
Widget build(BuildContext context) {
ScreenUtil.instance = ScreenUtil.getInstance()..init(context);
ScreenUtil.instance =
ScreenUtil(width: 750, height: 1334, allowFontScaling: true);
return WillPopScope(
onWillPop: _onWillPop,
child: Scaffold(
body: Center(
child: ListView(
shrinkWrap: true,
padding: EdgeInsets.only(left: 24.0, right: 24.0),
children: <Widget>[
logo,
SizedBox(height: 48.0),
Center(
child: FormUI(),
)
],
),
)));
}
Widget FormUI() {
return new Column(
children: <Widget>[
TextFormField(
controller: user,
decoration: InputDecoration(
hintText: 'Username',
contentPadding: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 20.0),
border:
OutlineInputBorder(borderRadius: BorderRadius.circular(20.0)),
),
validator: validateusername,
),
SizedBox(height: 18.0),
TextFormField(
controller: pass,
obscureText: true,
decoration: InputDecoration(
hintText: 'Password',
contentPadding: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 20.0),
border:
OutlineInputBorder(borderRadius: BorderRadius.circular(20.0)),
),
validator: validatepassword,
),
SizedBox(
height: ScreenUtil.getInstance().setHeight(40),
),
RaisedButton(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(24),
),
onPressed: () => _login(),
padding: EdgeInsets.all(12),
color: Colors.lightBlueAccent,
child: Text('Log In', style: TextStyle(color: Colors.white)),
),
forgotLabel,
],
);
}
String validateusername(String value) {
if (value.length == 0) {
return "Name is Required";
}
return null;
}
String validatepassword(String value) {
if (value.length == 0) {
return "Password is Required";
}
return null;
}
}
class MainPage extends StatefulWidget {
MainPage({this.username});
final String username;
@override
MainPageState createState() => MainPageState();
}
class MainPageState extends State<MainPage> {
Future<bool> _onWillPop() {
return 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;
}
void showWifiAlert() async {
var wifiEnabled = await getWifiStatus();
if (wifiEnabled) {
//Do stuff
} else {
AlertDialog(
title: Center(
child: Text('Alert'),
),
content: Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Expanded(
child: Text(
'Please connect to the internet',
textAlign: TextAlign.center,
style: TextStyle(
color: Colors.red,
),
),
)
],
),
actions: <Widget>[
FlatButton(
child: Text(
'Ok',
),
onPressed: () {
Navigator.of(context).pop();
},
),
],
);
}
}
Future<bool> getWifiStatus() async {
try {
final result = await InternetAddress.lookup('google.com');
if (result.isNotEmpty && result[0].rawAddress.isNotEmpty) {
print('connected');
return true;
}
} on SocketException catch (_) {
print('not connected');
return false;
}
}
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
String username;
print(username);
showWifiAlert();
return WillPopScope(
onWillPop: _onWillPop,
child: Scaffold(
appBar: AppBar(
title: Text('My App'),
),
body: Center(
child: Text(
widget.username,
),
),
drawer: new DrawerOnly()),
);
}
}
class DrawerOnly extends StatefulWidget {
@override
DrawerOnlyState createState() => DrawerOnlyState();
}
class DrawerOnlyState extends State<DrawerOnly> {
@override
Widget build(BuildContext ctxt) {
return new Drawer(
child: new ListView(
children: <Widget>[
new UserAccountsDrawerHeader(
accountName: Text('$username'),
accountEmail: null,
currentAccountPicture: CircleAvatar(
child: FlutterLogo(size: 42.0),
backgroundColor: Colors.white,
),
),
new ListTile(
leading: Icon(Icons.library_music),
title: Text('Fragment 1'),
onTap: () {
Navigator.pop(ctxt);
Navigator.push(ctxt,
new MaterialPageRoute(builder: (ctxt) => new FirstFragment()));
},
),
new ListTile(
leading: Icon(Icons.movie),
title: Text('Fragment 2'),
onTap: () {
Navigator.pop(ctxt);
Navigator.push(ctxt,
new MaterialPageRoute(builder: (ctxt) => new SecondFragment()));
},
),
new ListTile(
leading: Icon(Icons.exit_to_app),
title: Text('Logout'),
onTap: () async {
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.remove('yourusername');
Navigator.pushReplacement(ctxt,
MaterialPageRoute(builder: (BuildContext ctx) => LoginPage()));
/* Navigator.pop(ctxt);
Navigator.pushReplacementNamed(ctxt, '/landingpage'); */
},
),
],
));
}
}
class LoginPage扩展StatefulWidget{
@凌驾
LoginPagentate createState()=>LoginPagentate();
}
类LoginPagentate扩展了状态{
TextEditingController用户=新建TextEditingController();
TextEditingController pass=新的TextEditingController();
字符串txtmsg='';
@凌驾
void initState(){
super.initState();
}
未来(willpop){
返回显示对话框(
上下文:上下文,
生成器:(上下文)=>新建警报对话框(
标题:新文本(“你确定吗?”),
内容:新文本(“是否要退出应用程序”),
行动:[
新扁平按钮(
onPressed:()=>Navigator.of(context.pop)(false),
子项:新文本(“否”),
),
新扁平按钮(
onPressed:()=>Navigator.of(context.pop)(true),
子项:新文本(“是”),
),
],
),
) ??
虚假的;
}
Future\u login()异步{
SharedReferences prefs=等待SharedReferences.getInstance();
最后答复=
等待http.post(“http://192.168.1.2/login/login.php“,主体:{
“用户名”:user.text,
“密码”:pass.text,
});
var datauser=json.decode(response.body);
如果(datauser.length==0){
设置状态(){
txtmsg=“用户名或密码错误,请重试。”;
Toast.showtoos(msg:txtmsg);
});
}否则{
如果(数据用户[0]['level']=='admin'){
prefs.setString('yourusername','$username');
导航器。更换(
上下文
材料路线(
生成器:(BuildContext ctx)=>MainPage(
用户名:用户名,
)));
}
设置状态(){
用户名=数据用户[0]['username'];
});
}
打印(用户名);
返回数据用户;
}
最终标志=英雄(
标签:“英雄”,
孩子:圆环星(
背景颜色:颜色。透明,
半径:48.0,
子项:Image.asset('assets/images/ic_launcher.png'),
),
);
最终锻件标签=扁平按钮(
子:文本(
“忘记密码了吗?”,
样式:TextStyle(颜色:Colors.black54),
),
按下:(){},
);
@凌驾
小部件构建(构建上下文){
ScreenUtil.instance=ScreenUtil.getInstance()…初始化(上下文);
ScreenUtil.instance=
ScreenUtil(宽度:750,高度:1334,allowFontScaling:true);
返回式示波器(
onWillPop:_onWillPop,
孩子:脚手架(
正文:中(
子:ListView(
收缩膜:对,
填充:仅限边设置(左:24.0,右:24.0),
儿童:[
标志
尺寸箱(高度:48.0),
居中(
子项:FormUI(),
)
],
),
)));
}
控件FormUI(){
返回新列(
儿童:[
TextFormField(
控制器:用户,
装饰:输入装饰(
hintText:'用户名',
内容填充:来自LTRB(20.0、10.0、20.0、20.0)的EdgeInsets,
边界:
OutlineInputBorder(borderRadius:borderRadius.circular(20.0)),
),
验证程序:validateusername,
),
尺寸箱(高度:18.0),
TextFormField(
控制员:通过,
蒙昧文字:对,
装饰:输入装饰(
hintText:'密码',
内容填充:来自LTRB(20.0、10.0、20.0、20.0)的EdgeInsets,
边界:
OutlineInputBorder(borderRadius:borderRadius.circular(20.0)),
),
validator:validatepassword,
),
大小盒子(
高度:ScreenUtil.getInstance().setHeight(40),
),
升起的按钮(
形状:圆形矩形边框(
边界半径:边界半径。圆形(24),
),
onPressed:()=>\u login(),
填充:边缘设置。全部(12),
颜色:Colors.lightBlueAccent,
子项:文本('登录',样式:TextStyle(颜色:Colors.white)),
),
放弃标签,
],
);
}
字符串validateusername(字符串值){
如果(value.length==0){
返回“名称为必填项”;
}
返回null;
}
字符串验证密码(字符串值){
如果(value.length==0){
返回“需要密码”;
}
返回null;
}
}
mainpage.dart
Future<void> main() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
var usernamee = prefs.getString('yourusername');
print(usernamee);
runApp(MaterialApp(
home: usernamee == null
? LoginPage()
: MainPage(
username: username,
)));
}
String username = '';
class LoginPage extends StatefulWidget {
@override
LoginPageState createState() => LoginPageState();
}
class LoginPageState extends State<LoginPage> {
TextEditingController user = new TextEditingController();
TextEditingController pass = new TextEditingController();
String txtmsg = '';
@override
void initState() {
super.initState();
}
Future<bool> _onWillPop() {
return 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;
}
Future<List> _login() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
final response =
await http.post("http://192.168.1.2/login/login.php", body: {
"username": user.text,
"password": pass.text,
});
var datauser = json.decode(response.body);
if (datauser.length == 0) {
setState(() {
txtmsg = "Username or password is wrong, please try again.";
Fluttertoast.showToast(msg: txtmsg);
});
} else {
if (datauser[0]['level'] == 'admin') {
prefs.setString('yourusername', '$username');
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (BuildContext ctx) => MainPage(
username: username,
)));
}
setState(() {
username = datauser[0]['username'];
});
}
print(username);
return datauser;
}
final logo = Hero(
tag: 'hero',
child: CircleAvatar(
backgroundColor: Colors.transparent,
radius: 48.0,
child: Image.asset('assets/images/ic_launcher.png'),
),
);
final forgotLabel = FlatButton(
child: Text(
'Forgot password?',
style: TextStyle(color: Colors.black54),
),
onPressed: () {},
);
@override
Widget build(BuildContext context) {
ScreenUtil.instance = ScreenUtil.getInstance()..init(context);
ScreenUtil.instance =
ScreenUtil(width: 750, height: 1334, allowFontScaling: true);
return WillPopScope(
onWillPop: _onWillPop,
child: Scaffold(
body: Center(
child: ListView(
shrinkWrap: true,
padding: EdgeInsets.only(left: 24.0, right: 24.0),
children: <Widget>[
logo,
SizedBox(height: 48.0),
Center(
child: FormUI(),
)
],
),
)));
}
Widget FormUI() {
return new Column(
children: <Widget>[
TextFormField(
controller: user,
decoration: InputDecoration(
hintText: 'Username',
contentPadding: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 20.0),
border:
OutlineInputBorder(borderRadius: BorderRadius.circular(20.0)),
),
validator: validateusername,
),
SizedBox(height: 18.0),
TextFormField(
controller: pass,
obscureText: true,
decoration: InputDecoration(
hintText: 'Password',
contentPadding: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 20.0),
border:
OutlineInputBorder(borderRadius: BorderRadius.circular(20.0)),
),
validator: validatepassword,
),
SizedBox(
height: ScreenUtil.getInstance().setHeight(40),
),
RaisedButton(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(24),
),
onPressed: () => _login(),
padding: EdgeInsets.all(12),
color: Colors.lightBlueAccent,
child: Text('Log In', style: TextStyle(color: Colors.white)),
),
forgotLabel,
],
);
}
String validateusername(String value) {
if (value.length == 0) {
return "Name is Required";
}
return null;
}
String validatepassword(String value) {
if (value.length == 0) {
return "Password is Required";
}
return null;
}
}
class MainPage extends StatefulWidget {
MainPage({this.username});
final String username;
@override
MainPageState createState() => MainPageState();
}
class MainPageState extends State<MainPage> {
Future<bool> _onWillPop() {
return 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;
}
void showWifiAlert() async {
var wifiEnabled = await getWifiStatus();
if (wifiEnabled) {
//Do stuff
} else {
AlertDialog(
title: Center(
child: Text('Alert'),
),
content: Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Expanded(
child: Text(
'Please connect to the internet',
textAlign: TextAlign.center,
style: TextStyle(
color: Colors.red,
),
),
)
],
),
actions: <Widget>[
FlatButton(
child: Text(
'Ok',
),
onPressed: () {
Navigator.of(context).pop();
},
),
],
);
}
}
Future<bool> getWifiStatus() async {
try {
final result = await InternetAddress.lookup('google.com');
if (result.isNotEmpty && result[0].rawAddress.isNotEmpty) {
print('connected');
return true;
}
} on SocketException catch (_) {
print('not connected');
return false;
}
}
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
String username;
print(username);
showWifiAlert();
return WillPopScope(
onWillPop: _onWillPop,
child: Scaffold(
appBar: AppBar(
title: Text('My App'),
),
body: Center(
child: Text(
widget.username,
),
),
drawer: new DrawerOnly()),
);
}
}
class DrawerOnly extends StatefulWidget {
@override
DrawerOnlyState createState() => DrawerOnlyState();
}
class DrawerOnlyState extends State<DrawerOnly> {
@override
Widget build(BuildContext ctxt) {
return new Drawer(
child: new ListView(
children: <Widget>[
new UserAccountsDrawerHeader(
accountName: Text('$username'),
accountEmail: null,
currentAccountPicture: CircleAvatar(
child: FlutterLogo(size: 42.0),
backgroundColor: Colors.white,
),
),
new ListTile(
leading: Icon(Icons.library_music),
title: Text('Fragment 1'),
onTap: () {
Navigator.pop(ctxt);
Navigator.push(ctxt,
new MaterialPageRoute(builder: (ctxt) => new FirstFragment()));
},
),
new ListTile(
leading: Icon(Icons.movie),
title: Text('Fragment 2'),
onTap: () {
Navigator.pop(ctxt);
Navigator.push(ctxt,
new MaterialPageRoute(builder: (ctxt) => new SecondFragment()));
},
),
new ListTile(
leading: Icon(Icons.exit_to_app),
title: Text('Logout'),
onTap: () async {
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.remove('yourusername');
Navigator.pushReplacement(ctxt,
MaterialPageRoute(builder: (BuildContext ctx) => LoginPage()));
/* Navigator.pop(ctxt);
Navigator.pushReplacementNamed(ctxt, '/landingpage'); */
},
),
],
));
}
}
class主页扩展StatefulWidget{
主页({this.username});
最终字符串用户名;
@凌驾
MainPageState createState()=>MainPageState();
}
类MainPageState扩展状态{
未来(willpop){
返回显示对话框(
上下文:上下文,
生成器:(上下文)=>新建警报对话框(
标题:新文本(“你确定吗?”),
内容:新文本(“是否要退出应用程序”),
行动:[
新扁平按钮(
onPressed:()=>Navigator.of(context.pop)(false),
子项:新文本(“否”),
),
新扁平按钮(
onPressed:()=>Navigator.of(context.pop)(true),
子项:新文本(“是”),
),
],
),
) ??
虚假的;
}
void showWifiAlert()异步{
var wifiEnabled=wait getWifiStatus();
如果(可连接){
//做事
}否则{
警报对话框(
标题:中心(
子项:文本(“警报”),
),
内容:行(
mainAxisAlignment:mainAxisAlignment.center,
crossAxisAlignment:crossAxisAlignment.center,
儿童:[
扩大(
子:文本(
“请连接到internet”,