kache_riverpod 1.0.0 copy "kache_riverpod: ^1.0.0" to clipboard
kache_riverpod: ^1.0.0 copied to clipboard

Riverpod state management integration for the Kache caching library.

kache_riverpod #

[Kache logo]

简体中文

Riverpod providers and notifiers backed by the Kache core state machine. The complete state is always KacheSnapshot<T>, preserving cached data, refresh progress, freshness, persistence state, and failures together.

Installation #

dart pub add kache_riverpod riverpod

Flutter UI that imports Riverpod widgets should declare flutter_riverpod directly instead of relying on a transitive dependency.

Quick start #

import 'dart:async';

import 'package:kache_riverpod/kache_riverpod.dart';
import 'package:riverpod/riverpod.dart';

final class User {
  const User(this.id, this.name);

  final String id;
  final String name;
}

abstract interface class UserApi {
  Future<User> fetchUser(String id);
}

final class UserProviders {
  UserProviders({required this.client, required this.api});

  final KacheClient client;
  final UserApi api;

  late final user = kacheProvider.autoDispose.family<User, String>(
    client: (_) => client,
    query: (_, userId) => KacheQuery<User>.memory(
      key: KacheKey('users', <Object?>[userId]),
      fetch: (_) => api.fetchUser(userId),
    ),
  );
}

Future<void> observeUser(UserApi api, String userId) async {
  final client = KacheClient();
  final providers = UserProviders(client: client, api: api);
  final container = ProviderContainer();
  final subscription = container.listen(
    providers.user(userId),
    (previous, next) {},
    fireImmediately: true,
  );

  try {
    await container.read(providers.user(userId).notifier).refresh();
  } finally {
    subscription.close();
    container.dispose();
    await client.close();
  }
}

Provider builders #

  • kacheProvider<T> creates a regular notifier provider.
  • kacheProvider.family<T, Arg> puts a Riverpod family argument into query construction. Put the same argument in KacheKey.
  • kacheProvider.autoDispose<T> releases its resource after Riverpod disposes the provider.
  • kacheProvider.autoDispose.family<T, Arg> combines both behaviors.

Client and query callbacks receive Ref, so they can watch normal Riverpod dependencies. A provider owns one resource handle and never closes its client.

Commands and lifecycle #

Read the notifier to call load, refresh, setData, updateData, invalidate, or remove. keepAlive() and releaseKeepAlive() control an auto-dispose provider's Riverpod keep-alive link without changing core cache GC semantics.

Provider disposal cancels the snapshot subscription and releases the resource. Late fetch completion cannot emit through a disposed notifier.

refreshInterval works while the provider keeps its resource active. In pure Dart hosts, the client owner controls background timers with pausePolling() and resumePolling().

Flutter #

Wrap the app in ProviderScope. A Consumer can watch the Kache provider and read its notifier for commands. Use KacheScope from kache_flutter when the application also needs lifecycle-aware polling and resume revalidation.

Compatibility #

Component Supported range
Dart Dart >=3.9.0 <4.0.0
Flutter Flutter >=3.35.0
Hive CE >=2.19.3 <3.0.0
Riverpod >=3.3.2 <4.0.0
Bloc >=9.2.1 <10.0.0
Provider >=6.1.5+1 <7.0.0

License #

MIT

0
likes
140
points
--
downloads

Documentation

API reference

Publisher

verified publisherfluttercandies.com

Riverpod state management integration for the Kache caching library.

Topics

#cache #riverpod #state-management #offline-first

License

MIT (license)

Dependencies

kache, riverpod

More

Packages that depend on kache_riverpod