Firebase 我想在firestore文档中检查特定用户是否退出
当我的应用程序运行时,我会用确切的文档名调用firestore collection。 我的要求是,如果documentId已经存在,那么它将返回一个空白容器 如果它不存在,那么它将返回一个提升的按钮,在那里可以添加详细信息。当前我正在使用流生成器,但它不工作Firebase 我想在firestore文档中检查特定用户是否退出,firebase,flutter,google-cloud-firestore,Firebase,Flutter,Google Cloud Firestore,当我的应用程序运行时,我会用确切的文档名调用firestore collection。 我的要求是,如果documentId已经存在,那么它将返回一个空白容器 如果它不存在,那么它将返回一个提升的按钮,在那里可以添加详细信息。当前我正在使用流生成器,但它不工作 Widget build(BuildContext context) { return MaterialApp( debugShowCheckedModeBanner: false, home: Safe
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!");
});
},
),
);
}
),
),
),
);
}
小部件构建(构建上下文){
返回材料PP(
debugShowCheckedModeBanner:false,
家:安全区(
孩子:脚手架(
appBar:appBar(标题:Text('KartOfill',),背景颜色:Colors.red,),
正文:StreamBuilder(
流:Firestore.instance.collection('users').document('9954603381').snapshots(),
生成器:(上下文,快照){
if(snapshot.hasData){
返回容器();
}
返回容器(
孩子:升起按钮(
onPressed:()异步{
var firebaseUser=等待FirebaseAuth.instance.currentUser();
firestore.collection(“用户”).document(“9954603381”).setData(
{
“姓名”:“约翰”,
“年龄”:50岁,
“电子邮件”:example@example.com",
“地址”:{
“街道”:“第24街”,
“城市”:“纽约”
}
}).然后(){
打印(“成功!”);
});
},
),
);
}
),
),
),
);
}
以下是如何使用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();
Firestore-Firestore=Firestore.instance;
小部件构建(构建上下文){
返回材料PP(
debugShowCheckedModeBanner:false,
家:安全区(
孩子:脚手架(
appBar:appBar(
标题:正文(
“KartOfill”,
),
背景颜色:Colors.red,
),
正文:MyWidget(),
),
),
);
}
类MyWidget扩展了StatefulWidget{
@凌驾
_MyWidgetState createState()=>\u MyWidgetState();
}
类_MyWidgetState扩展状态{
@凌驾
小部件构建(构建上下文){
回归未来建设者(
未来:未来,等等(
[
_getDoc(),
_getFirebaseUser()
]
),
生成器:(BuildContext上下文,异步快照){
DocumentSnapshot doc=snapshot.data[0];
FirebaseUser FirebaseUser=snapshot.data[1];
如果(文件存在){
返回容器();
}
返回容器(
孩子:升起按钮(
已按下:(){
//FirebaseUser FirebaseUser;//以上定义
firestore.collection(“用户”).document(“9954603381”).setData({
“姓名”:“约翰”,
“年龄”:50岁,
“电子邮件”:example@example.com",
“地址:{“街道”:“第24街”,“城市”:“纽约”}
}).然后(){
打印(“成功!”);
});
},
),
);
});
}
}
Future\u getDoc()=>
firestore.collection('users').document('9954603381').get();
Future\u getFirebaseUser()=>
FirebaseAuth.instance.currentUser();
您可能应该使用一个未来的构建器,并在下面为您编写了一个示例。如果这解决了您的问题,请接受答案。对于返回布尔值的文档,有一个.exists
方法。因此,与其检查doc!=空
,最好检查文档是否存在