RangeError(索引):无效值:有效值范围为空:34

时间:2019-10-19 17:28:39

标签: flutter dart flutter-layout flutter-test

编辑

因为现在显示数据,如果我在错误发生后进行了hot reload操作。我假设我的Future中未包含的其他FutureBuilder会触发该错误。

这里是实际功能:

     List<Feed> feedList = [];
      List<User> userList = [];

     @override
      void initState() {
        super.initState();

        getFeed = getFeedAll();
        this.getUsers();
      }

 Future<List<Feed>> getFeedAll() async {
    var res = await http.get(
        Uri.encodeFull(APIServices.httpDomain + APIServices.postGetAll),
        headers: {"Authorization": "Bearer " + Constants.token});

    if (res.statusCode == 200) {
      var data = json.decode(res.body);
      this.getUsers();
      feedList = data.map<Feed>((json) => Feed.fromJson(json)).toList();
    }

    return feedList;
  }

  Future<List<User>> getUsers() async {
    var res = await http.get(
        Uri.encodeFull(APIServices.httpDomain + APIServices.usersAll),
        headers: {"Authorization": "Bearer " + Constants.token});

    if (res.statusCode == 200) {
      var data = json.decode(res.body);

      userList = data.map<User>((json) => User.fromJson(json)).toList();
    }

    return userList;
  }



  @override
  Widget build(BuildContext context) {
    return FutureBuilder(
      future: getFeed,
      builder: (context, snapshot) {
        if (snapshot.hasData) {
          return Container(
              padding: EdgeInsets.all(10),
              child: feedListWidget(snapshot.data));
        } else {
          return Container(
            width: MediaQuery.of(context).size.width,
            height: MediaQuery.of(context).size.height,
            child: Center(
              child: Container(
                width: 50,
                height: 50,
                child: CircularProgressIndicator(),
              ),
            ),
          );
        }
      },
    );
  }

现在,我正在userList小部件中使用feedListWidget

我很确定getUsers()会触发该错误。

如何在getUsers()中包含FutureBuilder

因为那是我认为可以解决我问题的方法。

1 个答案:

答案 0 :(得分:0)

似乎您没有在这里等待数据:

getFeed = getFeedAll();
this.getUsers();

使用await执行该操作

getFeed = await getFeedAll();
await this.getUsers();