慢慢地将Flutter和Dart当作我的新爱好。您可以给予的任何建议或帮助,我们始终感激不尽!我正在尝试实现一个简单的朋友系统,您可以在其中搜索另一个用户并将其添加为朋友。
要实现此目的,我想在StreamBuilder流中使用 .where('friends',arrayContains:'user.uid'),以仅在屏幕上的列表中显示那些用户卡。
class friendsList extends StatelessWidget {
@override
Widget build(BuildContext context) {
final user = Provider.of<User>(context);
return
StreamBuilder(
stream: Firestore.instance
.collection('users')
.where('friends', arrayContains: user.uid).snapshots(),
builder: (context, documents) {
if (documents.hasData) {
return
Container(
height: 180,
child:
ListView.builder(
scrollDirection: Axis.horizontal,
itemCount: 1,
itemBuilder: (context, index) {
DocumentSnapshot friends = documents.data.documents[index];
但是,当我运行我的应用程序时,它显示错误:
`The following RangeError was thrown building:
RangeError (index): Invalid value: Valid value range is empty: 0
When the exception was thrown, this was the stack
List.[](dart:core-patch/growable_array.dart:149:60)
friendsList.build.<anonymous closure>.<anonymous closure>
有人知道我该怎么办,并使用登录的用户UID检索具有friends数组的文档吗?
再次感谢您提供任何建议和帮助。 Screenshot of Cloud Firestore is here
答案 0 :(得分:1)
我离开了项目两天,并在最后一个小时重建了应用程序。令我惊讶的是,'。where('friends',arrayContains:user.uid)'现在可以工作了!
应用启动后,我现在拥有一个与当前登录用户成为好友的所有用户的ListView。
每个用户的个人资料页面上是一个浮动操作按钮,按下该按钮时,会将当前登录用户的UID添加到该朋友文档中的“朋友”数组中。
使用StreamBuilder和ListView,当登录的用户随后转到其朋友页面时,他们会看到在其“朋友”数组中具有登录用户的UID的每个用户
答案 1 :(得分:0)
可能是从Firebase打印空数据的结果。
Stream<List<Model>> fetchStream({@required String userUID}) {
return nestsCollection
.where("participants", arrayContains: userUID)
.snapshots()
.map((snapshot) {
// print(snapshot.docs[0].data()['nestName']);
return snapshot.docs
.map((document) => Model.fromFirestore(document))
.toList();
});
}