Трепещите, как фиксированные записи в списке

# #firebase #flutter #google-cloud-firestore

Вопрос:

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

См. Мой документ бд: введите описание изображения здесь

Вот мой список в коде visual studio:

  1. Список:
 I/flutter ( 5143): list: {eco_shipping: false, fairtrade: false, business_status: private, sub_category: null, status_color: 0, description: D, adress: A, delivery_time: 0, stars: 0, title: T, sell_status: search, eco: false, hashTags: [], user_id: YpPfU7cyAzLrS2sOtsRn4fXPIvV2, price: 0,02 €, main_category: Electronics, id: id_1631823807583_YpPfU7cyAzLrS2sOtsRn4fXPIvV2, create_date: Timestamp(seconds=1631823807, nanoseconds=0)}
 
  1. Список:
 I/flutter ( 5143): list: {eco_shipping: false, business_status: private, fairtrade: false, sub_category: null, status_color: 0, description: D, adress: A, stars: 0, delivery_time: 0, title: T, sell_status: search, eco: false, hashTags: [], user_id: YpPfU7cyAzLrS2sOtsRn4fXPIvV2, price: 0,02 €, main_category: Electronics, id: id_1631824342677_YpPfU7cyAzLrS2sOtsRn4fXPIvV2, create_date: Timestamp(seconds=1631824342, nanoseconds=0)
 

моя проблема:
Я бы заполнил список одним объектом.
Объект:

 ProductDataObject(
          eco_shipping: list.entries.elementAt(0).value,
          fairtrade: list.entries.elementAt(1).value,
          business_status: list.entries.elementAt(2).value,
          sub_category: list.entries.elementAt(3).value,
          status_color: list.entries.elementAt(4).value,
          description: list.entries.elementAt(5).value,
          adress: list.entries.elementAt(6).value,
          stars: list.entries.elementAt(7).value,
          delivery_time: list.entries.elementAt(8).value,
          title: list.entries.elementAt(9).value,
          sell_status: list.entries.elementAt(10).value,
          eco: list.entries.elementAt(11).value,
          hashTag: list.entries.elementAt(12).value,
          user_id: list.entries.elementAt(13).value,
          price: list.entries.elementAt(14).value,
          main_category: list.entries.elementAt(15).value,
          product_id: list.entries.elementAt(16).value,
          create_date: list.entries.elementAt(17).value,
          image_url: [lst_image_url],
        ),
 

Но для этого мне всегда нужна одна и та же серия списков.

Например:

  1. eco_shipping
  2. честная торговля
  3. бизнес_статус
  4. подкатегория …

Примеры списков не равны. Записи fairtrade и business_status не находятся в одном и том же индексе в моем списке.

Мой вопрос: Как я могу указать в списке последовательность исправлений (для записей)? Много раз.

Ответ №1:

Определите эту функцию в своей ProductDataObject модели

 _productDatafromJson(Map<String, dynamic> json) {
  // I tried to infer your properties types from the data you gave, so
  // feel free to correct any type.
  return ProductDataObject(
    eco_shipping: json['eco_shipping'] as bool,
    fairtrade: json['fairtrade'] as bool,
    business_status: json['business_status'] as String,
    sub_category: json['sub_category'] as bool,
    status_color: json['status_color'] as int,
    description: json['description'] as String,
    adress: json['adress'] as String,
    stars: json['stars'] as int,
    delivery_time: json['delivery_time'] as String,
    title: json['title'] as String,
    sell_status: json['sell_status'] as String,
    eco: json['eco'] as bool,
    hashTag: (json['hashTag'] as List)?.map((e) => e as String)?.toList(),
    user_id: json['user_id'] as String,
    price: json['price'] as String,
    main_category: json['main_category'] as String,
    product_id: json['product_id'] as bool,
    // create_date type will be DateTime
    create_date: (json['create_date'] as Timestamp)?.toDate(),
    image_url: (json['image_url'] as List)?.map((e) => e as String)?.toList(),
  );
}
 

Тогда назови это так:

 // for single ProductDataObject, use this
ProductDataObject data = _productDatafromJson(list);
print(data);

// for multiple ProductDataObject, use this:
List<Map<String, dynamic>> list; 
// here list is a List of Map<String, dynamic>. It is not a single Map<String, dynamic>
List<ProductDataObject> data = list.map((e) => _productDatafromJson(e)).toList();
print(data);
 

Комментарии:

1. Привет, Питер, спасибо за твой ответ. Ты мне очень помогаешь. Теперь это работа. Вот мое решение «eco_shipping: список.записей .где((элемент) => элемент.ключ = = «eco_shipping»). карта((e) =>> e.значение) .Элемент(0),». Многие thx (:

2. Так рад, что смог помочь.