EN VI

Adding a Future<String> to a NotifierProvider in flutter app?

2024-03-12 08:30:06
How to Adding a Future to a NotifierProvider in flutter app

I am adding a new client document to my Cloud Firestore DB. After I add the document I need to get the new document id so I can use it to link that client to a new transaction.

The way I have been trying to do this is to get the documentId right after it is created.

Here is how I am doing this right now.

This is where I create the client document:

Future<String?> clientId =
          firestoreService.saveNewClient(toMap(newClient));

The function above calls this function below. I get a Future back but I don't see any documentId in the Future when I look at in the debugger.

  Future<String?> saveNewClient(client) async {
    // Get the document ID of the new document so it can be
    // added to the new transaction document.
    try {
      /// You can generate a document id before the create operate
      String id = _db.collection("client").doc().id;

      /// pass the generated id to the doc reference and set it
      /// .toMap() -> Assuming your client isn't of type map
      await _db.collection('client').doc(id).set(client.toMap());

      /// upon success return the id
      return id;
    } catch (e) {
      print(e);

      /// or return null if the operation failed
      return null;
    }
  }

As far as I can tell the above function works correctly in that there are no error thrown but I don't see any value for the documented. The document get created in Firebase.

This is what I see in the debugger:

enter image description here

After I get the documentId back, I want to save the documentId into the clientNotifierProvider. So, right after I execute the "save" from the first code snippet above I want to execute this code:

ref.read(clientNotifierProvider.notifier).updateClientId(clientId as String);

How do I get the documentId so I can insert it into the clientNotifierProvider? Thanks

Solution:

Instead of

Future<String?> clientId= firestoreService.saveNewClient(toMap(newClient);

Await the future use this to get the unboxed future:

String? clientId = await
          firestoreService.saveNewClient(toMap(newClient));

Then update the provider:

if(clients != null){
ref.read(clientNotifierProvider.notifier).updateClientId(clientId);
}
Answer

Login


Forgot Your Password?

Create Account


Lost your password? Please enter your email address. You will receive a link to create a new password.

Reset Password

Back to login