无法检索 api 数据

Not able to retrieve api data

首先,如果这是一个很长的问题,很抱歉,因为它有 gist 个链接和很长的代码块。 我想检索 api 数据并将其显示在 listview 中。 This is the json structure. This是代表json的class。 Container 显示在 UI:

Widget reviewsSection = Container(
        child: FutureBuilder(
            future: _fetchReviews(),
            builder: (context, snapshot) {
              if (reviewList != null) {
                return _buildReviewTiles();
              } else if (snapshot.hasError) {
                return Text('${snapshot.error}',
                    style: TextStyle(color: Colors.white, fontSize: 12.0),
                    textAlign: TextAlign.justify);
              }
              // By default, show a loading spinner
              return new Container(child: CircularProgressIndicator());
            })
    );

这就是我获取数据的方式:

Future <Null> _fetchReviews() async {

    // Review URL
    final String url = 'https://..';

    // Authorization token
    final String auth = '';

    // Asynchronous JSON from server
    final response = await http.get(url + 'id=${this.pro.id}' + '&k=$auth');


    // If the request was successful
    if (response.statusCode == 200) {

        // Convert the JSON response to a list
      final parsed = json.decode(response.body);

        // Adds review objects to reviewList
      for (int i = 0; i < parsed.length; i ++) {
        reviewList.add(new Review.fromJSON(parsed, i));
      }
    }
    else {
      throw('HTTP request failed, statusCode: ${response?.statusCode}');
    }
  }

  // Updates reviewList
  Future<Null> _refresh() async {
    await _fetchReviews();
  }

根据评论创建listview

  Widget _buildReviewTiles() {
    return (new Container(
        child: new RefreshIndicator(
            child: ListView.builder(
              shrinkWrap: true,
                itemCount: reviewList == null ? 0 : reviewList.length,
                itemBuilder: (BuildContext context, int index) {
                  return new Container(
                      child: Center(
                          child: Column(children: <Widget>[
                            _getReviewTile(reviewList[index]),
                          ])));
                }),
            onRefresh: _refresh
        )
    )
    );
  }

thisreturnslist tile。 这是我第一次在 flutter 中处理 apis。我尝试调试并了解到 reviewsList 的大小为 0,这可能是原因但我不确定,并尝试对其进行更多调试,因此需要一些帮助才能正确获取和显示它。

你有一些问题,你正在使用 FutureBuilder,但你的方法没有 return 任何东西。

你应该改变这个:

 Future <Null> _fetchReviews() async {

为此:

Future <List< Review >> _fetchReviews() async {

   .....

  return reviewList;
}

Future<Null> _refresh() async {
   return await _fetchReviews();
 }

更改此方法:

 Widget _buildReviewTiles() {

对此:

 Widget _buildReviewTiles(List<Review> list) {

在你的 FutureBuilder 里面改变这个:

  FutureBuilder(
        future: _fetchReviews(),
        builder: (context, snapshot) {
          if (snapshot.data != null) {
            return _buildReviewTiles(snapshot.data);
          }