flutter如何访问mysql数据库_Flutter:如何保持使用mysql登录

你好,我是新手,我在应用程序中使用MySQL,我想在重新打开应用程序后保持用户登录状态,我尝试使用共享首选项,老实说,我被卡住了,没有知道该怎么办,这是我的登录页面代码,那么在这种情况下该怎么办?

import 'dart:io';

import 'package:data_connection_checker/data_connection_checker.dart';

import 'package:flutter/material.dart';

import 'package:flutter_custom_clippers/flutter_custom_clippers.dart';

import 'package:fluttertoast/fluttertoast.dart';

import 'package:font_awesome_flutter/font_awesome_flutter.dart';

import 'package:giffy_dialog/giffy_dialog.dart';

import 'dart:async';

import 'dart:convert';

import 'package:http/http.dart' as http;

import 'package:rounded_loading_button/rounded_loading_button.dart';

String email = '';

class Login extends StatefulWidget {

@override

_LoginState createState() => _LoginState();

}

class _LoginState extends State {

final RoundedLoadingButtonController _btnController = RoundedLoadingButtonController();

TextEditingController email = TextEditingController();

TextEditingController pass = TextEditingController();

void _btndo () async{

Timer(Duration(seconds: 4),(){

_btnController.success();

_login();

});

}

Future _login() async {

final response = await http.post("http://msc-mu.com/login_app.php", body: {

"email": email.text,

"password": pass.text,

});

var userdata = json.decode(response.body);

if (userdata == 0) {

setState(() {

Fluttertoast.showToast(

msg: 'Login Failed',

toastLength: Toast.LENGTH_SHORT,

gravity: ToastGravity.BOTTOM,

timeInSecForIosWeb: 1,

backgroundColor: Colors.lightBlueAccent,

textColor: Colors.white,

fontSize: 16.0);

});

} else {

if (userdata[0]['type'] == 'Admin') {

setState(() {

Navigator.popAndPushNamed(context, '/Admin');

});

} else if (userdata[0]['type'] == 'Student') {

setState(() {

Navigator.pushReplacementNamed(context, '/Student');

});

} else if (userdata[0]['type'] == 'Representative') {

Navigator.pushReplacementNamed(context, '/Representative');

}

}

return userdata;

}

@override

void initState() {

var listener = DataConnectionChecker();

listener.onStatusChange.listen((status) {

switch (status) {

case DataConnectionStatus.connected:

Fluttertoast.showToast(

msg: 'connected',

toastLength: Toast.LENGTH_SHORT,

gravity: ToastGravity.BOTTOM,

timeInSecForIosWeb: 1,

backgroundColor: Colors.lightBlueAccent,

textColor: Colors.white,

fontSize: 16.0);

break;

case DataConnectionStatus.disconnected:

showDialog(

barrierDismissible: false,

context: context,

builder: (context) => AssetGiffyDialog(

image: Image.asset('images/wait_connection.gif'),

title: Text(

'Sorry !! , But You Are Not Connected',

textAlign: TextAlign.center,

style: TextStyle(

fontSize: 22.0, fontWeight: FontWeight.w600),

),

description: Text(

'Our App Require internet connection , Can you please Reconnect and try again by pressing OK ?',

textAlign: TextAlign.center,

),

entryAnimation: EntryAnimation.TOP_RIGHT,

onlyOkButton: true,

onOkButtonPressed: () {

setState(() {

void check() async {

try {

final result =

await InternetAddress.lookup('google.com');

if (result.isNotEmpty &&

result[0].rawAddress.isNotEmpty) {

Navigator.pop(context, true);

Fluttertoast.showToast(

msg: 'connected Again',

toastLength: Toast.LENGTH_SHORT,

gravity: ToastGravity.BOTTOM,

timeInSecForIosWeb: 1,

backgroundColor: Colors.lightBlueAccent,

textColor: Colors.white,

fontSize: 16.0);

}

} on SocketException catch (_) {

Fluttertoast.showToast(

msg: 'Still not connected',

toastLength: Toast.LENGTH_SHORT,

gravity: ToastGravity.BOTTOM,

timeInSecForIosWeb: 1,

backgroundColor: Colors.lightBlueAccent,

textColor: Colors.white,

fontSize: 16.0);

}

}

check();

});

},

));

}

});

super.initState();

}

@override

Widget build(BuildContext context) {

return Scaffold(

body: SingleChildScrollView(

child: Container(

height: MediaQuery.of(context).size.height,

width: MediaQuery.of(context).size.width,

child: Column(

children: [

ClipPath(

clipper: OvalBottomBorderClipper(),

child: Image(

image: AssetImage('images/logo1.png'),

width: double.infinity,

height: MediaQuery.of(context).size.height / 2.9,

fit: BoxFit.cover,

),

),

SizedBox(

height: 10.0,

),

Padding(

padding: EdgeInsets.symmetric(vertical: 10.0, horizontal: 50.0),

child: TextFormField(

controller: email,

keyboardType: TextInputType.emailAddress,

decoration: InputDecoration(

contentPadding: EdgeInsets.symmetric(vertical: 10.0),

fillColor: Colors.transparent,

filled: true,

hintText: 'Email Address',

prefixIcon: Icon(

FontAwesomeIcons.mailBulk,

size: 30.0,

)),

),

),

Padding(

padding: EdgeInsets.symmetric(vertical: 10.0, horizontal: 50.0),

child: TextFormField(

obscureText: true,

controller: pass,

keyboardType: TextInputType.text,

decoration: InputDecoration(

contentPadding: EdgeInsets.symmetric(vertical: 10.0),

fillColor: Colors.transparent,

filled: true,

hintText: 'Password',

prefixIcon: Icon(

FontAwesomeIcons.key,

size: 30.0,

)),

),

),

SizedBox(

height: 10.0,

),

RoundedLoadingButton(

color: Theme.of(context).primaryColor,

child: Text('Login',style: TextStyle(color: Colors.white)),

controller: _btnController,

onPressed: _btndo,

),

],

),

),

),

);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值