Atualize o documento Firestore onde user_id é o mesmo que currentUser uid
Tenho a função que estou usando para criar ou atualizar o cliente.
Consigo escrever para o banco de dados com sucesso. Criei um campo chamado user_id onde salvo o uid currentUser para poder ler apenas os documentos do usuário logado.
No entanto, não consigo atualizar os documentos porque sei que provavelmente não estou fazendo referência ao documento da maneira certa.
Eu obtenho o seguinte erro:
flutter: Erro: PlatformException (Erro 5, FIRFirestoreErrorDomain, Nenhum documento para atualizar:
O que estou fazendo errado?
Aqui está minha função abaixo:
Future createOrUpdateCustomer(Customer customer, bool isUpdating) async {
FirebaseUser user = await FirebaseAuth.instance.currentUser();
String userId = user.uid;
print('Current logged in user uid is: $userId'); CollectionReference customerRef = await Firestore.instance.collection('customers'); if (isUpdating) { customer.updatedAt = Timestamp.now(); customer.userId = userId; await customerRef.document().updateData(customer.toMap()); print('updated customer with id: ${customer.id}');
print('updated customer with logged in uid: ${customer.userId}'); } else { customer.createdAt = Timestamp.now(); DocumentReference documentReference = customerRef.document(); customer.id = documentReference.documentID; customer.userId = userId; print('created customer successfully with id: ${customer.id}');
await documentReference.setData(customer.toMap(), merge: true);
addCustomer(customer);
}
notifyListeners();
}
Respostas
Você está tentando atualizar um documento inexistente. Nesta linha,
await customerRef.document().updateData(customer.toMap())
Você está criando uma referência de documento com um id gerado aleatoriamente. Você deve definir explicitamente o iddo documento que está atualizando.
Acho que você pode atualizar o documento com as condições, mas a referência deve ser a id do documento, que você vê na 2ª seção da interface do firestore.