setUserFcmToken method Null safety

  1. @protected
Future<bool> setUserFcmToken(
  1. {required User user,
  2. required String token}
)

Updates the Firebase Cloud Messaging token for user. Returns true on success and false on error.

Implementation

@protected
Future<bool> setUserFcmToken(
    {required final User user, required final String token}) async {
  // fail if this user is not linked to Firebase
  if (user.firebaseUid == null) {
    return false;
  }

  final userId = await fetchUserId(user.firebaseUid!);

  if (userId == null) {
    return false;
  }

  final gqlQueryString = '''
    mutation UpdateFcmToken {
      updateUser(
        input: {
          where: { id: "$userId" }
          data: {
            fcmToken: "$token"
            fcmTokenDateTime: "${InstantPattern.extendedIso.format(Instant.now())}"
          }
        }
      ) {
        user {
          ${UserGqlEntity.gqlQueryFragment}
        }
      }
    }
  ''';

  try {
    final queryResult = await graphQLClient
        .mutate<void>(MutationOptions(document: gql(gqlQueryString)));

    if (queryResult.hasException) {
      logger?.e(queryResult.exception.toString());
      return false;
    }
  } catch (e, stackTrace) {
    logger?.e(
        'Could not set list of interests on user instance', e, stackTrace);
    return false;
  }

  return true;
}