【问题标题】:Unhandled Exception: type 'List<dynamic>' is not a subtype of type 'Map<String, dynamic>' flutter未处理的异常:类型“List<dynamic>”不是“Map<String, dynamic>”类型的子类型
【发布时间】:2021-05-21 19:55:29
【问题描述】:

我是 Flutter 的新手,并试图从 api 获取数据进行测试,但我遇到了一些错误,这是我试图从中获取数据并将其显示到 FutureBuilder 中的链接,但我无法获得任何信息可以帮帮我!

这是我的代码:

  class _MyHomePageState extends State<MyHomePage> {
  final String apiUrl = "https://jsonplaceholder.typicode.com/users";

  Future<List<Post>> fetchData() async {
    http.Response res = await http.get(apiUrl);

    if (res.statusCode == 200) {
      var obj = json.decode(res.body);
      List<Post> posts = new List<Post>();
      for(int i=0;i>obj.length;i++){
        Post post = Post.fromJson(obj[i]);
        posts.add(post);
        print(post.name);
      }
      return posts;
    }

  }
  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    fetchData();

  }
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: FutureBuilder(
          future: fetchData(),
          builder: (ctx,snapShot){
            if(snapShot.connectionState == ConnectionState.waiting){
              return CircularProgressIndicator();
            }else{
              return ListView.builder(
                  itemBuilder: (context,index){
                    return ListTile(
                      leading: CircleAvatar(),
                      title: Text(""),
                      subtitle: Text(""),
                    );
                  });
            }
          },
        ),
      ),
    );
  }
}

这是我将 api json 转换为 dart 的链接

【问题讨论】:

  • 错误在您的 Post.fromJson() 方法中。你能展示它的实现吗?
  • i > obj.length ?还在工作吗?

标签: flutter


【解决方案1】:

改变

for(int i=0;i>obj.length;i++){
  Post post = Post.fromJson(obj[i]);
  posts.add(post);
  print(post.name);
}
return posts;

var response = List<Post>.from(obj.map((i) => Post.fromJson(i)));
return response;

之后,将itemCount: snapShot.data.length 添加到您的ListView.builder

【讨论】:

  • 是的,它有效,但是当我制作 snapShot.data[index] 时,我无法在 FutureBuilder 中调用它
  • 尝试将 itemCount: snapShot.data.length 添加到您的 ListView.builder
猜你喜欢
  • 2019-09-26
  • 1970-01-01
  • 2020-11-05
  • 1970-01-01
  • 1970-01-01
  • 2020-08-20
  • 2021-08-03
  • 2021-12-29
  • 2021-10-11
相关资源
最近更新 更多