# #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
и покажите результат?)