deberia salir asi:
{"value":1,"message":"Inicio de sesión correcto"}
Login.php
Código PHP:
Ver original
<?php require "connect.php"; if($_SERVER["REQUEST_METHOD"] == "POST"){ # code... $username = $_POST['username']; $sql = "SELECT * FROM users WHERE username='$username' AND password='$password'"; # code... $response['value']=1; $response['message']="Inicio de sesión correcto"; $username = $result['username']; $nama = $result['nama']; }else { # code... $response['value'] = 0; $response['message'] = "error de inicio de sesión"; } } ?>
llamada asíncrona, código de inicio session en dart:
Código PHP:
Ver original
class Login extends StatefulWidget { @override _LoginState createState() => _LoginState(); } enum LoginStatus { notSignIn, signIn, signInUsers } class _LoginState extends State<Login> { LoginStatus _loginStatus = LoginStatus.notSignIn; String username, password; final _key = new GlobalKey<FormState>(); bool _secureText = true; showHide() { setState(() { _secureText = !_secureText; }); } var _autovalidate = true; check() { final form = _key.currentState; if (form.validate()) { form.save(); login(); } else { setState(() { _autovalidate = true; }); } } login() async { final response = await http.post(BaseUrl.login, body: {"username": username, "password": password}); final data = jsonDecode(response.body); int value = data['value']; String pesan = data['message']; String usernameAPI = data['username']; String namaAPI = data['nama']; String id = data['id']; String level = data['level']; if (value == 1) { //Control flow pengecekan Level if (level == "1") { setState(() { _loginStatus = LoginStatus.signIn; savePref(value, usernameAPI, namaAPI, id, level); }); } else { setState(() { _loginStatus = LoginStatus.signInUsers; savePref(value, usernameAPI, namaAPI, id, level); }); } print(pesan); } else { print(pesan); } } savePref( int value, String username, String nama, String id, String level) async { SharedPreferences preferences = await SharedPreferences.getInstance(); setState(() { preferences.setInt("value", value); preferences.setString("nama", nama); preferences.setString("username", username); preferences.setString("id", id); preferences.setString("level", level); preferences.commit(); }); } var value; getPref() async { SharedPreferences preferences = await SharedPreferences.getInstance(); setState(() { value = preferences.getString("level"); _loginStatus = value == "1" ? LoginStatus.signIn : value == "2" ? LoginStatus.signInUsers : LoginStatus.notSignIn; }); } signOut() async { SharedPreferences preferences = await SharedPreferences.getInstance(); setState(() { preferences.setInt("value", null); preferences.setString("level", null); preferences.commit(); _loginStatus = LoginStatus.notSignIn; }); } @override void initState() { // TODO: implement initState super.initState(); getPref(); } @override Widget build(BuildContext context) { switch (_loginStatus) { case LoginStatus.notSignIn: return Scaffold( appBar: AppBar(), body: Form( autovalidate: _autovalidate, child: ListView( padding: EdgeInsets.all(16.0), children: <Widget>[ TextFormField( validator: (e) { if (!e.contains("@")) { return "Wrong format email for username"; } else { return null; } }, onSaved: (e) => username = e, decoration: InputDecoration( labelText: "Username", ), ), TextFormField( obscureText: _secureText, onSaved: (e) => password = e, decoration: InputDecoration( labelText: "Password", suffixIcon: IconButton( onPressed: showHide, icon: Icon(_secureText ? Icons.visibility_off : Icons.visibility), ), ), ), MaterialButton( onPressed: () { check(); }, child: Text("Login"), ), InkWell( onTap: () { Navigator.of(context).push( MaterialPageRoute(builder: (context) => Register())); }, child: Text( "Create a new account, in here", textAlign: TextAlign.center, ), ), ], ), ), ); break; case LoginStatus.signIn: return MainMenu(signOut); break; case LoginStatus.signInUsers: return MenuUsers(signOut); break; } } }