Flutter 颤振-如果我不知道,如何将数据更新到firebase上的实时数据库并找到这些密钥

Flutter 颤振-如果我不知道,如何将数据更新到firebase上的实时数据库并找到这些密钥,flutter,firebase-realtime-database,dart,Flutter,Firebase Realtime Database,Dart,我是一个新手,我想知道如果我不知道这些密钥,如何在firebase上实时更新数据。 例如,当我不知道这些密钥时,我想动态地或单独地将partStatus从“进行中”更改为“已交付”。您必须确保每当向数据库添加新项并生成autoId时,数据库生成的id应该是用于在项目中保存数据的模型类的id。因此,每当进行更新时,将id引用为数据库密钥可以让您找到要更新的产品 请参见下面的示例代码: ... //fetching logic here Future<void> fetchAndSet

我是一个新手,我想知道如果我不知道这些密钥,如何在firebase上实时更新数据。
例如,当我不知道这些密钥时,我想动态地或单独地将partStatus从“进行中”更改为“已交付”。

您必须确保每当向数据库添加新项并生成autoId时,数据库生成的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 fetchAndSetOrders()异步{
最终url=https://.firebaseio.com/orderList.json?auth=$authToken';
//添加try-and-catch错误
试一试{
最终响应=等待http.get(url);
final responseData=json.decode(response.body)作为映射;
if(responseData==null){
返回;
}
列表加载顺序=[];
回答:塔塔·弗雷奇(
(orderId,orderData)=>loadedOrders.add(
订单项(
orderNo:orderData['orderNo'],
partNo:orderData['partNo'],
状态:orderData['partStatus'],
数量:订单数据['qty'],
//**此处,订单项的id是附加到响应的orderId
id:orderId,
),
),
);
_项目=已加载订单;
notifyListeners();
}捕获(错误){
//
}
}
...
现在更新订单。。因为每个订单都有一个id,该id等于数据库中dataitem的键

...
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,
      }),
    );
  }
...
。。。
Future updateOrder(字符串orderId,OrderItem order)异步{
//注意,我将orderId添加到url字符串中
最终url=https://.firebaseio.com/orderList/$orderId.json?auth=$authToken';
等待http.patch(
网址,
正文:json.encode({
“orderNo”:order.orderNo,
“零件号”:order.partNo,
“partStatus”:order.status,
“数量”:订单数量,
}),
);
}
...

快乐编码D:)

您必须确保,每当您向数据库添加新项并生成autoId时,数据库生成的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 fetchAndSetOrders()异步{
最终url=https://.firebaseio.com/orderList.json?auth=$authToken';
//添加try-and-catch错误
试一试{
最终响应=等待http.get(url);
final responseData=json.decode(response.body)作为映射;
if(responseData==null){
返回;
}
列表加载顺序=[];
回答:塔塔·弗雷奇(
(orderId,orderData)=>loadedOrders.add(
订单项(
orderNo:orderData['orderNo'],
partNo:orderData['partNo'],
状态:orderData['partStatus'],
数量:订单数据['qty'],
//**此处,订单项的id是附加到响应的orderId
id:orderId,
),
),
);
_项目=已加载订单;
notifyListeners();
}捕获(错误){
//
}
}
...
现在更新订单。。因为每个订单都有一个id,该id等于数据库中dataitem的键

...
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,
      }),
    );
  }
...
。。。
Future updateOrder(字符串orderId,OrderItem order)异步{
//注意,我将orderId添加到url字符串中
最终url=https://.firebaseio.com/orderList/$orderId.json?auth=$authToken';
等待http.patch(
网址,
正文:json.encode({
“orderNo”:order.orderNo,
“零件号”:order.partNo,
“partStatus”:order.status,
“数量”:订单数量,
}),
);
}
...

快乐编码D:)

与其说你不知道什么,不如告诉我们你对要更新的订单知道什么。一旦你这样做了,就需要启动一个查询来找到那些你知道的值的节点,然后通过它们的键来更新这些节点。据我所知,我知道我可以通过使用它们的键来更新这些订单行,但是有什么方法可以得到这些键吗?就像我不知道钥匙一样“-sSDW3”。如何更新此订单行中的数据?有没有办法在flatter中找到它?要获取密钥,您需要执行一个查询。例如,请参见我在这里的回答(尽管不是针对Flutter):与其说你不知道的,不如告诉我们你对要更新的订单知道些什么。一旦你这样做了,就需要启动一个查询来找到那些你知道的值的节点,然后通过它们的键来更新这些节点。据我所知,我知道我可以通过使用它们的键来更新这些订单行,但是有什么方法可以得到这些键吗?就像我不知道钥匙一样“-sSDW3”。如何更新此订单行中的数据?有没有办法在flatter中找到它?要获取密钥,您需要执行一个查询。例如,请参见我的回答(尽管不是针对颤振):