Зависимые от переменной виджеты обрабатываются до того, как FutureBuilder завершит выполнение.
Со следующим кодом 'вызвано вычитание на ноль' * появляется ошибка .
- возможно липолучить переменную word (проблема) перед созданием остальных виджетов в макете с ним?
List<int> word = [];
int length;
var rng = new Random();
body: Column(children: [
Container(
child: FutureBuilder<Quote>(
future: getQuote(),
builder: (BuildContext context, AsyncSnapshot<Quote> snapshot) {
if (snapshot.hasData) {
word = snapshot.data.tag.runes.toList();
word.shuffle();
length = word.length;
return Center(
child: Column(
children: <Widget>[
Text(snapshot.data.tag),
Image.network(
'${snapshot.data.url}',
), //displays the quote's author
],
),
);
} else {
return CircularProgressIndicator();
},
),
),
Container(
height:75,
child: GridView.count(
crossAxisCount: 5,
children: List.generate(5, (int index) {
return Center(
child: FlatButton(
child: Text(
String.fromCharCode(
Следующая строка выдает ошибку с нулевой
index = (length-word.length)<3 ? word.removeAt(rng.nextInt(word.length))
: 65+rng.nextInt(25)
),
...
Функция, которая загружает данные из URL
Future<Quote> getQuote() async {
var API_KEY = '12892554-73418a404928f2a4e42121633';
final object = generateNoun().take(1);
String url = "https://pixabay.com/api/?
key="+API_KEY+"&q="+Uri.encodeFull(object.toString());
final response = await http.get(url);
if (response.statusCode == 200) {
return Quote.fromJson(json.decode(response.body));
}
}