pendingOfflineTypesProvider top-level property
StateNotifierProvider<DelayedStateNotifier<Set<String> > , Set<String> ?>
pendingOfflineTypesProvider
final
Every time there is an offline operation added to/ removed from the queue, this will notify clients with all pending types (could be none) such that they can implement their own retry strategy.
Implementation
final pendingOfflineTypesProvider =
StateNotifierProvider<DelayedStateNotifier<Set<String>>, Set<String>?>(
(ref) {
final _graph = ref.read(graphNotifierProvider);
Set<String> _pendingTypes() {
final node = _graph._getNode(_offlineAdapterKey)!;
// obtain types from metadata e.g. _offline:users#4:findOne
return node.keys.map((m) => m.split(':')[1].split('#')[0]).toSet();
}
final notifier = DelayedStateNotifier<Set<String>>();
// emit initial value
Timer.run(() {
if (notifier.mounted) {
notifier.state = _pendingTypes();
}
});
final _dispose = _graph.where((event) {
// filter the right events
return [DataGraphEventType.addEdge, DataGraphEventType.removeEdge]
.contains(event.type) &&
event.keys.length == 2 &&
event.keys.containsFirst(_offlineAdapterKey);
}).addListener((_) {
if (notifier.mounted) {
// recalculate all pending types
notifier.state = _pendingTypes();
}
});
notifier.onDispose = _dispose;
return notifier;
});