Я хочу проверить в документе firestore, выходит ли конкретный пользователь - PullRequest
0 голосов
/ 05 августа 2020

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

Когда мое приложение запускается, я вызываю коллекцию firestore с точным именем документа. Мое требование таково, что если documentId уже существует, он вернет пустой контейнер, а если он не существует, он вернет поднятую кнопку, где можно добавить детали. Сейчас я использую построитель потоков, но он не работает.

Widget build(BuildContext context) {

    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: SafeArea(
        child: Scaffold(
          appBar: AppBar(title: Text('KartOfill',),backgroundColor: Colors.red,),
          body: StreamBuilder<Object>(
            stream: Firestore.instance.collection('users').document('9954603381').snapshots(),
            builder: (context, snapshot) {

            

              if(snapshot.hasData){
              return Container();
              }

              return Container(
                child: RaisedButton(
                  onPressed: () async{

                    var firebaseUser = await FirebaseAuth.instance.currentUser();
                    firestore.collection("users").document('9954603381').setData(
                        {
                          "name" : "john",
                          "age" : 50,
                          "email" : "example@example.com",
                          "address" : {
                            "street" : "street 24",
                            "city" : "new york"
                          }
                        }).then((_){
                      print("success!");
                    });





                  },
                ),


              );
            }
          ),
        ),
      ),
    );
  }

1 Ответ

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

Вот как вы можете использовать FutureBuilder вместо

Firestore firestore = Firestore.instance;

Widget build(BuildContext context) {
  return MaterialApp(
    debugShowCheckedModeBanner: false,
    home: SafeArea(
      child: Scaffold(
        appBar: AppBar(
          title: Text(
            'KartOfill',
          ),
          backgroundColor: Colors.red,
        ),
        body: MyWidget(),
      ),
    ),
  );
}

class MyWidget extends StatefulWidget {
  @override
  _MyWidgetState createState() => _MyWidgetState();
}

class _MyWidgetState extends State<MyWidget> {
  @override
  Widget build(BuildContext context) {
    return FutureBuilder(
        future: Future.wait(
          [
            _getDoc(),
            _getFirebaseUser()
          ]
        ),
        builder: (BuildContext context, AsyncSnapshot<List> snapshot) {
          DocumentSnapshot doc = snapshot.data[0];
          FirebaseUser firebaseUser = snapshot.data[1];
          if (doc.exists) {
            return Container();
          }

          return Container(
            child: RaisedButton(
              onPressed: () {
                // FirebaseUser firebaseUser; //defined above
                firestore.collection("users").document('9954603381').setData({
                  "name": "john",
                  "age": 50,
                  "email": "example@example.com",
                  "address": {"street": "street 24", "city": "new york"}
                }).then((_) {
                  print("success!");
                });
              },
            ),
          );
        });
  }
}

Future<DocumentSnapshot> _getDoc() => 
    firestore.collection('users').document('9954603381').get();

Future<FirebaseUser> _getFirebaseUser() => 
    FirebaseAuth.instance.currentUser();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...