Flutter/Dart _TypeError (тип «Строка» не является подтипом типа «int» «индекса»)

# #flutter #dart #firebase-realtime-database

#трепетать #дротик #firebase-база данных в реальном времени

Вопрос:

Я получаю ошибку, в которой говорится «_TypeError (тип «Строка» не является подтипом типа » int «»индекса»)» в этом блоке кода. Ошибка возникает, когда я перехожу на страницу заказов в своем приложении. Он показывает ошибку amount: , и datetime: когда я оформляю заказ в корзине, он отправляет ее в базу данных, однако, когда я перехожу на страницу заказов, происходит ошибка.

 extractedData.forEach((orderId, orderData) {  loadedOrders.add(  OrderItem(  id: orderId,  amount: orderData['amount'],  dateTime: DateTime.parse(orderData['dateTime']),  products: (orderData['products'] as Listlt;dynamicgt;)  .map(  (item) =gt; CartItem(  id: item['id'],  title: item['title'],  quantity: item['quantity'],  price: item['price'],  ),  )  .toList(),   

Это моя база данных:

 shopapp-6740d-default-rtdb:  orders: -MpxLeVE1f5xosVHiYdM  amount: 59.99  dateTime: "2021-12-02T17:53:52.689091"  products: 0  id: "2021-12-02 17:53:50.251572"  price: 59.99  quantity: 1  title: "Trousers"  

Это мой полный код.

 import 'dart:convert';  import 'package:flutter/material.dart'; import 'package:http/http.dart' as http;  import './cart.dart';  class OrderItem {  final String id;  final double amount;  final Listlt;CartItemgt; products;  final DateTime dateTime;   OrderItem({  required this.id,  required this.amount,  required this.products,  required this.dateTime,  }); }  class Orders with ChangeNotifier {  Listlt;OrderItemgt; _orders = [];   Listlt;OrderItemgt; get orders {  return [..._orders];  }   Futurelt;voidgt; fetchAndSetOrders() async {  const url = 'https://shopapp-6740d-default-rtdb.firebaseio.com/orders.json';   final response = await http.post(Uri.parse(url));  final Listlt;OrderItemgt; loadedOrders = [];  final extractedData = json.decode(response.body) as Maplt;String, dynamicgt;;   if(extractedData == null){  return;  }   extractedData.forEach((orderId, orderData) {  loadedOrders.add(  OrderItem(  id: orderId,  amount: orderData['amount'],  dateTime: DateTime.parse(orderData['dateTime']),  products: (orderData['products'] as Listlt;dynamicgt;)  .map(  (item) =gt; CartItem(  id: item['id'],  title: item['title'],  quantity: item['quantity'],  price: item['price'],  ),  )  .toList(),  ),  );  });  _orders = loadedOrders.reversed.toList();  notifyListeners();  }   Futurelt;voidgt; addOrder(Listlt;CartItemgt; cartProducts, double total) async {  const url = 'https://shopapp-6740d-default-rtdb.firebaseio.com/orders.json';  final timestamp = DateTime.now();  final response = await http.post(  Uri.parse(url),  body: json.encode({  'amount': total,  'dateTime': DateTime.now().toIso8601String(),  'products': cartProducts  .map((cp) =gt; {  'id': cp.id,  'title': cp.title,  'quantity': cp.quantity,  'price': cp.price,  })  .toList(),  }),  );   _orders.insert(  0,  OrderItem(  id: json.decode(response.body)['name'],  amount: total,  products: cartProducts,  dateTime: DateTime.now(),  ),  );  notifyListeners();  } }   

Комментарии:

1. Не могли бы вы показать более четкую схему своей базы данных? Немного сложно понять, в чем заключается проблема (в идеале, распечатайте extractedData и покажите результат?)