Тип Flutter 'List <dynamic>' не является подтипом типа 'String' в приведении типов - PullRequest
0 голосов
/ 04 августа 2020

Проблема

Я новичок в флаттере и прямо сейчас создаю приложение для доставки.

Клиент добавляет товары в свою корзину, теперь я хочу отправить эту таблицу продуктов, выбранных клиентом, на сервер для оформления заказа, и у меня есть ошибка:

_TypeError (type 'List<dynamic>' is not a subtype of type 'String' in type cast

Это мой класс CartItem

class CartItem {
  String id, name, count, price, image;
  CartItem(this.id, this.name, this.count, this.price, this.image);
}

Здесь я добавляю товар в корзину

List cart = [];

addItemCart(Food item) {
    adjustPrice(item.price, true);

    for (int i = 0; i < cart.length; i++) {
      if (cart[i].name == item.name) {
        setState(() {
          cart[i].count = (int.parse(cart[i].count) + 1).toString();
          adjustScroll(i);
        });
        return;
      }
    }
    setState(() {
      cart.add(new CartItem(item.id, item.name, '1', item.price.toString(), item.image));
      adjustScroll(cart.length - 1);
    });
  }

На этом уровне я получаю сообщение об ошибке при отправке на сервер

payOnDelivery(
    adresseId,
    items,
    price,
    deliveryFee,
    tvaFee,
    finalPrice,
    paymentMode,
    devise,
  ) async {

    SharedPreferences sharedPreference = await SharedPreferences.getInstance();
    var token = sharedPreference.getString('token');
    var header = {'Authorization': 'Bearer $token'};

    Map data = {
      'adresseId': adresseId,
      'items': items,
      'price': price.toString(),
      'deliveryFee': deliveryFee.toString(),
      'tvaFee': tvaFee.toString(),
      'finalPrice': finalPrice.toString(),
      'paymentMode': paymentMode,
      'devise': devise
    };

    var jsonResponse;
    var response = await http.post(url + 'order/add/', body: data, headers: header);

    if (response.statusCode == 201) {
      jsonResponse = json.decode(response.body);

      setState(() {
        _isLoading = false;
        isLogged = true;
        cart = [];
      });
    } else {
      jsonResponse = json.decode(response.body);

      setState(() {
        _isLoading = false;
      });
    }
  }

Список, который я хочу отправить на сервер (на картинке)

Ответы [ 2 ]

1 голос
/ 04 августа 2020
 Post only take Map<String,String> in body but you are using  
 Map<String,dynamic> that's why you  getting this error .In your   
 Map<String,dynamic>   items  list is dynamic type you need to  encode it


 Map<String ,String> data = {
  'adresseId': adresseId,
  'items': json.encode(items)
  'price': price.toString(),
  'deliveryFee': deliveryFee.toString(),
  'tvaFee': tvaFee.toString(),
  'finalPrice': finalPrice.toString(),
  'paymentMode': paymentMode,
  'devise': devise
};
0 голосов
/ 07 августа 2020

Я решил проблему после нескольких поисков, мне нужно просто закодировать элементы списка в json, выполнив следующие действия:

var item = jsonEncode(items);

Map<String ,String> data = {
  'adresseId': adresseId,
  'items': item
  'price': price.toString(),
  'deliveryFee': deliveryFee.toString(),
  'tvaFee': tvaFee.toString(),
  'finalPrice': finalPrice.toString(),
  'paymentMode': paymentMode,
  'devise': devise
};
...