firebase - 带有firebase的Flutter HTTP包不适用于删除请求,但适用于发布,补丁和获取?
问题描述
我是 Flutter 和 Firebase 的新手,所以请多多包涵。
我有一个实时数据库,它存储(截至目前)产品列表。我的代码中的addProduct
, 和updateProduct
方法工作正常。但由于某种原因,deleteProduct
不是。当我尝试通过 URL 访问数据库时,它给了我一个 404 错误,即使完全相同的 URL 正在为该updateProduct
函数工作。
这是代码updateProduct
:
final _productIndex =
_items.indexWhere((element) => element.id == productId);
if (_productIndex >= 0) {
final url = Uri.parse(
"https://flutter-shop-app-f1b23-default-rtdb.firebaseio.com/products/$productId.json");
return http
.patch(url,
body: json.encode({
"title": newProduct.title,
"description": newProduct.description,
"imageUrl": newProduct.imageUrl,
"price": newProduct.price,
}))
.then((_) {
_items[_productIndex] = newProduct;
notifyListeners();
});
} else {
print("ERROR");
}
return Future(null);
}
这是代码deleteProduct
:
Future<void> deleteProduct(String productId) {
print(productId);
final url = Uri.parse(
"https://flutter-sdhop-app-f1b23-default-rtdb.firebaseio.com/products/$productId.json");
print(url.toString());
return http.delete(url).then((response) {
print(response.statusCode);
print(response.body);
if (response.statusCode >= 400) {
throw HttpException("Could not delete!");
}
_items.removeWhere((element) => element.id == productId);
notifyListeners();
});
}
这是(打印的)错误消息:
I/flutter ( 5104): 404
I/flutter ( 5104): {
I/flutter ( 5104): "error" : "404 Not Found"
I/flutter ( 5104): }
我尝试在浏览器窗口中打开 URL,并得到相同的 404 错误,这令人费解,因为 Flutter 似乎能够访问它进行更新而没有任何问题。firebase 项目是在测试模式下创建的,所以我认为身份验证不会成为这里的问题。
请帮助解决此问题。
以下是数据库规则:
{
"rules": {
".read": "now < 1624300200000", // 2021-6-22
".write": "now < 1624300200000", // 2021-6-22
}
}
解决方案
老实说,我不会为您推荐该解决方案。REST API 适用于没有原生 SDK 的用例。Flutter 绝对有一个非常好的你可以使用的。如果您继续采用这种方法,您将需要双重工作,因为您无法重用您使用 REST API 制作的任何内容。而且 Firebase 中最好的东西,比如实时监听器,不在 REST API 中。身份验证是 REST API 的一大难题。在没有原生 SDK 的情况下,它只是一个 Plan B 解决方案。
在删除链接中,您有一个错字:
https://flutter-sdhop-app-f1b23-default-rtdb.firebaseio.com/products/
它应该是shop
而不是sdhp
。
推荐阅读
- java - 示例 JPA - 创建动态查询 - Spring Boot
- ansible - Ansible:停止并禁用服务(如果存在)
- angular - RadListView pullToRefresh 内存泄漏
- vim - 强制 vim 终端始终显示最新输出
- java - exe安装后WMIC Java命令不起作用
- plsql - plsql 过程取一列的最大值并将其增加 1
- angular - 如何从 RxJS observable 中提取数据
- node.js - 重命名猫鼬响应中的键
- algorithm - 查找具有相似产品的类别 - 低效率 - 去
- couchdb - 在没有管理员密码的 couchdb 3 中创建新用户