onData property

  1. @override
Future<void> Function(T? value, User? user) get onData
override

Handles incoming data updates from Firestore with post-sync notification.

This callback is triggered when:

  • New document data is received from Firestore
  • The user's authentication state changes

The method:

  • Updates local state with new document data if user is authenticated
  • Marks the service as ready after first update
  • Notifies after sync via afterSyncNotifyUpdate
  • Clears local state if user is not authenticated

Parameters:

  • value - The new document value from Firestore
  • user - The current Firebase user

Implementation

@override
Future<void> Function(T? value, User? user) get onData {
  return (value, user) async {
    if (user != null) {
      log.debug('Updating doc for user ${user.uid}');
      if (value != null) {
        final pDoc = upsertLocalDoc(
          id: value.id,
          doc: (current, _) => value,
        );
        _isReady.completeIfNotComplete();
        await afterSyncNotifyUpdate(pDoc);
      } else {
        _doc.update(null);
        await afterSyncNotifyUpdate(value);
      }
      log.debug('Updated doc');
    } else {
      log.debug('User is null, clearing doc');
      _doc.update(null);
      await afterSyncNotifyUpdate(null);
    }
  };
}