Получить информацию из определенного документа Firestore для его идентификатора во Flutter - PullRequest
0 голосов
/ 08 июня 2019

Я пытаюсь получить информацию о конкретном документе по его «идентификатору», чтобы показать информацию этого документа.

Код, который я использую для сервиса:

class SentenciasFireBase {
  //This is a class where I have all the services of firebase
  ...
  obtenerVacaciones(String empleado) async {
    //empleado is the document id
    return await Firestore.instance.document('Vacaciones/$empleado');
  }
  ...
}

А код для отображения информации такой:

class TurnoActual_State extends State<TurnoActual>{
  ...  
  SentenciasFireBase objetoSentencias = new SentenciasFireBase();
  //This object "metodos" is of a class that has several reusable methods:
  Metodos metodos = new Metodos();

  @override
  void initState() {
    objetoSentencias.obtenerVacaciones(_noEmpleado).then((resultados){
      setState(() {
        vacaciones = resultados;
      });
    });
  }
  ...
  @override
  Widget build(BuildContext context){
  ...
  RichText(
    text: TextSpan(
      //toDateTime is a method that converts a timestamp into a DateTime, 
      //and then converts the DateTime into a String with a specific date format.
      //'Inicio' stores a timestamp (it is the date on which the holidays start):
      text: metodos.toDateTime(vacaciones.documents[0].data['Inicio']),
      style: TextStyle(
        color: Colors.black,
        fontSize: 30,
        fontWeight: FontWeight.bold,
      ),
    )
  )
  ...
}

Это сообщение об ошибке:
трепетание: ══TION ИСКЛЮЧЕНИЕ ЗАПРЕЩЕНО БИБЛИОТЕКОЙ ВИДЖЕТОВ. ╞═════════════════════════════════════════════════ ══════════
flutter: было сгенерировано следующее NoSuchMethodError, создающее StreamBuilder (грязный, состояние:
флаттер: _StreamBuilderBaseState> # 45dbd):
флаттер: получатель «документы» был вызван на ноль
флаттер: приемник: ноль
флаттер: пробный вызов: документы

Примечание:
Я ошибся, поставив ссылку на документ, это был не «Турнос»:

return await Firestore.instance.document('Turnos/$empleado');

но "Vacaciones":

return await Firestore.instance.document('Vacaciones/$empleado');

(я обновил его в вопросе), но в любом случае это не "влияет" на сам по себе вопрос.

Ответы [ 2 ]

0 голосов
/ 08 июня 2019

Поскольку вы звоните document(), результатом будет один документ. Но в вашем методе build вы пытаетесь извлечь документ из коллекции:

text: metodos.toDateTime(vacaciones.documents[0].data['Inicio']),

Поскольку vacaciones - это отдельный документ, это должно быть что-то вроде:

text: metodos.toDateTime(vacaciones.data['Inicio']),
0 голосов
/ 08 июня 2019

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

В вашем случае просто попробуйте добавить название коллекции перед документом. как ниже код.

 Firestore.instance
    .collection('collection')
    .document(newCategory.field1)
    ....
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...