【发布时间】:2020-10-18 11:47:55
【问题描述】:
我有一个名为getAllUsers() 的函数,它返回数据库中的所有用户。问题是我希望 GridView.builder() 显示除当前用户之外的所有用户,但尽管我做了所有研究,但似乎没有任何结果。
如果我在itemBuilder: 中使用if(snapshot.data.documents[i].data["username"] != currentUserId 之类的if 条件,它会返回一个代表当前用户的空白图块,该图块会在网格视图中创建一个间隙。因此,它使网格视图看起来很糟糕。
如果我知道如何在getAllUsers() 方法中包含不等式查询,我相信这个问题可以解决。但我的理解是 Firestore 还没有提供这个函数/参数。
HomeFragment 类
Database _database = Database();
Stream _stream;
String currentUserId;
@override
void initState() {
getCurrentUserId();
getAllUsers();
super.initState();
}
getAllUsers() async {
return await _database.getAllUsers().then((val) {
if (mounted)
setState(() => _stream = val);
});
}
getCurrentUserId() async {
FirebaseUser currentUser = await FirebaseAuth.instance.currentUser();
currentUserId = currentUser.uid;
}
@override
Widget build(BuildContext context) {
return StreamBuilder(
stream: _stream,
builder: (context, snapshot) {
return snapshot.data == null ? Center(child: CircularProgressIndicator())
: Container(
padding: EdgeInsets.symmetric(horizontal: 20.0),
child:
GridView.builder(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
crossAxisSpacing: 8.0,
mainAxisSpacing: 8.0,
),
itemCount: snapshot.data.documents.length,
itemBuilder: (context, i) {
return Container(
child: Text(snapshot.data.documents[i].data["username"])
);
}
// etc etc..
数据库类
getAllUsers() async {
return await _firestore.collection("users").snapshots();
}
我尝试使用它,但 _stream2 返回 null
Stream _stream, _stream2;
getAllUsers() async {
return await _database.getAllUsers().then((val) {
if (mounted) {
List<String> list;
setState(() {
_stream = val;
_stream2 = _stream.where((snapshot) {
_querySnapshot = snapshot;
for (int i = 0; i < _querySnapshot.documents.length; i++)
list.add(_querySnapshot.documents[i].data["userId"]);
return list.contains(currentUserId) == false;
});
});
}
});
}
我也试过了,还是不行
getAllUsers() async {
Stream<QuerySnapshot> snapshots = await _database.getAllUsers();
_stream = snapshots.map((snapshot) {
snapshot.documents.where((documentSnapshot) {
return documentSnapshot.data["userId"] != currentUserId;
});
});
}
【问题讨论】:
标签: flutter google-cloud-firestore firebase-authentication