首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >颤动-类型“List<dynamic>”不是类型“Map<dynamic,dynamic>”的子类型

颤动-类型“List<dynamic>”不是类型“Map<dynamic,dynamic>”的子类型
EN

Stack Overflow用户
提问于 2021-10-13 15:09:18
回答 3查看 80关注 0票数 2

我刚刚接触flutter,我认为这是一个新手问题。

我正在尝试获取在我的API上调用的数据并将其保存到我的模型中,但它有一个错误类型'List‘不是'Map’类型的子类型。

这是我的模型的副本

代码语言:javascript
复制
class AdTemplate{
  final int id; 
  final String filePath; 
  final String notification; 
  final String status; 
  final int whenAdded; 

  AdTemplate(
      {this.id, 
      this.filePath, 
      this.notification,
      this.status, 
      this.whenAdded});

  factory AdTemplate.fromJson(Map<String, dynamic> json) {
    return  AdTemplate(
      id: json['ID'], 
      filePath: json['FilePath'],
      notification: json['Notification'], 
      status: json['Status'], 
      whenAdded: json['WhenAdded']
    );
  }
}

这是我的函数

代码语言:javascript
复制
Future<AdTemplate> getActiveBannerNotif() async {  
    try { 
      String url = 'https://api/path/'; 
      var res = await http.get(url);  
      final Map data = convert.jsonDecode(res.body);

      if (res.statusCode == 200) { 
        print("Data Fetch!");    
        AdTemplate template = AdTemplate.fromJson(data);  

        return template;
      } else {
        print('No data.'); 

        return null;
      }
    } catch (e) {
      print(e);
      return null;
    } 
}

这是我从API获得的示例数据

代码语言:javascript
复制
[{"ID":49,"FilePath":"20210903t171244.png","Notification":"ACT","WhenAdded":1630689165,"Status":"INA"}]
EN

回答 3

Stack Overflow用户

发布于 2021-10-13 15:30:03

API返回JSON数组而不是json对象,因此是List而不是Map。

尝试:

代码语言:javascript
复制
if (res.statusCode == 200) { 
    print("Data Fetch!");    
    AdTemplate template = AdTemplate.fromJson(json.decode(utf8.decode(res.bodyBytes)));  

    return template;
  }
票数 0
EN

Stack Overflow用户

发布于 2021-10-13 15:54:55

您正在从您的API接收一个数组,这会导致错误。按如下方式更改以访问数组中的单个元素

代码语言:javascript
复制
Future<AdTemplate> getActiveBannerNotif() async {  
    try { 
      String url = 'https://api/path/'; 
      var res = await http.get(url);  
      
      if (res.statusCode == 200) { 
        print("Data Fetch!");  
        final data = convert.jsonDecode(res.body);
        AdTemplate template = AdTemplate.fromJson(data[0]);  

        return template;
      } else {
        print('No data.'); 

        return null;
      }
    } catch (e) {
      print(e);
      return null;
    } 
}
票数 0
EN

Stack Overflow用户

发布于 2021-10-14 10:36:11

您的api返回一个列表

代码语言:javascript
复制
[{"ID":49,"FilePath":"20210903t171244.png","Notification":"ACT","WhenAdded":1630689165,"Status":"INA"}]

在转换为模型之前,尝试像这样获取数据:data[0]data.first

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69557968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档