get method Null safety

Future<List<T>?> get(
  1. {Query? query,
  2. bool alwaysHydrate = false,
  3. bool hydrateUnexisting = true,
  4. bool requireRemote = false,
  5. bool seedOnly = false}
)

Load association from SQLite first; if the _Model hasn't been loaded previously, fetch it from remoteProvider and hydrate SQLite. For available query providerArgs see remoteProvider#get SqliteProvider.get.

alwaysHydrate ensures data is fetched from the remoteProvider for each invocation. This often negatively affects performance when enabled. Defaults to false.

hydrateUnexisting retrieves from the remoteProvider if the query returns no results from SQLite. If an empty response can be expected (such as a search page), set to false. Defaults to true.

requireRemote ensures data must be updated from the remoteProvider before returning if the app is online. An empty array will be returned if the app is offline. Defaults to false.

seedOnly does not load data from SQLite after inserting records. Association queries can be expensive for large datasets, making deserialization a significant hit when the result is ignorable (e.g. eager loading). Defaults to false.

Implementation

Future<List<T>?> get({
  Query? query,
  bool alwaysHydrate = false,
  bool hydrateUnexisting = true,
  bool requireRemote = false,
  bool seedOnly = false,
}) async {
  try {
    await syncController.ready;
    final List<T> result = await repository.get<T>(
      query: query,
      alwaysHydrate: alwaysHydrate || !hydrated,
      hydrateUnexisting: hydrateUnexisting,
      requireRemote: requireRemote,
      seedOnly: seedOnly,
    );

    hydrated = true;

    return result;
  } on OfflineFirstException catch (err) {
    _lastError = err;
    state(SyncModelState.error);
    return (err.originalError as RestException).response.throwError();
  } on Exception catch (err) {
    _lastError = err;
    state(SyncModelState.error);
  }
}