我有一个主页,该页面显示我正在关注的用户帖子,我想从Firestore中获取我正在关注的用户的uid,然后转到用户收藏集,然后发布收藏并显示最新的两个帖子。
第一步,我们必须转到“后续收集”,然后为每个文档获取uid。
第二步,我们必须转到用户集合,然后uid等于第一步中获得的每个uid,然后在帖子中获取最新的2个两个文档(按'date'开头)。
我已经尝试过此代码,但无法正常工作,但出现错误:
════════ (546) Exception caught by widgets library ═════════════════════════════════════════════════
RangeError (index): Invalid value: Only valid value is 0: 4
The relevant error-causing widget was:
StreamBuilder<QuerySnapshot> file:///Users/Mr.3bd/AndroidStudioProjects/app/test/lib/Screens/HomePage.dart:351:48
════════════════════════════════════════════════════════════════════════════════════════════════════
我的代码:
StreamBuilder(
stream: _firestore
.collection(FOLLOW_COLLECTION)
.document(widget.myuid)
.collection(FOLLOWING_COLLECTION)
.snapshots(),
builder: (context, fir_snapshot) {
if (!fir_snapshot.hasData) {
return Center(child: SpinKitThreeBounce(
color: Colors.white,
size: 50.0,));
}
else if(fir_snapshot.hasError)
{
return Center(child: Text("No Data",style: TextStyle(color: GlobalUniversal.purple),));
} else {
return ListView.builder(
physics:
NeverScrollableScrollPhysics(),
shrinkWrap: true,
scrollDirection: Axis.vertical,
itemCount: fir_snapshot
.data.documents.length,
itemBuilder: (context, index) {
DocumentSnapshot myfollowing =
fir_snapshot.data
.documents[index];
return StreamBuilder(
stream: _firestore
.collection(
USERS_COLLECTION)
.where('uid',
isEqualTo:
myfollowing['uid'])
.snapshots(),
builder:
(context, sec_snapshot) {
if (!sec_snapshot.hasData) {
return Center(child: SpinKitThreeBounce(
color: Colors.white,
size: 50.0,));
}
else if(sec_snapshot.hasError)
{
return Center(child: Text("No Data",style: TextStyle(color: GlobalUniversal.purple),));
}
else {
DocumentSnapshot user =
sec_snapshot.data
.documents[index];
return StreamBuilder(
stream: _firestore
.collection(
USERS_COLLECTION)
.document(user.documentID)
.collection(POSTS_COLLECTION)
.orderBy('date', descending: true)
.snapshots(),
builder:
(context, thir_snapshot) {
if (!thir_snapshot.hasData) {
return Center(child: SpinKitThreeBounce(
color: Colors.white,
size: 50.0,));
}
else if(thir_snapshot.hasError)
{
return Center(child: Text("No Data",style: TextStyle(color: GlobalUniversal.purple),));
}
else {
DocumentSnapshot post =
thir_snapshot.data
.documents[index];
int usefulCount = post['Usefuls'];
int likeCount = post['Likes'];
int commentCount = post['Comments'];
return Padding(
padding:
EdgeInsets.only(
top: 10.0,
bottom:
10.0),
child: InkWell(
onTap :(){
// Navigator.push(context, new MaterialPageRoute(builder: (context) => new Comments(myapplang: widget.myapplang,myuid: widget.myuid,myfullname: widget.fullname,myimg: widget.uprofilePicUrl,CommentMajCount: widget.CommentMajCount,pid: mypost['pid'], uid: mypost['uid'], majname: widget.majname, pdoc: mypost.documentID.toString())));
},
child: Container(
decoration:
BoxDecoration(
color: GlobalUniversal
.whiteBG,
),
child: Padding(
padding:
EdgeInsets
.all(
8.0),
child: Column(
children: <
Widget>[
SizedBox(
height:
10.0,
),
Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
crossAxisAlignment:
CrossAxisAlignment.center,
children: <
Widget>[
Padding(
padding: widget.myapplang == 'ar' ? EdgeInsets.only(right: 5.0) : EdgeInsets.only(left: 5.0),
child: Row(
mainAxisAlignment:
MainAxisAlignment.center,
crossAxisAlignment:
CrossAxisAlignment.center,
children: <Widget>[
Container(width: 35.0, height: 35.0, decoration: BoxDecoration(shape: BoxShape.circle, image: DecorationImage(fit: BoxFit.fill, image: NetworkImage(
// user image url
user['uimg'])))),
SizedBox(
width: 10.0,
),
Text(
'${user['name']}',
style: TextStyle(color: GlobalUniversal.blackColor, fontSize: 14.0, fontWeight: FontWeight.bold, fontFamily: 'BalooDa2'),
),
],
),
),
IconButton(
icon: Icon(
Icons.menu,
color: GlobalUniversal.blackColor,
),
onPressed: () {
})
],
),
SizedBox(
height:
20.0,
),
Padding(
padding:
EdgeInsets.all(5.0),
child: Text(
'${post['text']}',
style: TextStyle(
color: GlobalUniversal.blackColor,
fontSize: 16.0,
fontFamily: 'Tajawal',
height: 1.3),
textAlign: TextAlign.justify,
textDirection: TextDirection.rtl),
),
SizedBox(
height:
15.0,
),
Visibility(
child:
Text(
'${post['pid']}',
),
visible:
false,
),
Visibility(
visible:
_isVisible,
child:
ClipRRect(
borderRadius:
BorderRadius.circular(8.0),
child:
Image.network(
'${post['img']}' != null
? '${post['img']}'
: showToast,
fit:
BoxFit.fill,
),
),
),
SizedBox(
height:
15.0,
),
Divider(),
Container(
width: 180,
height: 40,
child: RaisedButton(
child: Text(widget.myapplang == 'ar' ? "أكتب تعليق.." : "Write a comment..", style: TextStyle(color: GlobalUniversal.blackColor.withOpacity(0.5), fontSize: 12, fontWeight: FontWeight.bold, fontFamily: widget.myapplang == 'ar' ? 'Tajawal' : 'BalooDa2')),
elevation: 0.0,
shape: new RoundedRectangleBorder(
borderRadius: new BorderRadius.circular(25.0),
),
color: GlobalUniversal.secondWhiteBG,
onPressed: () async {
// Navigator.push(context, new MaterialPageRoute(builder: (context) => new Comments(myapplang: widget.myapplang, myuid: widget.myuid, myfullname: widget.fullname, myimg: widget.uprofilePicUrl, CommentMajCount: widget.CommentMajCount, pid: mypost['pid'],uid: mypost['uid'], majname: widget.majname, pdoc: mypost.documentID.toString())));
},
),
),
],
),
),
),
),
);
}
},
);
}
},
);
});
}
return Container(
height: 0.0,
width: 0.0,
);
},
),