создание списка с получением данных из пожарного магазина на флаттер - PullRequest
0 голосов
/ 08 апреля 2020

У меня есть приложение, которое мне нужно для получения этих данных из базы данных Firestore в Listview по трепетанию один за другим. Я пробовал много вещей, таких как построитель потока и будущий построитель, но не смог получить, потому что моя база данных работает с вложенными данными, если у вас есть какие-либо предложения, пожалуйста, дайте мне знать большое спасибо. Есть ли решение для чтения всех этих вложенных данных? иногда имя элемента может отличаться, поэтому я могу прочитать, если у вложенных данных есть идентификатор или значение количества

enter image description here

Я уже использовал это, но это не работает:

  import 'package:flutter/material.dart';
  import 'package:cloud_firestore/cloud_firestore.dart';

  class cart_page extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new StreamBuilder<QuerySnapshot>(
    stream: Firestore.instance.collection("cart").where("quantity", 
   isGreaterThanOrEqualTo: 1).snapshots(),
     builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> 
     snapshot) {
      if (!snapshot.hasData) return new Text("There is no expense");
      return new ListView(children: getExpenseItems(snapshot));
    });
     }

     getExpenseItems(AsyncSnapshot<QuerySnapshot> snapshot) {
      return snapshot.data.documents
         .map((doc) => new ListTile(
        title: new Text(doc["itemName"]),
        subtitle: new Text(doc["quantity"]))
  )
    .toList();
  }
 }

Ответы [ 3 ]

1 голос
/ 08 апреля 2020

Я изменил ваш код, кроме ответа выше моего, вы также неправильно запрашиваете вашу вложенную базу данных, и, так как мне нужен индекс для этой работы, мне пришлось кое-что переделать. Возможно, вам придется поиграть с этим, чтобы заставить его работать, но общая идея есть.



class Example extends StatelessWidget {
   var listOfWidgets = [];
  @override
  Widget build(BuildContext context) {
    return ListView.builder(
      itemCount: //number of items ,
      itemBuilder: (BuildContext context, int index) => StreamBuilder(

          stream: Firestore.instance
              .collection("cart")
              .where("Item$index.quantity", isGreaterThanOrEqualTo: 1)
              .snapshots(),
          builder:
              (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
                  if (!snapshot.hasData) return new Text("There is no expense");
                   return ...listOfWidgets;
              }),
    );
  }

  getExpenseItems(AsyncSnapshot<QuerySnapshot> snapshot) {

    var item = snapshot.data.documents
        .map((doc) => new ListTile(
            title: new Text(doc["Item$index.Name"]),
            subtitle: new Text(doc["Item$index.quantity"])))
        .toList();
    listOfWidgets.add(item);
  }
}
1 голос
/ 08 апреля 2020

Проблема здесь в том, что указанный c экземпляр, к которому вы обращаетесь, является картой, поэтому вы можете захотеть сделать это:

title: new Text(doc["Item 9"]["itemName"]),
subtitle: new Text(doc["Item 9"]["quantity"]))
0 голосов
/ 08 апреля 2020

Firestore не поддерживает тип запроса, который вам понадобится, когда вы читаете всю коллекцию «папа», поэтому вы можете читать документы и вложенные коллекции. Queris на Firestore мелкие, поэтому они не допускают такой функциональности. Как сообщили и комментировали другие участники сообщества, было бы лучше, чтобы вы изменили свою базу данных, поэтому она следует шаблону, а не элементам, имеющим возможность каждый раз иметь разные имена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...