initialize method

Future<LocalStorage> initialize()

Implementation

Future<LocalStorage> initialize() async {
  if (isInitialized) return this;

  final baseDirPath = await baseDirFn();
  path = path_helper.join(baseDirPath, 'flutter_data.db');

  try {
    if (clear == LocalStorageClearStrategy.always) {
      await destroy();
    }

    db = sqlite3.open(path);

    db.execute('''
        PRAGMA journal_mode = WAL;
        VACUUM;

        CREATE TABLE IF NOT EXISTS _edges (
          key_ INTEGER NOT NULL,
          name_ TEXT,
          _key INTEGER NOT NULL,
          _name TEXT,
          UNIQUE (key_, name_, _key)
          UNIQUE (_key, _name, key_)
        );
        CREATE INDEX IF NOT EXISTS key_name_idx ON _edges(key_, name_);
        CREATE INDEX IF NOT EXISTS inv_key_name_idx ON _edges(_key, _name);

        CREATE TABLE IF NOT EXISTS _keys (
          key INTEGER PRIMARY KEY AUTOINCREMENT,
          type TEXT NOT NULL,
          id TEXT,
          is_int INTEGER DEFAULT 0
        );
        CREATE INDEX IF NOT EXISTS id_idx ON _keys(id);

        CREATE TABLE IF NOT EXISTS _offline_operations (
          label TEXT PRIMARY KEY,
          request TEXT NOT NULL,
          timestamp DATETIME,
          headers TEXT,
          body TEXT,
          key TEXT
        );
      ''');
  } catch (e, stackTrace) {
    print('[flutter_data] Failed to open:\n$e\n$stackTrace');
    if (clear == LocalStorageClearStrategy.whenError) {
      dispose();
      await destroy();
      await initialize();
    }
  }

  isInitialized = true;

  return this;
}