listview - ListView里面的ListView显示错误的项目Flutter
问题描述
我有一个带有评论项目的 ListView,每个评论都有一个带有评论回复的新 ListView,我使用了 Firebase,当我回复评论时,它在 ListView 上显示错误的文本,但在控制台中打印了正确的文本。当我回去再回来时,它会显示正确的值。观看视频进行澄清。
Padding(
padding: EdgeInsets.only(left: 0.0),
child: StreamBuilder(
stream: getCommentReply(listMessage[index]['id']),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return Center(child: Text(''));
}
var listReplyMessage = snapshot.data.documents;
return Padding(
padding: EdgeInsets.only(top: 8.0),
child: commentsReplyItems(listReplyMessage,
snapshot, listMessage[index]['id']));
}))
Widget commentsReplyItems(
var listMessage, AsyncSnapshot snapshot, String commentID) {
return CommentReplay(
listMessage, snapshot, commentID, widget.currentUser, widget.postID);
}
Stream<QuerySnapshot> getCommentReply(String msgID) {
Stream<QuerySnapshot> _query = Firestore.instance
.collection('Posts')
.document(widget.postID)
.collection('Comments')
.document(msgID)
.collection('Reply')
.orderBy('created_at', descending: true)
.limit(2)
.snapshots();
return _query;
}
评论回复项目
class CommentReplay extends StatefulWidget {
List<dynamic> listMessage;
AsyncSnapshot snapshot;
String commentID;
FirebaseUser currentUser;
String postID;
CommentReplay(this.listMessage, this.snapshot, this.commentID,
this.currentUser, this.postID);
@override
_CommentReplayState createState() => _CommentReplayState();
}
class _CommentReplayState extends State<CommentReplay> {
var _key = GlobalKey<FormState>();
@override
Widget build(BuildContext context) {
return ListView.builder(
shrinkWrap: true,
key: _key,
physics: ClampingScrollPhysics(),
itemCount: widget.snapshot.data.documents.length,
itemBuilder: (context, position) {
//print(position);
return Container(
padding: EdgeInsets.only(top: 5.0),
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
widget.listMessage[position['commentText'],
textStyle: TextStyle(
fontSize: 16.0,
color: Color(0xff0D0E15)),
textAlign: TextAlign.start,
)
],
),
);
});
}
解决方案
查看您的代码后,我发现使用带有评论回复容器的密钥可以解决您的问题。
我像下面这样使用它并且它的工作
return ListView.builder(
shrinkWrap: true,
controller: _replayController,
physics: ClampingScrollPhysics(),
itemCount: snapshot.data.documents.length,
itemBuilder: (context, index) {
return Container(
key: Key(listMessage[index]['id']),
padding: EdgeInsets.only(top: 5.0),
child: Row()
)
});
推荐阅读
- ios - 有没有更好的方法来实例化我的环境对象类?- 斯威夫特用户界面
- python-3.x - 使用 tqdm 向 youtube dl 添加进度条?
- amazon-web-services - GitLab Ci/Cd 到 Amazon LightSail
- c# - System.FormatException - Visual Studio Mac 与 PC
- c - 如何在 MacOS 上使用 SDL2 创建窗口
- android - 如何实现android.text.InputType
- c++ - 不能在 C++ 模块 (clang++ v12) 中包含标准头文件
- python - 正则表达式。是否可以相对于另一个元素设置条件但不匹配它
- c# - NuGet 版本冲突
- python - 如何使用 python 从 pandas 数据框中排除某些列