hydrate<TModel extends RepositoryModel> method

  1. @protected
Future<List<TModel>> hydrate<TModel extends RepositoryModel>({
  1. bool deserializeSqlite = true,
  2. Query? query,
})

Fetch and store results from remoteProvider into SQLite and the memory cache.

deserializeSqlite loads data from SQLite after they've been inserted. Association queries can be expensive for large datasets, making deserialization a significant hit when the result is ignorable. Defaults to true.

Implementation

@protected
Future<List<TModel>> hydrate<TModel extends RepositoryModel>({
  bool deserializeSqlite = true,
  Query? query,
}) async {
  try {
    logger.finest('#hydrate: $TModel $query');
    final modelsFromRemote = await remoteProvider.get<TModel>(query: query, repository: this);

    if (modelsFromRemote != null) {
      final modelsIntoSqlite = await storeRemoteResults<TModel>(modelsFromRemote);
      final modelsIntoMemory = memoryCacheProvider.hydrate<TModel>(modelsIntoSqlite);

      if (!deserializeSqlite) return modelsIntoMemory;
    }

    return await sqliteProvider
        .get<TModel>(query: query, repository: this)
        .then((d) => memoryCacheProvider.hydrate<TModel>(d));
  } on ClientException catch (e) {
    logger.warning('#hydrate client failure: $e');
  } on SocketException catch (e) {
    logger.warning('#hydrate socket failure: $e');
  }

  return <TModel>[];
}