rpcQuery<TInput, TOutput> function

BloomQuery<TOutput> rpcQuery<TInput, TOutput>(
  1. BloomRpcClient client,
  2. BloomRpcContract<TInput, TOutput> contract,
  3. TInput input, {
  4. Map<String, dynamic>? pathParams,
  5. Map<String, dynamic>? queryParameters,
  6. Map<String, String>? headers,
  7. Duration staleTime = const Duration(minutes: 5),
  8. Duration cacheTime = const Duration(minutes: 30),
  9. bool enabled = true,
  10. TOutput? initialData,
  11. List? customKey,
  12. Duration? timeout,
})

Creates a reactive BloomQuery bound to an RPC contract and input.

Automatically derives a normalized cache key via BloomRpcContract.cacheKey and executes client.call during fetches, providing automatic caching, request deduplication, background revalidation, and reactive signal state (BloomQuery.data, BloomQuery.status, BloomQuery.error).

final userQuery = rpcQuery<void, User>(
  client,
  getUserContract,
  null,
  pathParams: {'id': 'user-123'},
  staleTime: Duration(minutes: 2),
);

BloomNode renderUser() => Live(() => switch (userQuery.status.value) {
  QueryStatus.loading => P(text: 'Loading user...'),
  QueryStatus.error => P(text: 'Error: ${userQuery.error.value}'),
  QueryStatus.success => H1(text: userQuery.data.value?.name ?? 'Anonymous'),
  QueryStatus.idle => P(text: 'Idle'),
});

See also:

Implementation

BloomQuery<TOutput> rpcQuery<TInput, TOutput>(
  BloomRpcClient client,
  BloomRpcContract<TInput, TOutput> contract,
  TInput input, {
  Map<String, dynamic>? pathParams,
  Map<String, dynamic>? queryParameters,
  Map<String, String>? headers,
  Duration staleTime = const Duration(minutes: 5),
  Duration cacheTime = const Duration(minutes: 30),
  bool enabled = true,
  TOutput? initialData,
  List<dynamic>? customKey,
  Duration? timeout,
}) {
  final key = customKey ??
      contract.cacheKey(
        input,
        pathParams: pathParams,
        queryParameters: queryParameters,
      );

  return BloomQuery<TOutput>(
    key: key,
    fetch: () => client.call(
      contract,
      input,
      pathParams: pathParams,
      queryParameters: queryParameters,
      headers: headers,
      timeout: timeout,
    ),
    staleTime: staleTime,
    cacheTime: cacheTime,
    enabled: enabled,
    initialData: initialData,
  );
}