NoSuchMethodError: метод '[]' был вызван с нулевым значением. Получатель: ноль. Пытался позвонить: [] ("имя") - PullRequest
0 голосов
/ 04 августа 2020

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

  @override
  Widget build(BuildContext context) {

    return StreamBuilder(
      stream: Firestore.instance.collection('Profile').document(user.uid).snapshots(),
 
      builder: (context, snapshot) {

        if (!snapshot.hasData) {
          return new showProfile(
            name: "null",
            email: "null",
            pin: "null",
            state: "null",
          );
        }else {
          var userDocument = snapshot.data;
          return new showProfile(
            name: userDocument["name"],
            email: userDocument["email"],
            pin: userDocument["pin"],
            state: userDocument["state"],
          );
        }
      },
    );
  }

но я получаю эту ошибку

введите описание изображения здесь

1 Ответ

1 голос
/ 04 августа 2020

snapshot.data имеет значение null, поэтому вы получаете эту ошибку, скорее всего, user.uid имеет значение null, поэтому вы не получаете никаких данных, вам нужно сделать следующее:

Stream<DocumentSnapshot> getData() async*{
var user = await FirebaseAuth.instance.currentUser();
yield* Firestore.instance.collection('Profile').document(user.uid).snapshots()
}

И затем внутри StreamBuilder используйте метод getData():

   return StreamBuilder(
      stream: getData(),
...