Класс данных Flutter/DartAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Класс данных Flutter/Dart

Сообщение Anonymous »

Я создаю приложение для электронной коммерции для самостоятельной практики, используя Flutter (мой серверный интерфейс находится на Laravel). Каждый раз, когда я создаю класс модели, я всегда сталкиваюсь с проблемами в методах fromMap.
В настоящее время я не могу сохранить свой ответ API на заказ (класс Orders и orderItems приведен ниже). Ошибка говорит
Unhandled Exception: type 'List' is not a subtype of type 'List'
in type cast

вот как я пытаюсь сохранить ответ API
Orders orders = Orders(
List.from(response.data)
.map((item) => OrderItem.fromMap(item))
.toList(),
);

Класс заказов
class Orders {
final List orders;

Orders(
this.orders,
);

Orders copyWith({
List? orders,
}) {
return Orders(
orders ?? this.orders,
);
}

Map toMap() {
return {
'orders': orders.map((x) => x.toMap()).toList(),
};
}

factory Orders.fromMap(Map map) {
return Orders(
List.from(
(map['orders'] as List).map(
(x) => OrderItem.fromMap(x as Map),
),
),
);
}

String toJson() => json.encode(toMap());

factory Orders.fromJson(String source) =>
Orders.fromMap(json.decode(source) as Map);

@override
String toString() => 'Orders(orders: $orders)';

@override
bool operator ==(covariant Orders other) {
if (identical(this, other)) return true;

return listEquals(other.orders, orders);
}

@override
int get hashCode => orders.hashCode;
}


Класс OrderItems
class OrderItem {
final num id;
final List pid;

OrderItem(
this.id,
this.pid,
);

OrderItem copyWith({
num? id,
List? pid,
}) {
return OrderItem(
id ?? this.id,
pid ?? this.pid,
);
}

Map toMap() {
return {
'id': id,
'pid': pid,
};
}

factory OrderItem.fromMap(Map map) {
return OrderItem(
map['id'] as num,
List.from(
(map['pid'] as List),
),
);
}

String toJson() => json.encode(toMap());

factory OrderItem.fromJson(String source) =>
OrderItem.fromMap(json.decode(source) as Map);

@override
String toString() => 'OrderItem(id: $id, pid: $pid)';

@override
bool operator ==(covariant OrderItem other) {
if (identical(this, other)) return true;

return other.id == id && listEquals(other.pid, pid);
}

@override
int get hashCode => id.hashCode ^ pid.hashCode;
}


Вот как выглядит ответ API
[
{
"id": 1,
"uid": "1",
"pid": [
1,
2
],
"created_at": "2022-07-16T10:34:51.000000Z",
"updated_at": "2022-07-16T10:34:51.000000Z"
},
{
"id": 2,
"uid": "1",
"pid": "[2,3]",
"created_at": "2022-07-16T12:19:15.000000Z",
"updated_at": "2022-07-16T12:19:15.000000Z"
}
]


Подробнее здесь: https://stackoverflow.com/questions/730 ... data-class
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»