Необработанное исключение: тип ‘List’ не является подтипом типа ‘Map’ flutter

#flutter

#flutter

Вопрос:

я новичок в 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

Комментарии:

1. Ошибка находится в вашем методе Post.FromJSON(). Можете ли вы показать его реализацию?

2. i > obj.length ? и все еще работает?

Ответ №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

Комментарии:

1. да, это сработало, но я не могу вызвать его в FutureBuilder при создании snapShot.data[index]

2. попробуйте добавить ItemCount: snapShot.data.length в ваш ListView.builder