Вы должны убедиться, что всякий раз, когда вы добавляете новый элемент в вашу базу данных и генерируется autoId, database-Generated-ID должен быть id
класса модели, который вы используете для хранения данные в вашем проекте. Поэтому при каждом обновлении ссылка на id
в качестве ключа базы данных может привести вас к продукту, который вы хотите обновить.
См. Пример кода ниже:
...
//fetching logic here
Future<void> fetchAndSetOrders() async {
final url = 'https://<*firebase-project-name*>.firebaseio.com/orderList.json?auth=$authToken';
//add try and catch errors
try {
final response = await http.get(url);
final responseData = json.decode(response.body) as Map<String, dynamic>;
if (responseData == null) {
return;
}
List<OrderItem> loadedOrders = [];
responseData.forEach(
(orderId, orderData) => loadedOrders.add(
OrderItem(
orderNo: orderData['orderNo'],
partNo: orderData['partNo'],
status: orderData['partStatus'],
qty: orderData['qty'],
//**here id of order item is the orderId attached to the response
id: orderId,
),
),
);
_items = loadedOrders;
notifyListeners();
} catch (error) {
//
}
}
...
Теперь нужно обновить заказ .., поскольку каждый заказ имеет идентификатор, равный ключу элемента данных в базе данных
...
Future<void> updateOrder(String orderId, OrderItem order) async {
//note that i added the orderId to the url string
final url = 'https://<*firebase-project-name*>.firebaseio.com/orderList/$orderId.json?auth=$authToken';
await http.patch(
url,
body: json.encode({
'orderNo': order.orderNo,
'partNo': order.partNo,
'partStatus': order.status,
'qty': order.qty,
}),
);
}
...
Happy Coding D:)