refactor: make args required and add fetchQueryJob and fetchInfiniteQueryJob
This commit is contained in:
@@ -11,7 +11,7 @@ typedef InfiniteQueryJobVariableKeyFn<DataType, ErrorType, PageType, ArgsType>
|
||||
String variable);
|
||||
|
||||
class InfiniteQueryJob<DataType, ErrorType, PageType, ArgsType> {
|
||||
final InfiniteQueryJobFn<DataType, PageType, ArgsType?> task;
|
||||
final InfiniteQueryJobFn<DataType, PageType, ArgsType> task;
|
||||
final String queryKey;
|
||||
|
||||
final PageType initialPage;
|
||||
|
||||
@@ -12,7 +12,7 @@ typedef MutationJobVariableKeyFn<DataType, ErrorType, VariablesType,
|
||||
Function(String variable);
|
||||
|
||||
class MutationJob<DataType, ErrorType, VariablesType, RecoveryType, ArgsType> {
|
||||
final MutationJobFn<DataType, VariablesType, ArgsType?> task;
|
||||
final MutationJobFn<DataType, VariablesType, ArgsType> task;
|
||||
final String mutationKey;
|
||||
|
||||
final RetryConfig? retryConfig;
|
||||
|
||||
@@ -9,7 +9,7 @@ typedef QueryJobVariableKeyFn<DataType, ErrorType, ArgsType>
|
||||
= QueryJob<DataType, ErrorType, ArgsType> Function(String variable);
|
||||
|
||||
class QueryJob<DataType, ErrorType, ArgsType> {
|
||||
final QueryJobFn<DataType, ArgsType?> task;
|
||||
final QueryJobFn<DataType, ArgsType> task;
|
||||
final String queryKey;
|
||||
|
||||
final DataType? initial;
|
||||
|
||||
@@ -3,6 +3,8 @@ import 'dart:async';
|
||||
import 'package:collection/collection.dart';
|
||||
import 'package:fl_query/src/collections/connectivity_adapter.dart';
|
||||
import 'package:fl_query/src/collections/default_configs.dart';
|
||||
import 'package:fl_query/src/collections/jobs/infinite_query_job.dart';
|
||||
import 'package:fl_query/src/collections/jobs/query_job.dart';
|
||||
import 'package:fl_query/src/collections/json_config.dart';
|
||||
import 'package:fl_query/src/collections/refresh_config.dart';
|
||||
import 'package:fl_query/src/collections/retry_config.dart';
|
||||
@@ -162,6 +164,20 @@ class QueryClient {
|
||||
}
|
||||
}
|
||||
|
||||
Future<DataType?> fetchQueryJob<DataType, ErrorType, ArgsType>({
|
||||
required QueryJob<DataType, ErrorType, ArgsType> job,
|
||||
required ArgsType args,
|
||||
}) {
|
||||
return fetchQuery<DataType, ErrorType>(
|
||||
job.queryKey,
|
||||
() => job.task(args),
|
||||
initial: job.initial,
|
||||
retryConfig: job.retryConfig,
|
||||
refreshConfig: job.refreshConfig,
|
||||
jsonConfig: job.jsonConfig,
|
||||
);
|
||||
}
|
||||
|
||||
/// Finds the [Query] with the given [key] and returns it
|
||||
///
|
||||
/// [exact] can be used to match the key exactly or by prefix
|
||||
@@ -220,7 +236,7 @@ class QueryClient {
|
||||
String key,
|
||||
InfiniteQueryFn<DataType, PageType> queryFn, {
|
||||
required InfiniteQueryNextPage<DataType, PageType> nextPage,
|
||||
required PageType initialParam,
|
||||
required PageType initialPage,
|
||||
RetryConfig? retryConfig,
|
||||
RefreshConfig? refreshConfig,
|
||||
JsonConfig<DataType>? jsonConfig,
|
||||
@@ -232,7 +248,7 @@ class QueryClient {
|
||||
key,
|
||||
queryFn,
|
||||
nextPage: nextPage,
|
||||
initialParam: initialParam,
|
||||
initialPage: initialPage,
|
||||
retryConfig: retryConfig ?? this.retryConfig,
|
||||
refreshConfig: refreshConfig ?? this.refreshConfig,
|
||||
jsonConfig: jsonConfig,
|
||||
@@ -254,7 +270,7 @@ class QueryClient {
|
||||
String key,
|
||||
InfiniteQueryFn<DataType, PageType> queryFn, {
|
||||
required InfiniteQueryNextPage<DataType, PageType> nextPage,
|
||||
required PageType initialParam,
|
||||
required PageType initialPage,
|
||||
RetryConfig? retryConfig,
|
||||
RefreshConfig? refreshConfig,
|
||||
JsonConfig<DataType>? jsonConfig,
|
||||
@@ -266,7 +282,7 @@ class QueryClient {
|
||||
key,
|
||||
queryFn,
|
||||
nextPage: nextPage,
|
||||
initialParam: initialParam,
|
||||
initialPage: initialPage,
|
||||
retryConfig: retryConfig,
|
||||
refreshConfig: refreshConfig,
|
||||
jsonConfig: jsonConfig,
|
||||
@@ -292,6 +308,22 @@ class QueryClient {
|
||||
}
|
||||
}
|
||||
|
||||
Future<DataType?>
|
||||
fetchInfiniteQueryJob<DataType, ErrorType, PageType, ArgsType>({
|
||||
required InfiniteQueryJob<DataType, ErrorType, PageType, ArgsType> job,
|
||||
required ArgsType args,
|
||||
}) {
|
||||
return fetchInfiniteQuery<DataType, ErrorType, PageType>(
|
||||
job.queryKey,
|
||||
(page) => job.task(page, args),
|
||||
nextPage: job.nextPage,
|
||||
initialPage: job.initialPage,
|
||||
retryConfig: job.retryConfig,
|
||||
refreshConfig: job.refreshConfig,
|
||||
jsonConfig: job.jsonConfig,
|
||||
);
|
||||
}
|
||||
|
||||
/// Finds the [InfiniteQuery] with the given [key]
|
||||
///
|
||||
/// [exact] can be used to match the key exactly or by prefix
|
||||
|
||||
@@ -122,7 +122,7 @@ class InfiniteQuery<DataType, ErrorType, PageType>
|
||||
final RefreshConfig refreshConfig;
|
||||
final JsonConfig<DataType>? jsonConfig;
|
||||
|
||||
final PageType _initialParam;
|
||||
final PageType _initialPage;
|
||||
|
||||
InfiniteQueryFn<DataType, PageType> _queryFn;
|
||||
InfiniteQueryNextPage<DataType, PageType> _nextPage;
|
||||
@@ -131,11 +131,11 @@ class InfiniteQuery<DataType, ErrorType, PageType>
|
||||
this.key,
|
||||
InfiniteQueryFn<DataType, PageType> queryFn, {
|
||||
required InfiniteQueryNextPage<DataType, PageType> nextPage,
|
||||
required PageType initialParam,
|
||||
required PageType initialPage,
|
||||
required this.retryConfig,
|
||||
required this.refreshConfig,
|
||||
this.jsonConfig,
|
||||
}) : _initialParam = initialParam,
|
||||
}) : _initialPage = initialPage,
|
||||
_dataController = StreamController.broadcast(),
|
||||
_errorController = StreamController.broadcast(),
|
||||
_box = Hive.lazyBox(QueryClient.infiniteQueryCachePrefix),
|
||||
@@ -144,7 +144,7 @@ class InfiniteQuery<DataType, ErrorType, PageType>
|
||||
super(InfiniteQueryState<DataType, ErrorType, PageType>(
|
||||
pages: {
|
||||
InfiniteQueryPage<DataType, ErrorType, PageType>(
|
||||
page: initialParam,
|
||||
page: initialPage,
|
||||
updatedAt: DateTime.now(),
|
||||
staleDuration: refreshConfig.staleDuration,
|
||||
),
|
||||
@@ -490,7 +490,7 @@ class InfiniteQuery<DataType, ErrorType, PageType>
|
||||
await _operation?.cancel();
|
||||
state = state.copyWith(pages: {
|
||||
InfiniteQueryPage<DataType, ErrorType, PageType>(
|
||||
page: _initialParam,
|
||||
page: _initialPage,
|
||||
updatedAt: DateTime.now(),
|
||||
staleDuration: refreshConfig.staleDuration,
|
||||
)
|
||||
|
||||
@@ -60,10 +60,10 @@ class InfiniteQueryBuilder<DataType, ErrorType, PageType>
|
||||
withJob<DataType, ErrorType, PageType, ArgsType>({
|
||||
required InfiniteQueryJob<DataType, ErrorType, PageType, ArgsType> job,
|
||||
required InfiniteQueryBuilderFn<DataType, ErrorType, PageType> builder,
|
||||
required ArgsType args,
|
||||
ValueChanged<PageEvent<DataType, PageType>>? onData,
|
||||
ValueChanged<PageEvent<ErrorType, PageType>>? onError,
|
||||
Key? key,
|
||||
ArgsType? args,
|
||||
}) {
|
||||
return InfiniteQueryBuilder<DataType, ErrorType, PageType>(
|
||||
job.queryKey,
|
||||
@@ -116,7 +116,7 @@ class _InfiniteQueryBuilderState<DataType, ErrorType, PageType>
|
||||
query = client.createInfiniteQuery(
|
||||
widget.queryKey,
|
||||
widget.queryFn,
|
||||
initialParam: widget.initialPage,
|
||||
initialPage: widget.initialPage,
|
||||
nextPage: widget.nextPage,
|
||||
retryConfig: widget.retryConfig,
|
||||
refreshConfig: widget.refreshConfig,
|
||||
|
||||
@@ -60,11 +60,11 @@ class MutationBuilder<DataType, ErrorType, VariablesType, RecoveryType>
|
||||
ArgsType>
|
||||
job,
|
||||
required MutationBuilderFn<DataType, ErrorType, VariablesType> builder,
|
||||
required ArgsType args,
|
||||
Key? key,
|
||||
MutationOnDataFn<DataType, RecoveryType>? onData,
|
||||
MutationOnErrorFn<ErrorType, RecoveryType>? onError,
|
||||
MutationOnMutationFn<VariablesType, RecoveryType>? onMutate,
|
||||
ArgsType? args,
|
||||
}) {
|
||||
return MutationBuilder<DataType, ErrorType, VariablesType, RecoveryType>(
|
||||
job.mutationKey,
|
||||
|
||||
@@ -53,9 +53,9 @@ class QueryBuilder<DataType, ErrorType> extends StatefulWidget {
|
||||
withJob<DataType, ErrorType, ArgsType>({
|
||||
required QueryJob<DataType, ErrorType, ArgsType> job,
|
||||
required QueryBuilderFn<DataType, ErrorType> builder,
|
||||
required ArgsType args,
|
||||
ValueChanged<DataType>? onData,
|
||||
ValueChanged<ErrorType>? onError,
|
||||
ArgsType? args,
|
||||
Key? key,
|
||||
}) {
|
||||
return QueryBuilder<DataType, ErrorType>(
|
||||
|
||||
@@ -5,9 +5,9 @@ import 'package:flutter/material.dart';
|
||||
InfiniteQuery<DataType, ErrorType, PageType>
|
||||
useInfiniteQueryJob<DataType, ErrorType, PageType, ArgsType>({
|
||||
required InfiniteQueryJob<DataType, ErrorType, PageType, ArgsType> job,
|
||||
required ArgsType args,
|
||||
ValueChanged<PageEvent<DataType, PageType>>? onData,
|
||||
ValueChanged<PageEvent<ErrorType, PageType>>? onError,
|
||||
ArgsType? args,
|
||||
List<Object?>? keys,
|
||||
}) {
|
||||
return useInfiniteQuery<DataType, ErrorType, PageType>(
|
||||
|
||||
@@ -9,7 +9,7 @@ Mutation<DataType, ErrorType, VariablesType>
|
||||
MutationOnDataFn<DataType, RecoveryType>? onData,
|
||||
MutationOnErrorFn<ErrorType, RecoveryType>? onError,
|
||||
MutationOnMutationFn<VariablesType, RecoveryType>? onMutate,
|
||||
ArgsType? args,
|
||||
required ArgsType args,
|
||||
List<Object?>? keys,
|
||||
}) {
|
||||
return useMutation(
|
||||
|
||||
@@ -6,7 +6,7 @@ Query<DataType, ErrorType> useQueryJob<DataType, ErrorType, ArgsType>({
|
||||
required QueryJob<DataType, ErrorType, ArgsType> job,
|
||||
ValueChanged<DataType>? onData,
|
||||
ValueChanged<ErrorType>? onError,
|
||||
ArgsType? args,
|
||||
required ArgsType args,
|
||||
}) {
|
||||
return useQuery<DataType, ErrorType>(
|
||||
job.queryKey,
|
||||
|
||||
@@ -26,7 +26,7 @@ InfiniteQuery<DataType, ErrorType, PageType>
|
||||
final query = client.createInfiniteQuery<DataType, ErrorType, PageType>(
|
||||
queryKey,
|
||||
queryFn,
|
||||
initialParam: initialPage,
|
||||
initialPage: initialPage,
|
||||
nextPage: nextPage,
|
||||
jsonConfig: jsonConfig,
|
||||
refreshConfig: refreshConfig,
|
||||
|
||||
Reference in New Issue
Block a user