在api调用上将对象转换为可编码对象失败:_LinkedHashMap len:2

时间:2019-11-26 12:03:51

标签: flutter

好的,所以我对为什么收到此错误感到困惑。我正在尝试向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 任何帮助将不胜感激

2 个答案:

答案 0 :(得分:1)

我发现您的代码有2个问题。

  1. 您正在将电子邮件和密码变量作为Map的键进行传递。您可能应该将它们设置为字符串:{'email': _emailController.value, 'password': _passwordController.value}

  2. 您正在尝试从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}