当前位置: 首页 > 知识库问答 >
问题:

_TypeError(类型列表不是映射的子类型)

百里锋
2023-03-14

你好,我正在做一个api调用,在那里我得到了一系列的横幅。我正在犯错误-

_TypeError (type 'List<dynamic>' is not a subtype of type 'Map<String, dynamic>')

横幅。飞奔

class BannersBloc {
  late BannerRepository _bannerRepository;
  late StreamController _streamController;

  StreamSink get bannerListSink => _streamController.sink;

  BannersBloc() {
    _streamController = StreamController();
    _bannerRepository = BannerRepository();
    fetchBanners();
  }

  fetchBanners() async {
    bannerListSink.add('Fetching Banners');
    try {
      Banners banners = await _bannerRepository.getBanners();
      bannerListSink.add(banners);
    } catch (e) {
      bannerListSink.add(e.toString());
      print(e);
    }
  }

  dispose() {
    _streamController.close();
  }
}

横幅。飞奔

class Banners {
  late String bannerImageUrl;
  late String bannerImageAlt;
  late bool isActive;
  late int order;
  late String id;

  Banners(
      {required this.bannerImageUrl,
      required this.bannerImageAlt,
      required this.isActive,
      required this.order,
      required this.id});

  Banners.fromJson(Map<String, dynamic> json) {
    bannerImageUrl = json['bannerImageUrl'];
    bannerImageAlt = json['bannerImageAlt'];
    isActive = json['isActive'];
    order = json['order'];
    id = json['id'];
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['bannerImageUrl'] = this.bannerImageUrl;
    data['bannerImageAlt'] = this.bannerImageAlt;
    data['isActive'] = this.isActive;
    data['order'] = this.order;
    data['id'] = this.id;
    return data;
  }
}

api_base_助手。飞奔

class APIHelper {
  final String _baseURL =
      "https://raw.githubusercontent.com/gautam-in/shopping-cart-assignment/master/server/";

  Future<dynamic> get(String url) async {
    try {
      final response = await http.get(Uri.parse(_baseURL + url));
      return json.decode(response.body);
    } catch (err) {
      throw new Exception("Something went wrong");
    }
  }
}

得到你的横幅。飞奔

class BannerRepository {
  Future getBanners() async {
    final response = await new APIHelper().get("banners/index.get.json");
    return Banners.fromJson(response);
  }
}

共有1个答案

庄欣然
2023-03-14

如果API的响应是一个列表,则错误是由getBanner引发的。因为fromJson方法期望类型为Map

class BannerRepository {
  Future<List<Banners>> getBanners() async {
    final response = await new APIHelper().get("banners/index.get.json");
   // Sample Code, handler errors and other stuff
    return response.map((e) =>Banners.fromJson(e)).toList();
  }
}

 类似资料:
  • 我有一个问题,因为2小时。我有这个错误,我看到了更多的主题,但我不能解决它。 消息:_TypeError(类型列表不是类型映射的子类型)颤动 我的模型: 我的主题屏幕: 我尝试了更多的教程和不同的主题,但我有相同的错误。。。 非常感谢。

  • 我想要一张地图 我的对象是 http代码在这里 我得到了错误 谢谢

  • 我对Flutter编程非常陌生,我正在尝试导入一个本地JSON文件,其中包含书籍数据,如标题、作者、发布年份等。 最初我使用JSON-to-DART转换器来组装一个图书数据模型,现在我正在尝试创建一个函数,在该函数中,程序获取本地JSON文件,并使用类中的方法将数据解析为地图。 我遇到的问题是返回类型

  • 我是一个新的颤振和得到类型错误。我正在尝试使用json自动序列化。 在做了一些调整后这里看起来是这样的 下面是我如何尝试从api获取数据 我的类如下所示 谁能帮我一下吗。我被困在这里了。我一直在尝试不同的方法,但都不管用。非常感谢。

  • 因此,我创建了一个应用程序,通过api读取数据,并尝试解析JSON api 这是我的错误截图 我试着把它改成一个列表,但它仍然读取一个错误 这是我的密码大象。飞奔 如何纠正此错误?请帮忙

  • 我试图获得用户信息后,用户输入电子邮件和密码。我使用的api会返回我用户的额外信息,所以我尝试从中获取这些信息。 我试图解析这个json: 这些是我的模型: 这是我发送电子邮件、密码和获取用户数据的部分: 这是给我错误的部分 我打印了响应体,它给出了我想要的字符串,但是jsonDecode返回了一个列表,所以我不能使用它。我怎样才能解决这个问题?提前谢谢。