颤振错误:预期类型为“FutureOr<List<dynamic>>”的值,但得到类型为“_JsonMap”的值之一

Posted

技术标签:

【中文标题】颤振错误:预期类型为“FutureOr<List<dynamic>>”的值,但得到类型为“_JsonMap”的值之一【英文标题】:Flutter Error: Expected a value of type 'FutureOr<List<dynamic>>', but got one of type '_JsonMap' 【发布时间】:2021-11-04 15:42:39 【问题描述】:

当我尝试解码 JSON 时,出现此错误:

需要一个“FutureOr”类型的值,但得到一个“_JsonMap”类型的值

这是我从 API 获取数据的代码:

Future<List> getData() async 
    final prefs = await SharedPreferences.getInstance();
    final key = 'token';
    final value = prefs.get(key) ?? 0;

    String myUrl = "$serverUrl/userchecks";
    http.Response response = await http.get(Uri.parse(myUrl), headers: 
      'Accept': 'application/json',
      'Authorization': 'Bearer $value'
    );

    print('Response status : $response.statusCode');

    return json.decode(response.body);
  

【问题讨论】:

分享您的 JSON 响应。 【参考方案1】:

您从 JSON 中返回的值不是 List,而是 JSON 映射,因此您必须像这样更改 Future 返回类型:

Future<Map<String,dynamic>> getData() async 
    final prefs = await SharedPreferences.getInstance();
    final key = 'token';
    final value = prefs.get(key) ?? 0;

    String myUrl = "$serverUrl/userchecks";
    http.Response response = await http.get(Uri.parse(myUrl), headers: 
      'Accept': 'application/json',
      'Authorization': 'Bearer $value'
    );

    print('Response status : $response.statusCode');

    return json.decode(response.body);
  

或者你可以按照here的回答来做。

【讨论】:

以上是关于颤振错误:预期类型为“FutureOr<List<dynamic>>”的值,但得到类型为“_JsonMap”的值之一的主要内容,如果未能解决你的问题,请参考以下文章

错误:未为颤振中的“FirebaseMessaging”类型定义“配置”方法

没有为“ThemeProvider”类型定义“of”方法。在颤振中

将错误响应转换为特定模型 - 斩波器颤振

颤振列表错误参数类型'List'不能分配给参数类型'String'

我无法在颤振 Firestore 上将字段设置为 NULL

颤振测试块错误类型'Null'不是类型的子类型