Сохранить строку из пожарного магазина в переменную - PullRequest
2 голосов
/ 28 марта 2019

Я пытаюсь получить значение из firestore и сохранить его в переменной во флаттере. Я пытался использовать StreamBuilder, но так как я не создаю виджет, он не работает.

Чтобы прояснить мою проблему, я пытаюсь получить URL из документа пожарного депо, а затем открыть его, когда я нажимаю кнопку в приложении.

Я также пытался адаптировать код, найденный в другом вопросе, но он возвращает ноль.

Future _getUrl() async{
    DocumentReference docRef = Firestore.instance.collection('information').document('pdf');
    var data;
    docRef.get().then((datasnapshot){
        data = datasnapshot.data['url'];
    });
    return data;
  }

Коллекция называется информация , документ pdf и поле url

Ответы [ 2 ]

1 голос
/ 28 марта 2019

Этот метод возвратит ноль, потому что вы не ожидаете, что get () вернется, прежде чем вы вернете данные. docRef.get () - это Future, поэтому он будет выполняться асинхронно. Тем временем ваша программа перейдет на следующую строку, которая возвращает данные.

Что-то вроде этого будет делать то, что вы хотите, я думаю:

Future _getUrl() async{
  DocumentReference docRef = Firestore.instance.collection('information').document('pdf');
  return docRef.get().then((datasnapshot){
    return datasnapshot.data['url'];
  });
}
0 голосов
/ 28 марта 2019

Поскольку _getUrl уже помечен как async, вы также можете использовать await в его теле, чтобы вернуть правильное значение:

Future _getUrl() async {
  DocumentReference docRef = Firestore.instance.collection('information').document('pdf');
  await datasnapshot = docRef.get();
  let data = datasnapshot.data['url'];
  return data;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...