login method

Future<void> login({
  1. required String hub,
  2. required String principal,
  3. required String token,
  4. required bool remember,
})

Connects to hub as principal using token. When remember is set the token is persisted for the next reload; otherwise it is kept in memory only. Updates state to reflect connecting → connected/error.

Implementation

Future<void> login({
  required String hub,
  required String principal,
  required String token,
  required bool remember,
}) async {
  state.value = const AuthSnapshot(status: AuthStatus.connecting);
  try {
    final identity = await _service.connect(
      hubUri: hub,
      principal: principal,
      token: token,
    );
    final uri = _service.hubUri!.toString();
    _settings
      ..hub = hub
      ..principal = principal
      ..rememberToken = remember;
    if (remember) {
      _settings.saveToken(uri, token);
    } else {
      _settings.clearToken(uri);
    }
    state.value = AuthSnapshot(
      status: AuthStatus.connected,
      principal: identity,
      hubUri: uri,
    );
  } on Object catch (e) {
    final err = AppError.from(e);
    state.value = AuthSnapshot(status: AuthStatus.error, error: err);
  }
}