Home > front end >  Dart Unhandled Exception: type 'List<dynamic>' is not a subtype of type 'Iterab
Dart Unhandled Exception: type 'List<dynamic>' is not a subtype of type 'Iterab

Time:01-05

I was working on a flutter app and when I upgraded it to Flutter 2.0 a new error started occurring. It is an error regarding typecasting but I am not sure why is it occurring as there was no problem with it with the older version. The error is as follows:

Dart Unhandled Exception: type 'List<dynamic>' is not a subtype of 

type 'Iterable<Map<dynamic, dynamic>>' in type cast, stack trace: #0      UserModel._convertCartItems (package:test_app/model/user.dart:67:31)
E/flutter (30545): #1      new UserModel.fromSnapshot (package:test_app/model/user.dart:58:12)
E/flutter (30545): #2      UserServices.getUserById.<anonymous closure> (package:test_app/services/user.dart:33:26)
E/flutter (30545): <asynchronous suspension>
E/flutter (30545): #3      UserProvider._onStateChanged (package:test_app/provider/user.dart:125:20)
E/flutter (30545): <asynchronous suspension>
E/flutter (30545): 

The code associated with it is :

    List<CartItemModel> _convertCartItems(List cart) {
    List<CartItemModel> convertedCart = [];
    for (Map cartItem in cart as Iterable<Map<dynamic, dynamic>>) {
      convertedCart.add(CartItemModel.fromMap(cartItem));
    }
    return convertedCart;
  }

I tried to remove the as Iterable<> but then the app just rendered one time and started a new error.

CodePudding user response:

You can try this without for loop :

  List<CartItemModel> _convertCartItems(List cart) {

    List<CartItemModel> convertedCart = [];

    convertedCart = cart.map((e) => CartItemModel.fromJson(e)).toList();

    return convertedCart;

  }

CodePudding user response:

Your cart variable is a List, not a Map. You need to change iteration process to this:

for (final rawCartItem in cart) {
  convertedCart.add(CartItemModel.fromMap(rawCartItem));
}
  •  Tags:  
  • Related