मैं वस्तुओं की एक सरणी के माध्यम से जाने की कोशिश कर रहा हूं, मैंने उन्हें अपने साझा संदर्भों में संग्रहीत किया है जहां मैं फायरबेस से डेटा जाता हूं और प्रत्येक ऑब्जेक्ट के लिए मात्रा जोड़ता हूं, अब मैं केवल उत्पाद का शीर्षक, मूल्य और मात्रा प्रदर्शित करना चाहता हूं। गाड़ी मैं उत्पाद से संबंधित सभी मूल्यों को कार्ट स्क्रीन पर खींचने में सक्षम था लेकिन कार्ट स्क्रीन में नेस्टेड मानों के माध्यम से कैसे लूप करना समस्या है। कृपया कोई मुझे स्पंदन पर और अधिक सीखने में मदद कर सकता है?

Cart screen
@override
  Widget build(BuildContext context) {
    SharedPreferences prefs = SharedPreferences.getInstance() as SharedPreferences;
    var cart = prefs.getStringList('userCart');
    return Row(
      children: [
        SizedBox(
          width: getProportionateScreenWidth(88),
          child: AspectRatio(
            aspectRatio: 0.88,
            child: Container(
              padding: EdgeInsets.all(10),
              decoration: BoxDecoration(
                color: Color(0XFFF5F6F9),
                borderRadius: BorderRadius.circular(15),
              ),
              child: Image.network(cart![0]),
              // child: Image.network(cart.product.images[0]),
            ),
          ),
        ),
        SizedBox(
          width: getProportionateScreenWidth(20),
        ),
        Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Text(
              cart.first,
              // cart.product.title,
              style: TextStyle(fontSize: 16, color: Colors.black),
              maxLines: 2,
            ),
            const SizedBox(
              height: 10,
            ),
            Text.rich(
              TextSpan(
                text: "\$${cart.product.price}",
                style: TextStyle(
                  color: kPrimaryColor,
                ),
                children: [
                  TextSpan(
                    text: " x${cart.numOfItem}",
                    style: TextStyle(
                      color: kTextColor,
                    ),
                  ),
                ],
              ),
            ),
          ],
        )
      ],
    );
  }
Storing the data from firebase and adding quantity 
Future<void> checkItemInCart(
    Product product, int quantity, BuildContext context) async {
  SharedPreferences prefs = await SharedPreferences.getInstance();

  // convert to map
  var product_str = product.toMap();

  // combine product with quantity
  String productWithQuantity =
      product_str.toString() + '-quantity-' + quantity.toString();

  // check if project exists first
  List<String> userCartPref = (prefs.getStringList('userCart') ?? <String>[]);
  ['Product-quantity-2'];

  /*
   update {
   check if found
   }
  */

  List<String> temp = (prefs.getStringList('userCart') ?? <String>[]);
  // add f
  //userCartPref ['iphone 1','laptop 3'];
  // temp ['laptop 3'];
  var foundInCart = false;
  for (var i = 0; i < userCartPref.length; i++) {
    var item = userCartPref[i];
    var items = item.split('-quantity-'); //list [product,quantity]
    var old_product = items[0];
    var old_qty = items[1];
    if (old_product.contains(product.pid)) {
      foundInCart = true;
      // product exists
      // delete the current item
      temp.removeAt(i);
      // set pref to temp
      prefs.setStringList('userCart', temp);

      // sum the quantity 2 1
      String finalQuantity = (quantity + int.parse(old_qty)).toString();
      // create string for pref with the updated quantity
      String updatedProductWithQuantity =
          product_str.toString() + '-quantity-' + finalQuantity;
      //add item with the updated quantity iphone 2
      addItemToCart(updatedProductWithQuantity, context);
      showSnackBar(context, "Quantity has been updated successfully");

      break;
    }

  
  }
  if (userCartPref.length == 0 || foundInCart == false) {
    addItemToCart(productWithQuantity, context);
    showSnackBar(context, "Product added successfully to cart");
  }

  await getProducts();
}
Future<void> addItemToCart(String product, BuildContext context) async {
  // await clearPref();
  print("inside");
  SharedPreferences prefs = await SharedPreferences.getInstance();
  List<String> tempCartList = (prefs.getStringList('userCart') ?? <String>[]);
  // print(tempCartList);
  tempCartList.add(product);
  prefs.setStringList('userCart', tempCartList);
}
Future<void> getProducts() async {
  SharedPreferences preferences = await SharedPreferences.getInstance();
  List<String> tempCartList =
      (preferences.getStringList('userCart') ?? <String>[]);
  for (var i = 0; i < tempCartList.length; i++) {
    var item = tempCartList[i];
    var items = item.split('-quantity-');
    var product_ = items[0];
    var quantity_ = items[1];
  }
}
0
Ahmed Al-Khateeb 27 सितंबर 2021, 14:27

1 उत्तर

सबसे बढ़िया उत्तर

आप सरणी पर पुनरावृति करने और उन्हें स्क्रीन पर प्रस्तुत करने के लिए ListView.builder या GridView.builder का उपयोग कर सकते हैं। तो अगर मैं ListView.builder का उपयोग करता हूं, तो cart screen में मेरा कोड इस तरह दिखेगा:

return ListView.builder(
  itemCount: cart.length, //length of cart
  itemBuilder: (context, index) {
    return Row(
      children: [
        SizedBox(
          width: getProportionateScreenWidth(88),
          child: AspectRatio(
            aspectRatio: 0.88,
            child: Container(
              padding: EdgeInsets.all(10),
              decoration: BoxDecoration(
                color: Color(0XFFF5F6F9),
                borderRadius: BorderRadius.circular(15),
              ),
              child: Image.network(cart![index]),
              // child: Image.network(cart.product.images[0]),
            ),
          ),
        ),
        SizedBox(
          width: getProportionateScreenWidth(20),
        ),
        Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Text(
              cart[index].product.title,
              // cart.product.title,
              style: TextStyle(fontSize: 16, color: Colors.black),
              maxLines: 2,
            ),
            const SizedBox(
              height: 10,
            ),
            Text.rich(
              TextSpan(
                text: "\$${cart[index].product.price}",
                style: TextStyle(
                  color: kPrimaryColor,
                ),
                children: [
                  TextSpan(
                    text: " x${cart[index].numOfItem}",
                    style: TextStyle(
                      color: kTextColor,
                    ),
                  ),
                ],
              ),
            ),
          ],
        )
      ],
    );
  },
);
0
Monik 27 सितंबर 2021, 14:48
मैं ListView से परिचित हूं, लेकिन मेरा सवाल यह था कि उत्पाद का नाम, मूल्य और मात्रा कैसे प्राप्त करें।
 – 
Ahmed Al-Khateeb
27 सितंबर 2021, 20:01
कीमत पाने के लिए आप कार्ट [इंडेक्स].उत्पाद.प्राइस का इस्तेमाल कर सकते हैं. यह आपकी स्कीमा पर निर्भर करता है। मैंने प्रदान की गई टिप्पणियों के अनुसार आपके प्रश्न का उत्तर देने का प्रयास किया। तो अगर आप स्कीमा साझा कर सकते हैं, तो मैं आपकी बेहतर तरीके से मदद कर सकता हूं।
 – 
Monik
28 सितंबर 2021, 09:21