2
respostas

Erro na exclusão de um documento no firebase.

Olá, estou enfrentando um problema, criei um projeto Flutter integrado ao Firebase que segue a lógica parecida com o projeto do curso, porém ao deletar um item do meu app da minha lista de items o mesmo não é excluído. Fiz algumas verificações e descobri que o id na hora da exclusão atribuído ao item não corresponde com o id criado lá no firebase e por isso a exclusão não ocorre, tendo isso em vista não consigo visualizar uma solução para o meu problema. Quem puder me ajudar desde já agradeço!

2 respostas

Olá, Paulo! Entendo que você está tendo problemas com a exclusão de documentos no Firebase. Parece que o problema está na correspondência entre o ID do item no seu aplicativo Flutter e o ID do documento no Firebase.

Uma possível solução seria garantir que você está usando o mesmo ID para o item no seu aplicativo e para o documento no Firebase. Quando você cria um novo documento no Firebase, você pode especificar um ID para ele ou deixar o Firebase gerar um para você. Se você está deixando o Firebase gerar o ID, você precisa garantir que está salvando esse ID e usando-o quando quiser excluir o documento.

Por exemplo, quando você cria um novo documento, você pode fazer algo assim:

DocumentReference ref = await Firestore.instance.collection('items').add({
  // seus dados aqui
});
String newDocId = ref.documentID;

Aqui, newDocId é o ID do novo documento. Você precisa salvar esse ID em algum lugar (por exemplo, como um campo no seu item) para que possa usá-lo mais tarde ao excluir o documento.

Quando você quiser excluir o documento, você pode fazer algo assim:

Firestore.instance.collection('items').document(item.docId).delete();

Aqui, item.docId é o ID do documento que você salvou anteriormente.

Espero que isso resolva o seu problema. Lembre-se de sempre verificar se os IDs estão correspondendo corretamente. Espero ter ajudado e bons estudos!

Fiz dessa forma, segue como está no meu código: Consumer( builder: (BuildContext context, Items list, Widget? widget) { return TextButton( child: const Text("Salvar"), onPressed: () async { int quantidade = 1; try { quantidade = int.parse(quantidadeInput.text); } catch (e) { ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text('Erro ao converter quantidade: $e'), ), ); return; }

                String imagePath = arquivo.path.isNotEmpty
                    ? arquivo.path
                    : 'assets/images/massa_emboço.jpg';

                Item newItem = Item(
                  nome: nomeInput.text,
                  type: dropdownValue,
                  imagePath: imagePath,
                  quantidade: quantidade,
                  createdBy: currentUser.uid,
                );

                await firestore.collection('items').add(newItem.toMap());

                ScaffoldMessenger.of(context).showSnackBar(
                  const SnackBar(
                    content: Text('Item criado com sucesso!'),
                  ),
                );
                Navigator.pop(dialogContext);
                onSaved(); 
              },
            );
          },
        ),      
A remoção está da seguinte forma: void removeItem(BuildContext context, Item item) async {
try {
  String itemId = item.id;
  FirebaseFirestore firestore = FirebaseFirestore.instance;
  DocumentReference<Map<String, dynamic>> itemRef = firestore.collection('items').doc(item.id);



  print('ID do Item a ser removido: $itemId');

  await itemRef.delete();

  Provider.of<Items>(context, listen: false).remove(item);

  ScaffoldMessenger.of(context).showSnackBar(
    const SnackBar(content: Text('Item removido com sucesso!')),
  );
} catch (e) {
  ScaffoldMessenger.of(context).showSnackBar(
    SnackBar(
      content: Text('Erro ao remover item: $e'),
    ),
  );
}

} Fiz um verificação para os ids e o resultado deu o seguinte, no meu firebase o id do item é: id "1c246275-ae7c-4283-a8ca-0a323d277414" Já na minha verificação no terminal ele imprime o seguinte id: I/flutter (18652): ID do Item a ser removido: fec075b3-133d-49a6-87ca-209238525794 Não consigo identificar porque os ids estão diferentes e por consequência a exclusão não está ocorrendo