Прежде всего, извините, если это длинный вопрос, так как он имеет ссылки gist
, а также блоки длинного кода.Я хочу получить данные API и отобразить их в listview
. Это структура json. Этот является классом, представляющим json.Container
для отображения в пользовательском интерфейсе:
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
)
)
);
}
И это возвращает list tile
.Это мой первый раз, когда я имею дело с apis в трепетании.Я попытался отладить и узнал, что размер reviewsList
равен 0, это может быть причиной, но я не уверен, и попытался отладить его больше, поэтому мне потребовалась некоторая помощь, чтобы извлечь и отобразить его правильно.