好的,所以我对为什么收到此错误感到困惑。我正在尝试向api端点发出发布请求。这是我的功能,它将电子邮件和密码数据传递到另一个进行api调用的功能
import 'dart:async';
import 'dart:convert';
submit() async {
var res = await LoginAPI().loginData(
{email: _emailController.value, password: _passwordController.value});
var body = json.decode(res);
print(body);
}
这是我进行api调用的函数。
import 'package:http/http.dart' as http;
loginData(data) async {
var fullUrl = _url + "v1/users/login";
return await http.post(fullUrl, body: jsonEncode(data), headers: _setHeaders());
}
_setHeaders() => {
'Content-Type': 'application/json',
'Accept': 'application/json'
};
当我尝试在邮递员上到达那个终点时,我得到以下数据
{
"success": {
"user": {
"id": 1,
"first_name": "Senny",
"last_name": "Demo",
"bio": "I am a new bio",
"email": "senny_demo@gmail.com",
"phone_number": "081697565335",
"default_line": "081697565335",
"balance": 0,
"lines": [
{
"id": 1,
"user_id": 1,
"J_Number": "081697565335",
"account_code": "081697565335",
"pin": "1234",
"type": "j_number",
"created_at": "2019-11-25 13:21:27",
"updated_at": "2019-11-25 13:21:27"
}
],
"username": "senny_demo",
"email_verified": true
}
}
但是在我的flutter应用程序中,出现以下错误。将对象转换为可编码对象失败:_LinkedHashMap len:2 任何帮助将不胜感激
答案 0 :(得分:1)
我发现您的代码有2个问题。
您正在将电子邮件和密码变量作为Map的键进行传递。您可能应该将它们设置为字符串:{'email': _emailController.value, 'password': _passwordController.value}
您正在尝试从json解码整个Response对象。我想您想对它的主体进行解码:var body = json.decode(res.body);
答案 1 :(得分:1)
您正在尝试对Http Response执行jsonDecode。请尝试解码响应正文,而不是解码带有res.body
的响应。完整代码如下
import 'dart:async';
import 'dart:convert';
submit() async {
var res = await LoginAPI().loginData(
{email: _emailController.value, password: _passwordController.value});
var body = json.decode(res.body);
print(body);
}
其次,请尝试按以下字符串格式将“键”放入地图中:
{'email': _emailController.value, 'password': _passwordController.value}