получить список из fireStore в приложении флаттера с индексами - PullRequest
0 голосов
/ 11 марта 2020

Я пытаюсь получить список из магазина, но у меня была проблема с индексами.

Это структура обычных элементов в списке, и каждый объект содержит список элементов:

class RestaurantFoodList { 
    final String id ; 
    final String title; 
    List <RestaurantitemList> items ; 
    final String imageUrl;

    RestaurantFoodList({this.id,this.title,this.items,this.imageUrl}); 
}

Это структура самих предметов:

class RestaurantitemList { 
    final String id ; 
    final String title ; 
    final String imageUrl ; 
    final String description ; 
    final int price ; 
    final int shippingPrice;
    List<Checkbox> cheker;

    RestaurantitemList({this.id,this.title,this.imageUrl,this.description,this.price,this.shippingPrice,this.cheker});
} 

Вот как я могу добавить объект в firestore:

Future<void> addLitem(RestaurantFoodList foodList, RestaurantitemList itemList) async {
    final _fireStore = Firestore.instance;
    _fireStore.collection('restaurant').add({
        'title': foodList.title,
        'imageUrl': foodList.imageUrl,
        'items': [
            {
                'id': itemList.id,
                'title': itemList.title,
                'imageUrl': itemList.imageUrl,
            }
         ],
    });
} 

и - это данные моего магазина, моя проблема в том, как правильно выбрать весь список и его элементы, я попробовал это, но это не сработало:

Future<void> fetchAndSetList() async {
    final List<RestaurantFoodList> loadedList = [];

    await Firestore.instance.collection("restaurant").getDocuments().then(
          (QuerySnapshot snapshot) => snapshot.documents.forEach(
            (f) => loadedList.insert(
              0,
              RestaurantFoodList(
                  id: f.data['id'],
                  imageUrl: f.data['imageUrl'],
                  title: f.data['title'],
                  items: [f.data['items']]

              ),
            ),
          ),
    );

    notifyListeners();
    _restaurantItems[3].itemsList = loadedList;

} 

примечание: если я напишу другой метод для получить элементы, которые я должен написать

items: loadedItem.add(RestaurantitemList(
    id : f.data['items'][0]['id']
))

, но я хочу получить весь список элементов, а не только один элемент, поэтому подход к индексу здесь, я думаю, является ошибкой.

1 Ответ

0 голосов
/ 20 марта 2020

Я удалил первый ответ и добавляю новый (отредактирую эту строку, как только вы ее увидите).

Итак, есть несколько проблем с вашей функцией fetchAndSetList, и я переписал его:

Future < void > fetchAndSetList() async {
    final List < RestaurantFoodList > loadedList = [];
    final List < RestaurantitemList > itemList = [];

    await Firestore.instance.collection("restaurant").getDocuments().then(
        (QuerySnapshot snapshot) => snapshot.documents.forEach((f) => {
            itemList = [];
            f.data['items'].forEach((i) =>
                itemList.add(RestaurantitemList(
                    id: i.id,
                    title: i.title,
                    imageUrl i.imageUrl
                    // you might need to add all fields here, even if they are null
                )
            ); 
            loadedList.add(RestaurantFoodList(
                id: f.data['id'],
                imageUrl: f.data['imageUrl'],
                title: f.data['title'],
                items: itemList
            ))
        });
    );

    notifyListeners();

}

Что я изменил?

  • Добавил переменную itemList, список RestaurantitemList, который вы добавите в свой окончательный loadedList;
  • Добавил к оригиналу forEach второй элемент forEach, который заполняет itemList вашими RestaurantitemList объектами. Я также добавил комментарий, в котором говорится, что вы должны добавить все поля, которые вы отобразили для объекта RestaurantitemList;
  • Я изменил loadedList.insert на loadedList.add, поэтому вам не нужно беспокоиться о том, к какой позиции добавляется запись.

ПРИМЕЧАНИЕ : это не проверено, но это должно исправить проблемы, которые были.

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