Попытка получить поле данных из нашей базы данных Firestore, но целое число возвращается как ноль - PullRequest
0 голосов
/ 26 июня 2019

Предполагается, что метод в моем коде использует время ожидания, необходимое для вопросов нашего мобильного приложения для опроса.Метод, однако, возвращает только ноль, даже если мы устанавливаем моментальный снимок документа, который должен содержать копию данных.У нас есть жестко запрограммированный запасной вариант, так что, когда тайм-аут равен нулю, он вернет виджет по умолчанию.

Мы попробовали несколько асинхронных операций и ожидали в виджете и самом методе, и ни один из них, похоже, не смогчтобы заставить виджет ждать тайм-аут из документа firestore.

const fiveSeconds = Duration(seconds: 5);
Future<int> getTimeOutData() async{
  int toReturn;
  Firestore.instance.collection("config").getDocuments().then((DocumentSnapshot) async=>{
    Future.delayed(fiveSeconds, () async => toReturn = await DocumentSnapshot.documents[0]['timeout']),
    print( toReturn)
  });
  return toReturn;
}
Widget _buildListItem(BuildContext context, DocumentSnapshot doc) {
  return ListTile(
    title: Text(
      doc['question_text'].toString(),
      style: Theme.of(context).textTheme.headline,
    ),
    dense: true,
    trailing: Icon(Icons.keyboard_arrow_right),
    contentPadding: EdgeInsets.symmetric(horizontal: 10.0, vertical: 5.0),
    onTap: () async{
      timeout= await getTimeOutData();
      envelope = new Envelope(doc['complete'], doc.documentID, doc['user'],
          doc['question'], doc['answer_text'], doc['answer_type'], doc['time_stamp']);
       Navigator.push(
        context,
         MaterialPageRoute(
          builder: (context) {
            return ViewAnswerController(envelope,  timeout);
          },
        ),
      );
    },
    selected: true,
  );
}

Я ожидаю 1 миллисекунду, но фактическое значение равно нулю при печати в методе и при последующей проверке в другом виджете.

1 Ответ

0 голосов
/ 27 июня 2019
const fiveSeconds = Duration(seconds: 5);
Future<int> getTimeOutData() async{
  int toReturn;
  await Firestore.instance.collection("config").getDocuments().then((DocumentSnapshot) async=>{
    await Future.delayed(fiveSeconds, () async => toReturn = await DocumentSnapshot.documents[0]['timeout']),
    print( toReturn)
  });
  return toReturn;
}

Неважно, мне просто нужно было еще немного, потому что .then () также является объектом Future.

...