Флаттер - как я могу обновить данные до базы данных в реальном времени на firebase и найти эти ключи, если я этого не знаю - PullRequest
1 голос
/ 18 февраля 2020

enter image description here

Я новичок во флаттере, мне интересно, как я могу обновлять данные в режиме реального времени в базе данных, если я не знаю этих ключей. Например, я хочу изменить partStatus с «Выполняется» на «Доставлено» либо динамически, либо по отдельности, когда я не знаю этих ключей.

1 Ответ

0 голосов
/ 18 февраля 2020

Вы должны убедиться, что всякий раз, когда вы добавляете новый элемент в вашу базу данных и генерируется 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:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...