Flutter Flatter SharedReferences在应用程序重启后获取数据

Flutter Flatter SharedReferences在应用程序重启后获取数据,flutter,Flutter,我已经实现了用于存储当前登录用户的共享首选项,在用户每次登录后,我都可以获取用户名,但是在重新启动应用程序后,用户名消失了,但当前用户仍然登录。我附上了gif以便更好地解释。下面是我的代码 main.dart Future<void> main() async { SharedPreferences prefs = await SharedPreferences.getInstance(); var usernamee = prefs.getString('yourusername

我已经实现了用于存储当前登录用户的共享首选项,在用户每次登录后,我都可以获取用户名,但是在重新启动应用程序后,用户名消失了,但当前用户仍然登录。我附上了gif以便更好地解释。下面是我的代码

main.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'); */
      },
    ),
  ],
));
}
}
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”,