Flutter: как переместить узел firebase - API REST vs SDK - PullRequest
0 голосов
/ 07 августа 2020

У меня есть узел в Firebase, который имеет несколько дочерних и дочерних элементов дочерних элементов. Я хочу переместить все из одного места в другое, затем я создал функцию с помощью Firebase REST API, но я хотел бы оптимизировать ее и перенести в SDK.

Функция I ' m с использованием API REST:

 Future<bool> moverLoteActual() async {
    
    //TO READ FROM SOURCE PATH
    final urlLoteActual = '$_PATH_ORIGEN.../loteActual.json?auth=${_prefs.token}';

    final resp = await http.get(urlLoteActual);
    //TODO: Probably I neew an error management here

    //TO COPY IN DESTINATION
    final urlLotesCerrados = '$PATH_DESTINO.../lotesCerrados.json?auth=${_prefs.token}';

    final resp2 = await http.post(urlLotesCerrados, body: resp.body); 
    final decodedData2 = json.decode(resp2.body);
    print(decodedData2);

    //TO DELETE THE SOURCE NODE
    final resp3 = await http.delete(urlLoteActual);
    print(json.decode(resp3.body));

    return true;

  }

Я пробовал использовать SDK, но получаю много ошибок синтаксического анализа, и, наконец, я думаю, что последовательный подход, реализованный с помощью API REST, не лучший способ.

Как я могу получить это изменение местоположения с помощью SDK?

1 Ответ

0 голосов
/ 16 августа 2020

Я нашел решение.

Во-первых, вам нужно понять, что snapshot.value - это карта , тогда вам нужно назначить ответ (соответственно) этому типу карты.

Позже вам нужно скопировать узел в новое место, затем вам нужно преобразовать предыдущую карту в новую один другого типа ( Карта для записи )

Последний шаг (удаление исходного узла) прост ... стандартная функция.

Future<bool> moverLoteActual() async {

  //TO READ FROM SOURCE PATH 
  Map<dynamic, dynamic> _map = new Map<dynamic, dynamic>();
  Query resp = db.child('$_PATH_ORIGEN.../loteActual');  

  final snapshot = await resp.once();
  _map = snapshot.value;

  //TO COPY IN DESTINATION
  db.child('$PATH_DESTINO.../lotesCerrados')
    .push().update(Map<String, dynamic>.from(_map));

  //TO DELETE THE SOURCE NODE
  db.child('$_PATH_ORIGEN.../loteActual').remove();

  return true;

}

PD. db - это ссылка на базу данных Firebase

...