【问题标题】:Flutter getx: How to send data between pages from FirestoreQueryBuilderFlutter getx:如何在 FirestoreQueryBuilder 的页面之间发送数据
【发布时间】: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 将打开它的数据
  • 如果这正是您想要的,我很乐意为此写一个完整的答案

标签: flutter dart get


【解决方案1】:

您可以使用 GetX 依赖注入将变量从其他控制器共享到另一个控制器

在绑定时,将要添加的控制器添加为依赖项

Get.lazyPut<OfferCardsController>(() => OfferCardsController());

然后在控制器中

var offerCardsController = Get.find<OfferCardsController>();

您现在可以从 OfferCardsController onOfferController 访问变量

例如

offerCardsController.variableFromCardsController;

【讨论】:

    猜你喜欢
    • 2021-09-13
    • 2021-10-17
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    • 2018-09-01
    • 2020-04-24
    • 1970-01-01
    • 2021-07-19
    相关资源
    最近更新 更多