错误:不能将类型为“ Post”的值分配给类型为“ MapEntry <dynamic,dynamic>”的变量

时间:2020-04-22 14:24:05

标签: flutter

我目前正在尝试API。我创建了一个模型类来处理数据。

import 'package:flutter/foundation.dart';

class Post {
  final int id;

  Post({
    @required this.id,
  });

  factory Post.fromJson(Map<String, dynamic> json) {
    return Post(
      id: json['graphql']['shortcode_media']['id'] as int,
    );
  }
}

之后,我创建了一个HttpServiceclass来调用API

import 'dart:convert';

import 'package:http/http.dart';
import 'package:insta/model/abstractmedia.dart';

class HttpService {
  final String postsURL = "https://www.instagram.com/p/B-mvkeIlQcP/?__a=1";

  Future<List<Post>> getPosts() async {
    Response res = await get(postsURL);

    if (res.statusCode == 200) {

      Map<String, dynamic> body = jsonDecode(res.body);

      List<Post> posts = body.map(
            (dynamic item) => Post.fromJson(item),).toList();
      return posts;

    } else {
      throw "Can't get posts.";
    }
  }
}

但是在第17行的httpService类中出现错误

Error: A value of type 'Post' can't be assigned to a variable of type 'MapEntry<dynamic, dynamic>'.

如何解决这个错误,我是新手

1 个答案:

答案 0 :(得分:0)

在代码的这一部分

List<Post> posts = body.map((dynamic item) => Post.fromJson(item),).toList();

var item是地图body的键。解决此问题的一种方法是将Post.fromJson(item))更改为Post.fromJson(body[item]))或使用body.forEach