我有一个Stream Builder,它会填充一叠纸牌:
select
user AS recipient,
COUNT(*) as trans_count,
sum(amount) as sum_am
from transactions
group by user
having count(*) >= 3 and
sum(amount) >= 1000;
_showCards() {
return StreamBuilder<QuerySnapshot>(
stream: cardReference.snapshots(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return circularProgress();
}
return Stack(children: fillCards(snapshot));
});
}
我想使用跳过按钮删除堆栈上的顶部快照。如何管理快照以访问特定索引?
编辑:
我需要从“堆栈”视图中删除该卡,而不是实际上从数据库中删除它。我在想应该使用列表并使用.removeAt(index),但不确定如何将Firestore中的快照添加到列表中。如您在fillCards()中所见,我目前有一张文档地图。
fillCards(AsyncSnapshot<QuerySnapshot> snapshot) {
return snapshot.data.documents
.map((doc) => buildCards(
image: doc["mediaUrl"],
title: doc["title"],
type: doc["description"],
))
.toList();
}
答案 0 :(得分:0)
在这种情况下,如果您是我,则创建一个viewModel并将文档数据复制到viewModel中。然后,我只修改viewModel来管理视图。
答案 1 :(得分:0)
当您点击项目的“跳过”按钮时,您似乎试图跳过列表中的任何项目。
这里有一些方法可以做到这一点:
以下是最后一种选择的想法:
final _skippedIds = List();
// The filtered list
snapshot.data.documents.where((doc) => !_skippedIds.contains(doc["id"])).map(...
// The onTap of each skip button:
onTap: () => setState(() => _skippedIds.add(doc["id"])),
此外,您可以将跳过的ID列表保存在SharedPreferences
上。