Search code examples
jsonlistflutterflutter-listviewflutter-build

Flutter List.Builder fetch JSON


This is my code:

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  List<User> _users = <User>[];
  List<User> _usersDisplay = <User>[];

  @override
  void initState() {
    super.initState();
    fetchUsers().then((value){
      _users.addAll(value);
      _usersDisplay = _users;
      print(_usersDisplay.length);
    });
  }


  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Users List'),
      ),
      body: SafeArea(
        child: Container(
          child: ListView.builder(
            itemBuilder: (context, index) {
              if (_usersDisplay.length > 0){
                return UserTile(user: this._usersDisplay[index]);
              }else{
                return LoadingView();
              }
            },
            itemCount: _usersDisplay.length + 1,
          ),
        ),
      ),
    );
  }
}

While executing initStae() it prints _usersDisplay.length as 100 but only return LoadingView(). It not shows UserTile().

When checking _usersDisplay.length inside of build it is always 0. Why?

Also I cannot define List as this way: List<User> _users = List<User>();


Solution

  • change

    fetchUsers().then((value){
          _users.addAll(value);
          _usersDisplay = _users;
          print(_usersDisplay.length);
        });
    

    to

    fetchUsers().then((value){
          _users.addAll(value);
          _usersDisplay = _users;
          print(_usersDisplay.length);
          setState(() {})
    });