Передача Future <List <int>> в снимок с помощью кнопки - PullRequest
0 голосов
/ 19 мая 2019

Я использую FutureBuilder, который имеет ListView.builder с itemCount, равным 3, так что он отобразит три OutlineButton, которые несут String из Firestore, которые я получаю через Future<List<int>>.В основном список содержит три целых числа, которые генерируются случайным образом, но соответствуют определенным критериям.Значения в порядке.

return FutureBuilder(
        future: getAllWords(args.collectionId),
        builder: (context, snapshot) {
          if (!snapshot.hasData) {
            return CircularProgressIndicator();
          }
          return ListView.builder(
              scrollDirection: Axis.horizontal,
              itemCount: 3,
              itemBuilder: (context, index) {

                //Future that returns a list of 3 integers
                getRestRandom(args.collectionId).then(handler); 
                int handler(picked){
                  return picked;
                }

                    return ButtonBar(
                      children: <Widget>[
                        OutlineButton(
                            child: Text(snapshot
                                .data[picked] // 1st, 2nd, and 3rd value from List
                                .data["tagalog"]),
                            onPressed: checkCorrect
                                ? () {
                                    setState(() {

                                    });
                                  }
                                : () {
                                    print("FALSE");
                                  })
                      ],
                );
              });
        });

Строка getRestRandom(args.collectionId).then(handler); возвращает ошибку, в которой говорится, что на «локальную переменную« обработчик »нельзя ссылаться до ее объявления».

Что лучшеспособ подачи списка в текст OutlineButton?

1 Ответ

1 голос
/ 19 мая 2019

Вместо того, чтобы использовать then для ожидания getRestRandom(), вы можете использовать вложенный FutureBuilder, чтобы дождаться генерации списка, а затем использовать его для заполнения ListView:

 return FutureBuilder(
    future: getAllWords(args.collectionId),
    builder: (context, snapshot) {
      if (!snapshot.hasData) {
        return CircularProgressIndicator();
      }
      return FutureBuilder<List<int>>(
        future: getRestRandom(args.collectionId),
        builder: (context, numbersSnapshot){
          if (!numbersSnapshot.hasData) {
            return CircularProgressIndicator();
          }
          return ListView.builder(
              scrollDirection: Axis.horizontal,
              itemCount: 3,
              itemBuilder: (context, index) {
                return ButtonBar(
                  children: <Widget>[
                    OutlineButton(
                        child: Text(snapshot
                            .data[numbersSnapshot.data[index]] // 1st, 2nd, and 3rd value from List
                            .data["tagalog"]),
                        onPressed: checkCorrect
                            ? () {
                          setState(() {

                          });
                        }
                            : () {
                          print("FALSE");
                        })
                     ],
                  );
              });
            }
         );
      });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...