Firebase Realtime Database: como obter a chave exclusiva após push (). Set ()?

Nov 17 2020

No meu código flutuante, abaixo está o que estou fazendo para salvar dados no Firebase Real-TIME Database

final DatabaseReference reference = FirebaseDatabase.instance.reference().child('chat_room');

void _sendMessage({String messageText, String imageUrl}) async{
    await reference.push().set({
      'text': messageText,
      'imageUrl': imageUrl,
    });

  }

Isso gera o seguinte resultado no banco de dados

Preciso recuperar a chave exclusiva gerada assim que enviar os dados, mas como posso fazer isso?

Respostas

2 RenaudTarnec Nov 17 2020 at 15:21

O push()método retorna um DatabaseReference, então você pode fazer o seguinte:

final DatabaseReference reference = FirebaseDatabase.instance.reference().child('chat_room');

void _sendMessage({String messageText, String imageUrl}) async {
    DatabaseReference newRef = reference.push();
    String newKey = newRef.key;
    await newRef.set({
      'text': messageText,
      'imageUrl': imageUrl,
    });

  }

Observe que você obtém o novo imediatamente DatabaseReferenceao chamar o push()método: não há necessidade de esperar set()a conclusão da chamada para o método assíncrono .

1 Akif Nov 17 2020 at 15:23

Você pode obter esse id com uma abordagem diferente. Primeiro, você pode obter o próximo id e inserir o item nele. Isso parecerá assim:


final DatabaseReference reference = FirebaseDatabase.instance.reference().child('chat_room');

void _sendMessage({String messageText, String imageUrl}) async{

    String newkey = reference.push().key; // That is your unique key!

   await reference.child(newkey).set({
      'text': messageText,
      'imageUrl': imageUrl,
    });
  }