在flutter中解析复杂的JSON,类型'Future <dynamic>'不是类型'Future <allusers>'的子类型

时间:2018-11-01 11:42:13

标签: dart flutter

我只是解析复杂的JSON并显示在listView上以供学习。

  

API: https://jsonplaceholder.typicode.com/users

1)模型类别

succ

2)ViewModel

r

3)查看代码的一部分。

M - 2

所以,我的问题是,每次我失败时都会遇到诸如此类的错误。

  

“ Future”类型不是“ Future”类型的子类型

我知道有很多错误,但是我是Flutter的新手。 我要去哪里错了?如何解决此问题,请指导我正确的方向。

已更新

r

enter image description here

模型类有什么错误吗?

1 个答案:

答案 0 :(得分:1)

扔掉AllUsers类型和arryOfUser成员。您不需要它们,并且通过放入它们,就无法满足FutureBuilder的期望。

class UserViewModel {
  Future<List<User>> fetchUserData() async {
    var response = await http.get('https://jsonplaceholder.typicode.com/users');
    List<User> users = json.decode(response.body).map((u) => User.formJson(u)).toList();
    print("users $users");
    print("response === >> ${users[0].company.catchPhrase}");
    return users;
  }
}

class HomeScreenState extends State<HomeSceen> {

  UserViewModel userViewmodel;

  @override 
  initState(){
    super.initState();     
    userViewmodel = UserViewModel();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("JSON Parsing")
      ),
      body: Container(
        child: FutureBuilder<List<User>>(
          future: userViewmodel.fetchUserData(), 
          builder: (context, snap){
            return setupListView(snap.data);
          },          
        ),
      ),
    );
  }

  Widget setupListView(List<User> users){
  return ListView.builder(
    itemCount: users.length,
    itemBuilder: (BuildContext context, int index) {
      setupListTile(users[index]);
    },
  );
 }

 Widget setupListTile(User userdata){
  return ListTile(
    leading: CircleAvatar(
      backgroundColor: Colors.orangeAccent,
      child: Text(userdata.name[0].toUpperCase(), 
      style: TextStyle(color: Colors.white)),
    ),
    title: Text(userdata.name),
    subtitle: Text(userdata.company.name),    
  );
 }
}