php 文件:
$email=$_POST['email'];
$passworda=$_POST['passworda'];
$sql="SELECT * FROM user WHERE email='".$email."'AND passworda='".$password."' ";
$result=mysqli_query($db,$sql);
$count=mysqli_num_rows($result);
if($count>=1){
echo json_encode("success");
}
else
{
echo json_encode("error");
}
登录页面 Flutter:
class Login extends StatelessWidget {
TextEditingController email = TextEditingController();
TextEditingController password = TextEditingController();
Future login(BuildContext cont) async {
if (email.text == "" || password.text == "") {
Fluttertoast.showToast(
msg: "please complete!",
toastLength: Toast.LENGTH_SHORT,
gravity: ToastGravity.CENTER,
fontSize: 16.0,
);
} else {
var url = "http://192.168.43.150/v1_flutter/lib/php/connection.php";
var response = await http.post(Uri.parse(url), body: {
"email": email.text,
"pass": password.text,
}, headers: {"Accept":"applicarion/json"});
var data = jsonDecode(response.body);
if (data == "success") {
Navigator.pop(cont);
Navigator.pushNamed(cont, "/registre");
} else {
Fluttertoast.showToast(
msg: "The user and password does not exist!",
toastLength: Toast.LENGTH_SHORT,
gravity: ToastGravity.CENTER,
fontSize: 16.0,
);
}
}}
控制台:
E/flutter (6084): [错误:flutter/lib/ui/ui_dart_state.cc(198)] 未处理的异常:FormatException:意外的字符(位于 字符 1) E/颤振(6084):
E/颤动(6084):^ E/颤振(6084): E/颤振(6084): #0 _ChunkedJsonParser.fail (dart:convert-patch/convert_patch.dart:1383:5) E/颤振(6084): #1 _ChunkedJsonParser.parseNumber (dart:convert-patch/convert_patch.dart:1250:9) E/颤振(6084): #2 _ChunkedJsonParser.parse (dart:convert-patch/convert_patch.dart:915:22) E/颤振(6084): #3 _parseJson (dart:convert-patch/convert_patch.dart:35:10) E/颤振(6084): #4 JsonDecoder.convert (dart:convert/json.dart:612:36) E/颤振(6084): #5 JsonCodec.decode (dart:convert/json.dart:216:41) E/颤振(6084): #6 jsonDecode (dart:convert/json.dart:155:10) E/颤振(6084): #7 Login.login (package:mes_v1/pages/Authentification/login.dart:25:18) E/颤振(6084): E/颤振(6084):
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
您的代码看起来确实容易出错,但重点关注您的问题:异常看起来很清楚,您的响应解析正在中断。 (我还想说,你应该用 try/catch 包装你的代码,以防止任何代码破坏和正确捕获问题)。
让我们解决您的问题:
var data = jsonDecode(response.body);这会将您的字符串 (response.body) 转换为 json,这意味着
data是Map或List (其中动态是 Map 或另一个嵌套列表),因此以下内容没有任何意义 if(数据==“成功”){现在,让我们看一下您的 php 代码:
echo json_encode("成功");我不是 php 专家,但从文档来看它应该像下面这样使用:
$response = array("result" => "Success"); echo json_encode($response);现在让我们回到您的 dart 代码:
var success = false; try{ final baseUrl = "http://192.168.43.150"; // Use final wherever you can final url = "$baseUrl/v1_flutter/lib/php/connection.php"; // Improving flexibility final body ={
"email": email.text,
"pass": password.text,
}; // Decouple in variables for readability
final headers = {"Accept":"application/json"}; // Fix typo
final response = await http.post(Uri.parse(url), body: body, headers: headers);
final data = jsonDecode(response.body);
success = data["result"] == "Success";
} catch(e) {
print("Catched an error!");
print(e);
success = false;
}
if(success) {
...