OfflineFirstRepository<_RepositoryModel extends OfflineFirstModel> class
abstract
A ModelRepository that interacts with a SqliteProvider first before using a Provider from a remote source.
The OfflineFirstRepository should be extended by an implementation in the end class.
The implementation can then be accessed via singleton or InheritedWidget.
For example:
class MyRepository extends OfflineFirstRepository {
const MyRepository._(
RestProvider _restProvider,
SqliteProvider _sqliteProvider,
) : super(
remoteProvider: _restProvider,
sqliteProvider: _sqliteProvider,
);
factory MyRepository() => _singleton!;
/// The singleton could be configured on the first call of `MyRepository()` or it can
/// be set by calling `configure` during app initialization.
static void configure({
required RestProvider restProvider,
required SqliteProvider sqliteProvider,
}) {
_singleton = MyRepository._(
restProvider,
sqliteProvider,
);
}
}
- Implementers
Constructors
-
OfflineFirstRepository({required Provider<
Model> remoteProvider, required SqliteProvider sqliteProvider, bool? autoHydrate, MemoryCacheProvider? memoryCacheProvider, required Set<Migration> migrations, String? loggerName})
Properties
- autoHydrate → bool
-
Refetch results in the background from remote source when any request is made.
Defaults to
false.final - hashCode → int
-
The hash code for this object.
no setterinherited
- logger → Logger
-
User for low-level debugging. The logger name can be defined in the default constructor;
it defaults to
OfflineFirstRepository.final - memoryCacheProvider → MemoryCacheProvider
-
The first data source to speed up otherwise taxing queries. Only caches specified models.
final
- migrationManager → MigrationManager
-
final
-
remoteProvider
→ Provider<
Model> -
The data source that data is pushed to and from.
final
- runtimeType → Type
-
A representation of the runtime type of the object.
no setterinherited
- sqliteProvider → SqliteProvider
-
The local data source utilized before every operation.
final
Methods
-
applyPolicyToQuery(
Query? query, {OfflineFirstDeletePolicy? delete, OfflineFirstGetPolicy? get, OfflineFirstUpsertPolicy? upsert}) → Query? -
As some remote provider's may utilize an
OfflineFirstPolicyfrom the request, this composes the policy to the query (such as in theproviderArgs). -
delete<
_Model extends _RepositoryModel> (_Model instance, {OfflineFirstDeletePolicy policy = OfflineFirstDeletePolicy.optimisticLocal, Query? query}) → Future< bool> - Remove a model from SQLite and the remoteProvider
-
exists<
_Model extends _RepositoryModel> ({Query? query}) → Future< bool> -
Check if a
_Modelis accessible locally. First checks if there's a matching query in memoryCacheProvider and then check sqliteProvider. Does not query remoteProvider. -
get<
_Model extends _RepositoryModel> ({OfflineFirstGetPolicy policy = OfflineFirstGetPolicy.awaitRemoteWhenNoneExist, Query? query, bool seedOnly = false}) → Future< List< _Model> > -
Load association from SQLite first; if the
_Modelhasn't been loaded previously, fetch it from remoteProvider and hydrate SQLite. For available query providerArgs seeremoteProvider#getSqliteProvider.get. -
getAssociation<
_Model extends _RepositoryModel> (Query query) → Future< List< _Model> ?> -
Used exclusively by the OfflineFirstAdapter. If there are no results, returns
null. -
getBatched<
_Model extends _RepositoryModel> ({int batchSize = 50, OfflineFirstGetPolicy policy = OfflineFirstGetPolicy.awaitRemoteWhenNoneExist, Query? query, bool seedOnly = false}) → Future< List< _Model> > -
Get all results in series of
batchSizes (defaults to50). Useful for large queries or remote results. -
hydrate<
_Model extends _RepositoryModel> ({bool deserializeSqlite = true, Query? query}) → Future< List< _Model> > - Fetch and store results from remoteProvider into SQLite and the memory cache.
-
initialize(
) → Future< void> -
Prepare the environment for future repository functions. It is recommended to call this
method within a
StatefulWidget'sinitStateto ensure it is only invoked once. It is not automatically invoked. -
migrate(
) → Future< void> - Update SQLite structure with only new migrations.
-
noSuchMethod(
Invocation invocation) → dynamic -
Invoked when a nonexistent method or property is accessed.
inherited
-
reset(
) → Future< void> - Destroys all local records - specifically, memoryCache and sqliteProvider's data sources.
-
storeRemoteResults<
_Model extends _RepositoryModel> (List< _Model> models) → Future<List< _Model> > - Save response results to SQLite.
-
toString(
) → String -
A string representation of this object.
inherited
-
upsert<
_Model extends _RepositoryModel> (_Model instance, {Query? query, OfflineFirstUpsertPolicy policy = OfflineFirstUpsertPolicy.optimisticLocal}) → Future< _Model> - Send a model to remoteProvider and hydrate.
Operators
-
operator ==(
Object other) → bool -
The equality operator.
inherited