David.Simeon
David.Simeon

Reputation: 1

Unhandled Exception: Invalid argument: Instance of 'CartItemModel'

i am working on a store application and after the user places an order, i will like to store that order details in the firebase firestore. the function for carrying out that call after the button is pressed is this

 addOrderDetails() {
final user  = Provider.of<UserProvider>(context, listen: false);
writeOrderDetailsForUser({
  "userId" : user.user.uid,
  "description" : "Cash on delivery",
  "status" : "pending",
  "createdAt": DateTime.now().millisecondsSinceEpoch.toString(),
  "totalPrice" : user.userModel.totalCartPrice,
   "cart" : user.userModel.cart,
  "address" : widget.addressId,
  "phone" : user.userModel.phone,
 }).whenComplete(() async {
  for (CartItemModel cartItem in user.userModel.cart){
    bool value = await user.removeFromCart(cartItem: cartItem);
    if(value) {
      user.reloadUserModel();
      ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text("Item has been successfully removed from cart"),));
    }else {
      print(
        "item has not been removed from cart please try again"
      );
    }
  }
  ScaffoldMessenger.of(context).showSnackBar(SnackBar(
    content: Text(
        "Your order has been successfully created, please we will call you in a few minutes to confirm your order"),));
});
changeScreenReplacement(context, NavigationController());

}

Future writeOrderDetailsForUser(Map<String, dynamic> data) async
  {
    await EcommerceApp.firestore
        .collection(EcommerceApp.collectionOrders)
        .document(EcommerceApp.sharedPreferences.getString(EcommerceApp.userUID) + data['createdAt'])
        .setData(data);
  }
}

However i am getting this error anytime i make the function call

I/flutter (24853): cart items are: Instance of 'CartItemModel' E/flutter (24853): [ERROR:flutter/lib/ui/ui_dart_state.cc(199)] Unhandled Exception: Invalid argument: Instance of 'CartItemModel' E/flutter (24853): #0 StandardMessageCodec.writeValue (package:flutter/src/services/message_codecs.dart:419:7) E/flutter (24853): #1 FirestoreMessageCodec.writeValue (package:cloud_firestore_platform_interface/src/method_channel/utils/firestore_message_codec.dart:83:13) E/flutter (24853): #2 StandardMessageCodec.writeValue (package:flutter/src/services/message_codecs.dart:409:9) E/flutter (24853): #3 FirestoreMessageCodec.writeValue (package:cloud_firestore_platform_interface/src/method_channel/utils/firestore_message_codec.dart:83:13) E/flutter (24853): #4 StandardMessageCodec.writeValue. (package:flutter/src/services/message_codecs.dart:416:9) E/flutter (24853): #5 _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:397:8) E/flutter (24853): #6 StandardMessageCodec.writeValue (package:flutter/src/services/message_codecs.dart:414:13) E/flutter (24853): #7 FirestoreMessageCodec.writeValue (package:cloud_firestore_platform_interface/src/method_channel/utils/firestore_message_codec.dart:83:13) E/flutter (24853): #8 StandardMessageCodec.writeValue. (package:flutter/src/services/message_codecs.dart:416:9) E/flutter (24853): #9 _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:397:8) E/flutter (24853): #10 StandardMessageCodec.writeValue (package:flutter/src/services/message_codecs.dart:414:13) E/flutter (24853): #11 FirestoreMessageCodec.writeValue (package:cloud_firestore_platform_interface/src/method_channel/utils/firestore_message_codec.dart:83:13) E/flutter (24853): #12 StandardMethodCodec.encodeMethodCall (package:flutter/src/services/message_codecs.dart:551:18) E/flutter (24853): #13 MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:150:13) E/flutter (24853): #14 MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:331:12) E/flutter (24853): #15 MethodChannelDocumentReference.setData (package:cloud_firestore_platform_interface/src/method_channel/method_channel_document_reference.dart:28:43) E/flutter (24853): #16 DocumentReference.setData (package:cloud_firestore/src/document_reference.dart:48:22) E/flutter (24853): #17 _PaymentPageState.writeOrderDetailsForUser (package:maen/screens/placeOrderPayment.dart:349:10) E/flutter (24853): #18 _PaymentPageState.addOrderDetails (package:maen/screens/placeOrderPayment.dart:316:5) E/flutter (24853): #19 _PaymentPageState.build. (package:maen/screens/placeOrderPayment.dart:297:17)

Upvotes: 0

Views: 1248

Answers (1)

krishnaacharyaa
krishnaacharyaa

Reputation: 25080

The problem is caused because of this line

 "cart" : user.userModel.cart,

Seems like your user.userModel.cart is the List of CartItemModel,

To overcome this you'll have to serialize this and then add to the database, because database doesn't know anything about CartItemModel,

Do something like this:

"cart" : user.userModel.cart.map((e)=>e.toJson()).toList();

In CartItemModel define the toJson function

As the details is less, I assume CartItemModel has fields like id , name and price

Map toJson() => {
        'id': id,
        'name': name,
        'price' : price
      };

This should solve your problem

Upvotes: 0

Related Questions