【发布时间】:2022-11-28 09:51:05
【问题描述】:
我想在我的 flutter 应用程序的主屏幕中获取数据,其中我有 OfferCards 列表,这些是通过我的 homeView 中的 FirestoreQueryBuilder 从 firestore 生成的,就像这样
FirestoreQueryBuilder<OfferData>(
pageSize: 10,
query: FirebaseFirestore.instance
.collection('Offers')
.orderBy('CreatedAt', descending: true)
.withConverter<OfferData>(
fromFirestore: ((snapshot, options) =>
OfferData.fromJson(snapshot.data()!)),
toFirestore: (value, options) => value.toJson()),
builder: (context, snapshot, _) {
if (snapshot.isFetching) {
return const Center(
child: CircularProgressIndicator(color: Colors.greenAccent),
);
} else if (snapshot.hasError) {
return const Center(
child: Text('Server error'),
);
} else if (snapshot.docs.isEmpty) {
return const Center(
child: Text('No offers'),
);
} else {
return ListView.builder(
itemBuilder: (context, index) {
final hasReachEnd = snapshot.hasMore &&
index + 1 == snapshot.docs.length &&
!snapshot.isFetchingMore;
if (hasReachEnd) {
snapshot.fetchMore();
}
final post = snapshot.docs[index].data();
homeController.offers[index] = post;
return OfferCardView();
},
itemCount: snapshot.docs.length);
}
},
)
在本示例的末尾,在 HomeController 中,我有 int 和 UserData 的映射,其中填充了所有报价。每个 offerCardView 都有 Get.find 到 HomeController 以访问此地图。这是我的问题,我如何确定在 OfferCardView 内部以及稍后在 OfferView 中(在点击给定的 OfferCardView 之后)地图中的哪个条目被点击/视图填充。我不知道如何完成这个,我知道在这里使用 Map 是错误的决定,但我不知道应该如何完成
【问题讨论】:
-
您的意思是当您点击任何
OfferCardView小部件时,它会打开带有文档数据的 OfferView 吗? -
@Gwhyyy 正是,这就是 HomeView 的样子 imgur.com/a/u3V8avF 并且每个条目都是单独的 OfferCardView,点击后将我们带到具有相同数据但在具有其他布局的整个屏幕上的 OfferView。是否可以将来自 FirestoreQueryBuilder 的这个数据集合收集到 HomeView 内部并将其传递给其他页面,或者我只需要在每个 OfferView 条目上从 firestore 重新下载此数据?
-
您能否澄清这一点“但在具有其他布局的整个屏幕上”,您的意思是文档数据应该根据每个 OfferCardView 而不同,“其他布局”是什么意思
-
您可以将每个文档数据及其索引传递给 OfferView 构造函数,因此对于将被单击的每个 OfferCardView,OfferView 将打开它的数据
-
如果这正是您想要的,我很乐意为此写一个完整的答案