Estaba tratando de sincronizar las monedas de un usuario y me encontré con este error: el método [] se invocó en Null. ¿Cómo muestro sus monedas dinámicamente usando Firestore?

 Widget firestoreBuild2(BuildContext context) {
    return StreamBuilder(
      stream: Firestore.instance.collection('users').document('id').snapshots(),
      builder: (context, snapshot) {
        if (snapshot.hasError)
          return  Text('Error: ${snapshot.error}');
        switch (snapshot.connectionState) {
          case ConnectionState.waiting: return  Text('Loading...');
          default:
            var userDocument = snapshot.data;
            return  Text(
            userDocument["coins"],
            textAlign: TextAlign.center,
            style: TextStyle(
              fontFamily: AppTheme2.fontName,
              fontWeight: FontWeight.normal,
              fontSize: 24,
              letterSpacing: 0.0,
              color: AppTheme2.white,
           ),
          ); 
        }
      },
    );
  }
}
0
Simran Aswani 6 dic. 2019 a las 20:44

2 respuestas

La mejor respuesta

Resulta que la razón por la que esto sucedía es porque estaba buscando una cadena 'id' en lugar de mi variable id, por lo que estaba causando un error nulo.

1
Simran Aswani 16 dic. 2019 a las 18:35

Snapshot.connectionState tiene cuatro valores posibles: ninguno, en espera, activo o hecho. No estoy seguro de cuál es la relación entre el estado de conexión y si la instantánea tiene datos, exactamente.

Pero una cosa que puede hacer es verificar si snapshot.hasData, que devolverá falso si snapshot.data es nulo.

Widget firestoreBuild2(BuildContext context) {
    return StreamBuilder(
      stream: Firestore.instance.collection('users').document('id').snapshots(),
      builder: (context, snapshot) {
        if (!snapshot.hasData)
          return  Text('Loading ...');

        var userDocument = snapshot.data;
        return  Text(
          userDocument["coins"],
          textAlign: TextAlign.center,
          style: TextStyle(
            fontFamily: AppTheme2.fontName,
            fontWeight: FontWeight.normal,
            fontSize: 24,
            letterSpacing: 0.0,
            color: AppTheme2.white,
          ), 
        );
      },
    );
  }
}
0
Kris 6 dic. 2019 a las 18:03