gpt4 book ai didi

firebase - 将数据从 firestore 加载到带有 flutter 的列表中的问题

转载 作者:IT王子 更新时间:2023-10-29 07:03:28 25 4
gpt4 key购买 nike

Firestore 文档包含特定的用户信息(用户名、年龄、挑战等)。当然,一个用户可以有多个挑战。我正在将特定用户数据加载到对象列表中,但是当我将该列表返回给 FutureBuilder 时出现问题。假设我有 2 个用户,每个用户有 3 个挑战。当我返回列表时,它显示正确的长度 (6),但仅包含加载到列表中的最后一个用户的数据。我的 ListView.builder 显示 6 个 _cardBuilder,但这些卡片中的数据是相同的。

我尝试用 Map 列表替换构造函数列表,但结果是一样的。这可能是一个逻辑错误,但我找不到它。

Future<List<AllChallengesStorage>> challengesToFeed () async {

var queryResult = await Firestore.instance.collection("Users")
.where("total_challenges", isGreaterThanOrEqualTo: 1)
.getDocuments();

if (queryResult.documents.isNotEmpty){

for (int i=0; i < queryResult.documents.length; ++i){
for (int j=0; j < queryResult.documents[i].data['total_challenges']; ++j){

widget.challengesInfo.username = queryResult.documents[i].data['username'];
widget.challengesInfo.name = queryResult.documents[i].data['challenges'][j]['name'];
widget.challengesInfo.description = queryResult.documents[i].data['challenges'][j]['description'];
widget.challengesInfo.duration = queryResult.documents[i].data['challenges'][j]['duration'];

allChallenges.add(widget.challengesInfo);
}
}
}
return allChallenges;
}


class _FeedState extends State<Feed> {

List<AllChallengesStorage> allChallenges = [];

@override
Widget build(BuildContext context) {
return Scaffold(
body: FutureBuilder<List<AllChallengesStorage>>(
future: challengesToFeed(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (!snapshot.hasData) return Center(child: Text("Loading..."));
return ListView.builder(
itemCount: snapshot.data.length,
itemBuilder: (BuildContext context, int index) {
return _cardBuilder(context, snapshot, index);
},
);
},
),
);
}

最佳答案

问题是您使用的是同一个对象,只是在每个循环中覆盖它的属性。您需要为每张新卡片实例化一个新对象,例如每次完成第二个循环时使用您的模型类创建一个新的辅助对象。

    for (int i=0; i < queryResult.documents.length; ++i){
ClassName helper = ClassName();
for (int j=0; j < queryResult.documents[i].data['total_challenges']; ++j){

helper.username = queryResult.documents[i].data['username'];
helper.name = queryResult.documents[i].data['challenges'][j]['name'];
helper.description = queryResult.documents[i].data['challenges'][j]['description'];
helper.duration = queryResult.documents[i].data['challenges'][j]['duration'];

allChallenges.add(helper);
}
}
}

然后要访问列表中的对象,您可以指定索引并访问该索引处的对象及其属性

allChallenges[index].name

关于firebase - 将数据从 firestore 加载到带有 flutter 的列表中的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56056889/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com