从特定的Firestore文档中获取有关Flutter中ID的信息

时间:2019-06-08 06:44:38

标签: flutter google-cloud-firestore

我正试图通过其“ id”获取特定文档的信息,以显示该文档的信息。

我用于该服务的代码是:

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,
      ),
    )
  )
  ...
}

这是错误消息:
颤抖:W小工具库引起的异常。 ╞═════════════════════════════════════════════════ br
颤抖:构建StreamBuilder时引发以下NoSuchMethodError(脏,状态:
颤动:_StreamBuilderBaseState>#45dbd):
颤抖:在null上调用了getter'documents'
颤动:接收者:null
颤抖:尝试调用:文档

注意:
我对文档的引用是错误的,它不是“ Turnos”:

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

但“ Vacaciones”:

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

(我在问题中对其进行了更新),但是无论如何它都不会“影响”问题本身。

2 个答案:

答案 0 :(得分:0)

您已经提到了用于访问特定文档记录的集合名称,然后,如果您有多个记录,则可以使用forEach从每个迭代记录中检索docuemntId。

在您的情况下,只需尝试在文档之前添加集合名称。像下面的代码。

 Firestore.instance
    .collection('collection')
    .document(newCategory.field1)
    ....
});

答案 1 :(得分:0)

由于您正在调用document(),因此结果将是单个文档。但是,在您的build方法中,您试图从集合中获取文档:

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

由于vacaciones是单个文档,因此应该类似于:

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