Проблема в том, что сетевой вызов getData()
выполняется асинхронно:
1) Вы вызываете getData()
2) Синхронный код продолжает выполняться: return Column(...)
вызывается, пока mtgCardNames
еще пусто
3) Вы видите пустой столбец на экране
4) Сетевой вызов завершается, then(...)
выполняется и mtgCardNames
заполняется
Чтобы отобразить столбец с данными сетевого вызова, вы должны вернуть один виджет во время его загрузки, а другой - после. Одним из способов является использование FutureBuilder
. Базовая c идея - это
@override
Widget buildResults(BuildContext context) {
GetHTTP getHTTP = GetHTTP();
return FutureBuilder<List<MTGCard>>(
future: getHTTP.getData(),
builder: (context, snapshot) {
if (!snapshot.hasData)
return Text('Loading...');
return Column(
children: <Widget>[
Text(query),
for (MTGCard c in snapshot.data)
Text(c.name),
],
);
},
);
}
Но есть еще некоторые детали. Например, не стоит помещать сетевой вызов в метод build (). Также вы можете показать некоторые ошибки виджет, если сетевой вызов не удается. Подробности в учебнике