refactor: make args required and add fetchQueryJob and fetchInfiniteQueryJob

This commit is contained in:
Kingkor Roy Tirtho
2023-10-20 10:01:36 +06:00
parent 6c65fa2017
commit 81a1fc1515
12 changed files with 52 additions and 20 deletions
@@ -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;
+36 -4
View File
@@ -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,