如何恢复 Firestore 中的特定数据?
How to recover a specific data in the firestore?
我在数据库中有这个结构:
我有一个return当前用户登录的功能
FirebaseAuth auth = FirebaseAuth.instance;
auth.currentUser.uid;
我想在“idUser”== auth.currentUser.uid;
时检索“requisicoes”
基本上,用户检索自己创建的请求。
那是我的 StreamBuilder
final _controller = StreamController<QuerySnapshot>.broadcast();
FirebaseFirestore db = FirebaseFirestore.instance;
StreamBuilder<QuerySnapshot> addListenersRequests() {
final stream = db
.collection("requisicoes")
.where("usuario.idUser", isEqualTo: idUsuarioLogado)
.snapshots();
stream.listen((dados) {
_controller.add(dados);
});
return null;
}
注意:idUsuarioLogado
是 return 正确的 currentUser
问题是我正在获取“requisicoes”集合中的所有内容,当我创建一个新用户时,其他用户的请求出现在屏幕上
StreamBuilder是不是逻辑有问题?
根据你的问题,我认为你正在获取当前登录的 uid 的数据。但是你想检索 particulers users[= 的详细信息29=] created(i,e documendId) 。然后你必须获取 documentId first.Like
body: StreamBuilder(
stream:users.snapshots(),
builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return Center(
child: CircularProgressIndicator(),
);
}
if(!snapshot.hasData){
return Center(
child: CircularProgressIndicator(),
);
}
return ListView(
children: snapshot.data.documents.map((document) {
return Center(
child: Container(
width: MediaQuery.of(context).size.width/2.5,
height: MediaQuery.of(context).size.height/5,
child: Text(document.id),
),
);
}).toList());
}),
您必须获取 document.id。这是您的特定用户而不是这个。
FirebaseAuth auth = FirebaseAuth.instance;
auth.currentUser.uid;
注意:这将 return 您当前登录的 userId.
有关详细信息,请阅读此link。
我在这里找到了答案Firestore is ignoring the where clause in the query in flutter
我的例子和上面的link一样,我有两个函数,一个addListenersRequests()
和另一个getCurrentUser()
,这两个函数我是在initState方法中调用的,问题是 getCurrentUser 是异步的,所以在填充变量 idUsuarioLogado 的值之前先执行 addListenersRequests ()。
所以我把这两个函数合并为一个,这样getCurrentUser可以先执行
最终代码:
Future<StreamBuilder<QuerySnapshot>> addListenersRequests() async{
await getDataUser();
final stream = db
.collection("requisicoes")
.where("usuario.idUser", isEqualTo: idUsuarioLogado)
.snapshots();
stream.listen((dados) {
_controller.add(dados);
});
return null;
}
现在可以正常工作了。
这个故事的奇怪之处在于 firebase 执行子句并检索集合中的所有内容,即使引用的变量为 null
我在数据库中有这个结构:
我有一个return当前用户登录的功能
FirebaseAuth auth = FirebaseAuth.instance;
auth.currentUser.uid;
我想在“idUser”== auth.currentUser.uid;
基本上,用户检索自己创建的请求。
那是我的 StreamBuilder
final _controller = StreamController<QuerySnapshot>.broadcast();
FirebaseFirestore db = FirebaseFirestore.instance;
StreamBuilder<QuerySnapshot> addListenersRequests() {
final stream = db
.collection("requisicoes")
.where("usuario.idUser", isEqualTo: idUsuarioLogado)
.snapshots();
stream.listen((dados) {
_controller.add(dados);
});
return null;
}
注意:idUsuarioLogado
是 return 正确的 currentUser
问题是我正在获取“requisicoes”集合中的所有内容,当我创建一个新用户时,其他用户的请求出现在屏幕上
StreamBuilder是不是逻辑有问题?
根据你的问题,我认为你正在获取当前登录的 uid 的数据。但是你想检索 particulers users[= 的详细信息29=] created(i,e documendId) 。然后你必须获取 documentId first.Like
body: StreamBuilder(
stream:users.snapshots(),
builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return Center(
child: CircularProgressIndicator(),
);
}
if(!snapshot.hasData){
return Center(
child: CircularProgressIndicator(),
);
}
return ListView(
children: snapshot.data.documents.map((document) {
return Center(
child: Container(
width: MediaQuery.of(context).size.width/2.5,
height: MediaQuery.of(context).size.height/5,
child: Text(document.id),
),
);
}).toList());
}),
您必须获取 document.id。这是您的特定用户而不是这个。
FirebaseAuth auth = FirebaseAuth.instance;
auth.currentUser.uid;
注意:这将 return 您当前登录的 userId.
有关详细信息,请阅读此link。
我在这里找到了答案Firestore is ignoring the where clause in the query in flutter
我的例子和上面的link一样,我有两个函数,一个addListenersRequests()
和另一个getCurrentUser()
,这两个函数我是在initState方法中调用的,问题是 getCurrentUser 是异步的,所以在填充变量 idUsuarioLogado 的值之前先执行 addListenersRequests ()。
所以我把这两个函数合并为一个,这样getCurrentUser可以先执行
最终代码:
Future<StreamBuilder<QuerySnapshot>> addListenersRequests() async{
await getDataUser();
final stream = db
.collection("requisicoes")
.where("usuario.idUser", isEqualTo: idUsuarioLogado)
.snapshots();
stream.listen((dados) {
_controller.add(dados);
});
return null;
}
现在可以正常工作了。
这个故事的奇怪之处在于 firebase 执行子句并检索集合中的所有内容,即使引用的变量为 null