Flutter Firebase Требуется один документ - PullRequest
1 голос
/ 22 апреля 2020

У меня есть целевая страница и коллекция в firestore, в которой я сохраняю некоторую информацию о пользователе (например, прошел ли он экран при посадке или нет). В следующий раз, когда я открою приложение, я хочу проверить, прошел ли пользователь регистрацию. Если они сделали: я перенаправить на другой экран; если нет, то перенаправьте на вход.

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

Я пытался получить данные, как это, но не сработало.

class LandingPage extends StatelessWidget {
  // LandingPage({@required this.auth});
  // final AuthBase auth;
     @override
      Widget build(BuildContext context) {
        final auth = Provider.of<AuthBase>(context, listen: false);
        return StreamBuilder<User>(
          stream: auth.onAuthStateChanged,
          builder: (context, snapshot) {
            if (snapshot.connectionState == ConnectionState.active) {
              User user = snapshot.data;
                  if (user == null) {
                return ChooseLanguage(
                    //     auth: auth,
                    );
              }

    // he i need to do a call to a ducment in the firestore
    //if the retuen is true then i go to page 1 else go to page 2

            } else {
              return Scaffold(
                body: Center(child: CircularProgressIndicator()),
              );
            }
          },
        );
      }
    }

мне нужно сделать -iama новичок в трепетании

1 Ответ

2 голосов
/ 22 апреля 2020

Чтобы получить один документ, сделайте следующее:

getData()async{
await Firestore.instance.collection("users").document(id).get().then((value){
      print(value.data['name']);
    });
} 

Вам необходимо использовать правильное имя collection, value.data будет содержать данные этого документа, к которым вы можете получить доступ с помощью [] оператор.


Согласно вашему редактированию, вы проверяете, является ли checkonboarding() нулевым, но, поскольку оно возвращает будущее, вам нужно использовать await:

    void sendData()async{
        bool value = await checkonBoarding(user);
      if (value != null) {
            return Provider<Database>(
              create: (_) => new FireStoreDatabase(uid: user.uid),
              child: Dashboard(usr: user, auth: auth),
            );
          } else {
            return Provider<Database>(
              create: (_) => new FireStoreDatabase(uid: user.uid),
              child: Onboarding(usr: user, auth: auth),
            );
          }
       }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...