Home > Mobile >  How to add elemets in list using single list? Dart
How to add elemets in list using single list? Dart

Time:03-01

i have single list but i want to create new list having elements

  var products=[
              {"pro_id": "AZ101","quality":"top", "model": "M-Plaz","price": 22500},
              {"pro_id": "AZ101","quality":"top", "model": "Z-Plaz","price": 33500},
              {"pro_id": "AB102","quality":"middel", "model": "M-Neo", "price": 11560},
              {"pro_id": "AB102","quality":"middel", "model": "N-Neo1","price": 13600}];

i want output result like below,

under products want.. pro_id,quality and items based on pro_id

var newlist=[{"products":[
    {
        "pro_id":"AZ101",
        "quality":"top",
        "items": [
           {"pro_id": "AZ101","quality":"top", "model": "M-Plaz","price": 2500},
          {"pro_id": "AZ101","quality":"top", "model": "Z-Plaz","price": 3500}
        ]},{
        "p_id": "AB102",
        "quality":"middel",
        "items": [
           {"pro_id": "AB102","quality":"middel", "model": "M-Neo", "price": 1560},
          {"pro_id": "AB102","quality":"middel", "model": "N-Neo1","price": 3600}
        ]},
    ]
}];

How get this result.

CodePudding user response:

i'm not sure what you want. but maybe this help you.

Map<String, dynamic> newList = {'products' : products};

CodePudding user response:

First, I am retrieving pro_id, then finding product based on it. You can find info on code-comment.

Run on dartPad.

void main() {
  final List<Map<String, dynamic>> products = [
    {"pro_id": "AZ101", "quality": "top", "model": "M-Plaz", "price": 22500},
    {"pro_id": "AZ101", "quality": "top", "model": "Z-Plaz", "price": 33500},
    {"pro_id": "AB102", "quality": "middel", "model": "M-Neo", "price": 11560},
    {"pro_id": "AB102", "quality": "middel", "model": "N-Neo1", "price": 13600}
  ];

  /// filter product ids
  List<String> productIds = [];
  List<String> qualites = [];

  products.forEach((product) {
    if (!productIds.contains(product['pro_id'])) {
      productIds.add(product['pro_id']);
      qualites.add(product['quality']);
    }
  });

  // print(productIds.toString());

  /// create a subResult that will hold List of product based on id
  List<Map<String, dynamic>> subResult = [];

  /// find product by id
  List<Map<String, dynamic>> _getProducts(String id) {
    final filterProduts =
        products.where((element) => element['pro_id'] == id).toList();

    // print(filterProduts);
    return filterProduts;
  }

  for (int i = 0; i < productIds.length; i  ) {
    subResult.add({
      "pro_id": productIds[i],
      "quality": qualites[i],
      "items": _getProducts(productIds[i]),
    });
  }

  // print(subResult);

  /// for finish result wrap with map and list, then can be convert to List
  final List<Map<String, dynamic>> result = [
    {"products": subResult}
  ];

  print(result);
}
  • Related