我正在使用flutter和firebase构建类似程序的社交网络,并且当前需要查找以返回用户未关注的用户列表。
为了实现这一点,我试图生成用户正在关注的用户ID列表,然后循环浏览每个用户ID(可能会设置一个限制),并确定该ID是否在用户ID列表中用户未关注的信息。然后,我将为此返回小部件列表。
当前,我正在尝试调用当前关注者流,以返回用户当前关注的所有人的列表,但是Flutter不允许我从中返回列表吗?
class AddFollowers extends StatelessWidget {
final String userId = 'userID imported here';
Stream<List<String>> getFollowers(userId) async {
final QuerySnapshot result = await Firestore.instance
.collection('relationships')
.document(userId)
.collection('followers')
.where("follower", isEqualTo: true)
.getDocuments();
final List<DocumentSnapshot> documents = result.documents;
return documents;
}
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: AppBar(
elevation: 0.0,
leading: IconButton(
icon: Icon(Icons.close),
onPressed: () => Navigator.of(context).pop(),
),
title: new Text("Find Your Following"),
),
body: new Container(
child: new StreamBuilder(
stream: getFollowers(userId),
builder:
null //after returning the followers, I will build widgets of non-followers
),
),
// new FindFollowerWidget(),
);
}
}
任何有关如何返回此结构或更好结构的建议都非常感谢。谢谢!
答案 0 :(得分:0)
由于您使用的是 Stream
,因此我假设您希望监听您的收藏和文档的实时更改。 FlutterFire 提供了 CollectionReference
和 DocumentReference
,它们都具有 snapshots()
方法,该方法返回您可以使用的 Stream。
对于您的用例,您可以像这样使用它:
// either set the collection as a Stream
Stream getCollectionStream(String userId){
return FirebaseFirestore.instance
.collection('relationships')
.document(userId)
.collection('followers')
.where("follower", isEqualTo: true)
.snapshots();
}
// or set it as a CollectionReference
CollectionReference getCollectionReference(String userId){
// this returns a CollectionReference
return FirebaseFirestore.instance
.collection('relationships')
.document(userId)
.collection('followers')
.where("follower", isEqualTo: true);
}
并在您的 Widget build()
@override
Widget build(BuildContext context) {
return new Scaffold(
...
body: new Container(
child: new StreamBuilder(
// either this Stream snapshot
stream: getCollectionStream(userId),
// or use the reference with snapshots() method for the Stream
// stream: getCollectionReference(userId).snapshots(),
builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
if (snapshot.hasError) {
return Text('Something went wrong');
}
if (snapshot.connectionState == ConnectionState.waiting) {
// display progressBar
return Text("Loading");
}
),
},
),
);
}
有关在 Cloud Firestore 上侦听实时更改的更多详细信息,请参阅此 guide。