clear method

Future<void> clear({
  1. SessionClearReason reason = SessionClearReason.unspecified,
})

Resets all settings and stops the synchronisation.

Implementation

Future<void> clear({
  SessionClearReason reason = SessionClearReason.unspecified,
}) async {
  Logs().i('Clearing the session because of $reason');
  Logs().outputEvents.clear();
  DatabaseApi? legacyDatabase;
  if (legacyDatabaseBuilder != null) {
    // If there was data in the legacy db, it will never let the SDK
    // completely log out as we migrate data from it, everytime we `init`
    legacyDatabase = await legacyDatabaseBuilder?.call(this);
  }
  try {
    await abortSync();
    await database.clear();
    await legacyDatabase?.clear();
    _backgroundSync = true;
  } catch (e, s) {
    Logs().e('Unable to clear database', e, s);
    await database.delete();
    await legacyDatabase?.delete();
    legacyDatabase = null;
    await dispose();
  }

  _id = accessToken = _syncFilterId = homeserver = _userID = _deviceID =
      _deviceName = _prevBatch = _trackedUserIds = null;
  _rooms = [];
  _eventsPendingDecryption.clear();
  await encryption?.dispose();
  _encryption = null;
  onSessionCleared.add(reason);
  onLoginStateChanged.add(LoginState.loggedOut);
}