【问题标题】:I want to check in firestore document whether a particular user exits or not我想检查特定用户是否退出 Firestore 文档
【发布时间】:2020-08-06 17:52:33
【问题描述】:

当我的应用程序运行时,我使用确切的文档名称调用 firestore 集合。 我的要求是,如果 documentId 已经存在,那么它将返回一个空白容器 如果它不存在,那么它将返回一个 Raised Button ,可以在其中添加详细信息。目前我正在使用流生成器,但它不起作用。

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!");
                    });





                  },
                ),


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

【问题讨论】:

  • 你应该在这里使用未来的构建器
  • 在下面给你写了一个例子。如果这解决了您的问题,请接受答案

标签: firebase flutter google-cloud-firestore


【解决方案1】:

以下是您可以改用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();

【讨论】:

  • 有一个用于返回布尔值的文档的.exists 方法。所以与其检查doc != null,不如检查doc.exists是否更好
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-05
  • 1970-01-01
  • 2020-06-08
  • 2021-12-29
  • 2021-07-22
  • 2020-10-05
  • 1970-01-01
相关资源
最近更新 更多