brick_offline_first_with_graphql 4.0.0
brick_offline_first_with_graphql: ^4.0.0 copied to clipboard
A Brick domain that routes data fetching through local providers before a GraphQL provider.
OfflineFirstWithGraphqlRepository streamlines the GraphQL integration with an OfflineFirstRepository. A serial queue is included to track GraphQL mutations in a separate SQLite database, only removing requests when a response is returned from the host (i.e. the device has lost internet connectivity).
The OfflineFirstWithGraphql domain uses all the same configurations and annotations as OfflineFirst.
GraphqlOfflineQueueLink #
To cache outbound requests, apply GraphqlOfflineQueueLink in your GraphqlProvider:
GraphqlProvider(
link: Link.from([
GraphqlOfflineQueueLink(
GraphqlRequestSqliteCacheManager('myAppRequestQueue.sqlite'),
// Optionally specify callbacks for queue retries and errors
onReattempt: onReattempt,
onRequestException: onRequestException,
),
HttpLink(endpoint)
]),
);
⚠️ Be sure to place the queue above HttpLink or WebSocketLink or any other outbound Links.
Models #
ConnectOfflineFirstWithGraphql #
@ConnectOfflineFirstWithGraphql decorates the model that can be serialized by GraphQL and SQLite. Offline First does not have configuration at the class level and only extends configuration held by its providers:
@ConnectOfflineFirstWithGraphql(
graphqlConfig: GraphqlSerializable(),
sqliteConfig: SqliteSerializable(),
)
class MyModel extends OfflineFirstModel {}
Unsupported #
Field Types #
- Any unsupported field types from
GraphqlProviderorSqliteProvider - Future iterables of future models (i.e.
Future<List<Future<Model>>>.
Configuration #
@OfflineFirst(where:only supports extremely simple renames. Multiplewherekeys (OfflineFirst(where: {'id': 'data["id"]', 'otherVar': 'data["otherVar"]'})) or nested properties (OfflineFirst(where: {'id': 'data["subfield"]["id"]})) will be ignored. Be sure to use@Graphql(name:)to rename the generated document field.