您必须确保每当您向数据库添加新项目并生成 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) {
//
}
}
...
现在更新订单..因为每个订单都有一个 id 等于数据库中数据项的键
...
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,
}),
);
}
...
快乐编码 D:)