Hola, a ver si alguien puede ayudar, en este código, de login no muestra ningún resultado JSON, la pagina totalmente en blanco,
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'];
$password = md5($_POST['password']);
$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 originalclass 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;
}
}
}