signOut method

  1. @override
Future<AuthResponse<T>> signOut([
  1. AuthProviders provider = AuthProviders.none
])
override

Implementation

@override
Future<AuthResponse<T>> signOut([
  AuthProviders provider = AuthProviders.none,
]) async {
  try {
    emit(AuthResponse.loading(provider, AuthType.logout));
    final response = await authHandler.signOut(provider);
    if (response.isSuccessful) {
      return _auth.then((data) async {
        if (data != null) {
          await update({
            AuthKeys.i.loggedIn: false,
            AuthKeys.i.loggedOutTime: Entity.generateTimeMills,
          });
          if (data.isBiometric) {
            return _update(
              id: data.id,
              updates: {
                ...data.extra ?? {},
                AuthKeys.i.loggedIn: false,
                AuthKeys.i.loggedOutTime: Entity.generateTimeMills,
              },
            ).then((value) {
              return emit(AuthResponse.unauthenticated(
                msg: msg.signOut.done,
                provider: provider,
                type: AuthType.logout,
              ));
            });
          } else {
            return _clear().then((value) {
              return emit(AuthResponse.unauthenticated(
                msg: msg.signOut.done,
                provider: provider,
                type: AuthType.logout,
              ));
            });
          }
        } else {
          return emit(AuthResponse.unauthenticated(
            msg: msg.signOut.done,
            provider: provider,
            type: AuthType.logout,
          ));
        }
      });
    } else {
      return emit(AuthResponse.failure(
        response.exception,
        provider: provider,
        type: AuthType.logout,
      ));
    }
  } catch (_) {
    return emit(AuthResponse.failure(
      msg.signOut.failure ?? _,
      provider: provider,
      type: AuthType.logout,
    ));
  }
}