fix(fl_query_hooks): unneeded empty instances of query/mutation
fix(infinite_query): getNextPageParam & getPreviousPageParam non-null return required
This commit is contained in:
@@ -1,4 +1,3 @@
|
|||||||
import 'package:fl_query/src/query_bowl.dart';
|
|
||||||
import 'package:flutter/widgets.dart';
|
import 'package:flutter/widgets.dart';
|
||||||
|
|
||||||
abstract class BaseOperation<Data, Error> extends ChangeNotifier {
|
abstract class BaseOperation<Data, Error> extends ChangeNotifier {
|
||||||
@@ -27,13 +26,10 @@ abstract class BaseOperation<Data, Error> extends ChangeNotifier {
|
|||||||
/// storage/cache
|
/// storage/cache
|
||||||
Set<ValueKey<String>> _mounts = {};
|
Set<ValueKey<String>> _mounts = {};
|
||||||
|
|
||||||
final QueryBowl queryBowl;
|
|
||||||
|
|
||||||
BaseOperation({
|
BaseOperation({
|
||||||
required this.cacheTime,
|
required this.cacheTime,
|
||||||
required this.retries,
|
required this.retries,
|
||||||
required this.retryDelay,
|
required this.retryDelay,
|
||||||
required this.queryBowl,
|
|
||||||
this.data,
|
this.data,
|
||||||
}) : updatedAt = DateTime.now();
|
}) : updatedAt = DateTime.now();
|
||||||
|
|
||||||
|
|||||||
@@ -52,7 +52,6 @@ abstract class BaseQuery<T extends Object, Outside, Error>
|
|||||||
required Outside externalData,
|
required Outside externalData,
|
||||||
required super.retries,
|
required super.retries,
|
||||||
required super.retryDelay,
|
required super.retryDelay,
|
||||||
required super.queryBowl,
|
|
||||||
required this.status,
|
required this.status,
|
||||||
this.refetchOnMount,
|
this.refetchOnMount,
|
||||||
this.refetchOnReconnect,
|
this.refetchOnReconnect,
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ typedef InfiniteQueryListeners<T, PageParam extends Object> = FutureOr<void>
|
|||||||
|
|
||||||
typedef InfiniteQueryPageParamFunction<T extends Object,
|
typedef InfiniteQueryPageParamFunction<T extends Object,
|
||||||
PageParam extends Object>
|
PageParam extends Object>
|
||||||
= FutureOr<PageParam> Function(T lastPage, PageParam lastParam);
|
= FutureOr<PageParam?> Function(T lastPage, PageParam lastParam);
|
||||||
|
|
||||||
class InfiniteQuery<T extends Object, Outside, PageParam extends Object>
|
class InfiniteQuery<T extends Object, Outside, PageParam extends Object>
|
||||||
extends BaseQuery<Map<PageParam, T?>, Outside, Map<PageParam, dynamic>> {
|
extends BaseQuery<Map<PageParam, T?>, Outside, Map<PageParam, dynamic>> {
|
||||||
@@ -54,7 +54,6 @@ class InfiniteQuery<T extends Object, Outside, PageParam extends Object>
|
|||||||
required super.externalData,
|
required super.externalData,
|
||||||
required super.retries,
|
required super.retries,
|
||||||
required super.retryDelay,
|
required super.retryDelay,
|
||||||
required super.queryBowl,
|
|
||||||
required super.status,
|
required super.status,
|
||||||
required PageParam initialParam,
|
required PageParam initialParam,
|
||||||
super.refetchOnMount,
|
super.refetchOnMount,
|
||||||
@@ -73,7 +72,6 @@ class InfiniteQuery<T extends Object, Outside, PageParam extends Object>
|
|||||||
|
|
||||||
InfiniteQuery.fromOptions(
|
InfiniteQuery.fromOptions(
|
||||||
InfiniteQueryJob<T, Outside, PageParam> options, {
|
InfiniteQueryJob<T, Outside, PageParam> options, {
|
||||||
required super.queryBowl,
|
|
||||||
required Outside externalData,
|
required Outside externalData,
|
||||||
InfiniteQueryListeners<T, PageParam>? onData,
|
InfiniteQueryListeners<T, PageParam>? onData,
|
||||||
InfiniteQueryListeners<dynamic, PageParam>? onError,
|
InfiniteQueryListeners<dynamic, PageParam>? onError,
|
||||||
|
|||||||
@@ -50,7 +50,6 @@ class Mutation<T extends Object, V> extends BaseOperation<T, dynamic>
|
|||||||
required this.task,
|
required this.task,
|
||||||
required super.retries,
|
required super.retries,
|
||||||
required super.retryDelay,
|
required super.retryDelay,
|
||||||
required super.queryBowl,
|
|
||||||
required Duration cacheTime,
|
required Duration cacheTime,
|
||||||
MutationListener<T, V>? onData,
|
MutationListener<T, V>? onData,
|
||||||
MutationListener<dynamic, V>? onError,
|
MutationListener<dynamic, V>? onError,
|
||||||
@@ -67,7 +66,6 @@ class Mutation<T extends Object, V> extends BaseOperation<T, dynamic>
|
|||||||
MutationListener<T, V>? onData,
|
MutationListener<T, V>? onData,
|
||||||
MutationListener<dynamic, V>? onError,
|
MutationListener<dynamic, V>? onError,
|
||||||
MutationListenerReturnable<V, dynamic>? onMutate,
|
MutationListenerReturnable<V, dynamic>? onMutate,
|
||||||
required super.queryBowl,
|
|
||||||
}) : mutationKey = options.mutationKey,
|
}) : mutationKey = options.mutationKey,
|
||||||
task = options.task,
|
task = options.task,
|
||||||
status = MutationStatus.idle,
|
status = MutationStatus.idle,
|
||||||
|
|||||||
@@ -50,7 +50,6 @@ class Query<T extends Object, Outside> extends BaseQuery<T, Outside, dynamic> {
|
|||||||
required super.externalData,
|
required super.externalData,
|
||||||
required super.retries,
|
required super.retries,
|
||||||
required super.retryDelay,
|
required super.retryDelay,
|
||||||
required super.queryBowl,
|
|
||||||
required super.status,
|
required super.status,
|
||||||
super.refetchOnMount,
|
super.refetchOnMount,
|
||||||
super.refetchOnReconnect,
|
super.refetchOnReconnect,
|
||||||
@@ -65,7 +64,6 @@ class Query<T extends Object, Outside> extends BaseQuery<T, Outside, dynamic> {
|
|||||||
|
|
||||||
Query.fromOptions(
|
Query.fromOptions(
|
||||||
QueryJob<T, Outside> options, {
|
QueryJob<T, Outside> options, {
|
||||||
required super.queryBowl,
|
|
||||||
required Outside externalData,
|
required Outside externalData,
|
||||||
T? previousData,
|
T? previousData,
|
||||||
QueryListener<T>? onData,
|
QueryListener<T>? onData,
|
||||||
|
|||||||
@@ -264,7 +264,6 @@ class QueryBowl {
|
|||||||
options,
|
options,
|
||||||
externalData: externalData,
|
externalData: externalData,
|
||||||
previousData: previousData,
|
previousData: previousData,
|
||||||
queryBowl: this,
|
|
||||||
);
|
);
|
||||||
query.updateDefaultOptions(
|
query.updateDefaultOptions(
|
||||||
cacheTime: cache.cacheTime,
|
cacheTime: cache.cacheTime,
|
||||||
@@ -284,7 +283,6 @@ class QueryBowl {
|
|||||||
final infiniteQuery = InfiniteQuery<T, Outside, PageParam>.fromOptions(
|
final infiniteQuery = InfiniteQuery<T, Outside, PageParam>.fromOptions(
|
||||||
options,
|
options,
|
||||||
externalData: externalData,
|
externalData: externalData,
|
||||||
queryBowl: this,
|
|
||||||
);
|
);
|
||||||
infiniteQuery.updateDefaultOptions(
|
infiniteQuery.updateDefaultOptions(
|
||||||
cacheTime: cache.cacheTime,
|
cacheTime: cache.cacheTime,
|
||||||
@@ -400,7 +398,6 @@ class QueryBowl {
|
|||||||
} else {
|
} else {
|
||||||
final mutation = Mutation<T, V>.fromOptions(
|
final mutation = Mutation<T, V>.fromOptions(
|
||||||
mutationJob,
|
mutationJob,
|
||||||
queryBowl: this,
|
|
||||||
);
|
);
|
||||||
if (onData != null) mutation.addDataListener(onData);
|
if (onData != null) mutation.addDataListener(onData);
|
||||||
if (onError != null) mutation.addErrorListener(onError);
|
if (onError != null) mutation.addErrorListener(onError);
|
||||||
|
|||||||
@@ -24,10 +24,8 @@ void main() {
|
|||||||
// for testing query without external data
|
// for testing query without external data
|
||||||
late Query query;
|
late Query query;
|
||||||
late MockQueryJobVoidObject queryJob;
|
late MockQueryJobVoidObject queryJob;
|
||||||
late MockQueryBowl queryBowl;
|
|
||||||
setUp(() {
|
setUp(() {
|
||||||
queryJob = MockQueryJobVoidObject();
|
queryJob = MockQueryJobVoidObject();
|
||||||
queryBowl = MockQueryBowl();
|
|
||||||
when(queryJob.queryKey).thenReturn("test");
|
when(queryJob.queryKey).thenReturn("test");
|
||||||
when(queryJob.task).thenAnswer(
|
when(queryJob.task).thenAnswer(
|
||||||
(_) =>
|
(_) =>
|
||||||
@@ -36,7 +34,6 @@ void main() {
|
|||||||
query = Query.fromOptions(
|
query = Query.fromOptions(
|
||||||
queryJob,
|
queryJob,
|
||||||
externalData: null,
|
externalData: null,
|
||||||
queryBowl: queryBowl,
|
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -86,7 +83,6 @@ void main() {
|
|||||||
query = Query.fromOptions(
|
query = Query.fromOptions(
|
||||||
queryJob,
|
queryJob,
|
||||||
externalData: null,
|
externalData: null,
|
||||||
queryBowl: queryBowl,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
await Future.delayed(Duration(milliseconds: 100));
|
await Future.delayed(Duration(milliseconds: 100));
|
||||||
@@ -119,7 +115,6 @@ void main() {
|
|||||||
query = Query.fromOptions(
|
query = Query.fromOptions(
|
||||||
queryJob,
|
queryJob,
|
||||||
externalData: null,
|
externalData: null,
|
||||||
queryBowl: queryBowl,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
await query.fetch();
|
await query.fetch();
|
||||||
@@ -150,7 +145,6 @@ void main() {
|
|||||||
query = Query.fromOptions(
|
query = Query.fromOptions(
|
||||||
queryJob,
|
queryJob,
|
||||||
externalData: null,
|
externalData: null,
|
||||||
queryBowl: queryBowl,
|
|
||||||
);
|
);
|
||||||
int count = 0;
|
int count = 0;
|
||||||
query.addErrorListener((_) {
|
query.addErrorListener((_) {
|
||||||
@@ -165,7 +159,6 @@ void main() {
|
|||||||
query = Query.fromOptions(
|
query = Query.fromOptions(
|
||||||
queryJob,
|
queryJob,
|
||||||
externalData: null,
|
externalData: null,
|
||||||
queryBowl: queryBowl,
|
|
||||||
);
|
);
|
||||||
expect(query.isStale, isFalse);
|
expect(query.isStale, isFalse);
|
||||||
await Future.delayed(Duration(milliseconds: 300));
|
await Future.delayed(Duration(milliseconds: 300));
|
||||||
@@ -190,7 +183,6 @@ void main() {
|
|||||||
query = Query.fromOptions(
|
query = Query.fromOptions(
|
||||||
queryJob,
|
queryJob,
|
||||||
externalData: null,
|
externalData: null,
|
||||||
queryBowl: queryBowl,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
final data = await query.fetch();
|
final data = await query.fetch();
|
||||||
@@ -210,7 +202,6 @@ void main() {
|
|||||||
query = Query.fromOptions(
|
query = Query.fromOptions(
|
||||||
queryJob,
|
queryJob,
|
||||||
externalData: null,
|
externalData: null,
|
||||||
queryBowl: queryBowl,
|
|
||||||
);
|
);
|
||||||
final data = await query.fetch();
|
final data = await query.fetch();
|
||||||
query.invalidate();
|
query.invalidate();
|
||||||
@@ -237,7 +228,6 @@ void main() {
|
|||||||
query = Query.fromOptions(
|
query = Query.fromOptions(
|
||||||
queryJob,
|
queryJob,
|
||||||
externalData: null,
|
externalData: null,
|
||||||
queryBowl: queryBowl,
|
|
||||||
);
|
);
|
||||||
final data = await query.fetch();
|
final data = await query.fetch();
|
||||||
query.invalidate();
|
query.invalidate();
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"connectivity_plus","path":"/home/krtirtho/.pub-cache/hosted/pub.dartlang.org/connectivity_plus-2.3.6/","native_build":true,"dependencies":[]}],"android":[{"name":"connectivity_plus","path":"/home/krtirtho/.pub-cache/hosted/pub.dartlang.org/connectivity_plus-2.3.6/","native_build":true,"dependencies":[]}],"macos":[{"name":"connectivity_plus_macos","path":"/home/krtirtho/.pub-cache/hosted/pub.dartlang.org/connectivity_plus_macos-1.2.4/","native_build":true,"dependencies":[]}],"linux":[{"name":"connectivity_plus_linux","path":"/home/krtirtho/.pub-cache/hosted/pub.dartlang.org/connectivity_plus_linux-1.3.1/","native_build":false,"dependencies":[]}],"windows":[{"name":"connectivity_plus_windows","path":"/home/krtirtho/.pub-cache/hosted/pub.dartlang.org/connectivity_plus_windows-1.2.2/","native_build":true,"dependencies":[]}],"web":[{"name":"connectivity_plus_web","path":"/home/krtirtho/.pub-cache/hosted/pub.dartlang.org/connectivity_plus_web-1.2.3/","dependencies":[]}]},"dependencyGraph":[{"name":"connectivity_plus","dependencies":["connectivity_plus_linux","connectivity_plus_macos","connectivity_plus_web","connectivity_plus_windows"]},{"name":"connectivity_plus_linux","dependencies":[]},{"name":"connectivity_plus_macos","dependencies":[]},{"name":"connectivity_plus_web","dependencies":[]},{"name":"connectivity_plus_windows","dependencies":[]}],"date_created":"2022-09-22 21:28:31.234632","version":"3.3.0"}
|
{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"connectivity_plus","path":"/home/krtirtho/.pub-cache/hosted/pub.dartlang.org/connectivity_plus-2.3.6/","native_build":true,"dependencies":[]}],"android":[{"name":"connectivity_plus","path":"/home/krtirtho/.pub-cache/hosted/pub.dartlang.org/connectivity_plus-2.3.6/","native_build":true,"dependencies":[]}],"macos":[{"name":"connectivity_plus_macos","path":"/home/krtirtho/.pub-cache/hosted/pub.dartlang.org/connectivity_plus_macos-1.2.4/","native_build":true,"dependencies":[]}],"linux":[{"name":"connectivity_plus_linux","path":"/home/krtirtho/.pub-cache/hosted/pub.dartlang.org/connectivity_plus_linux-1.3.1/","native_build":false,"dependencies":[]}],"windows":[{"name":"connectivity_plus_windows","path":"/home/krtirtho/.pub-cache/hosted/pub.dartlang.org/connectivity_plus_windows-1.2.2/","native_build":true,"dependencies":[]}],"web":[{"name":"connectivity_plus_web","path":"/home/krtirtho/.pub-cache/hosted/pub.dartlang.org/connectivity_plus_web-1.2.3/","dependencies":[]}]},"dependencyGraph":[{"name":"connectivity_plus","dependencies":["connectivity_plus_linux","connectivity_plus_macos","connectivity_plus_web","connectivity_plus_windows"]},{"name":"connectivity_plus_linux","dependencies":[]},{"name":"connectivity_plus_macos","dependencies":[]},{"name":"connectivity_plus_web","dependencies":[]},{"name":"connectivity_plus_windows","dependencies":[]}],"date_created":"2022-09-26 14:46:50.585900","version":"3.3.0"}
|
||||||
@@ -24,10 +24,15 @@ InfiniteQuery<T, Outside, PageParam>
|
|||||||
final QueryBowl queryBowl = QueryBowl.of(context);
|
final QueryBowl queryBowl = QueryBowl.of(context);
|
||||||
final ValueKey<String> uKey = useMemoized(() => ValueKey(uuid.v4()), []);
|
final ValueKey<String> uKey = useMemoized(() => ValueKey(uuid.v4()), []);
|
||||||
final infiniteQuery = useRef(
|
final infiniteQuery = useRef(
|
||||||
InfiniteQuery.fromOptions(
|
useMemoized(
|
||||||
job,
|
() => queryBowl.addInfiniteQuery<T, Outside, PageParam>(
|
||||||
externalData: externalData,
|
job,
|
||||||
queryBowl: queryBowl,
|
externalData: externalData,
|
||||||
|
key: uKey,
|
||||||
|
onData: onData,
|
||||||
|
onError: onError,
|
||||||
|
),
|
||||||
|
[],
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -129,5 +134,5 @@ InfiniteQuery<T, Outside, PageParam>
|
|||||||
return null;
|
return null;
|
||||||
});
|
});
|
||||||
|
|
||||||
return queryBowl.getInfiniteQuery(job.queryKey) ?? infiniteQuery.value;
|
return infiniteQuery.value;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,8 +24,18 @@ Mutation<T, V> useMutation<T extends Object, V>({
|
|||||||
final update = useForceUpdate();
|
final update = useForceUpdate();
|
||||||
final QueryBowl queryBowl = QueryBowl.of(context);
|
final QueryBowl queryBowl = QueryBowl.of(context);
|
||||||
final ValueKey<String> uKey = useMemoized(() => ValueKey(uuid.v4()), []);
|
final ValueKey<String> uKey = useMemoized(() => ValueKey(uuid.v4()), []);
|
||||||
final mutation =
|
final mutation = useRef(
|
||||||
useRef(Mutation<T, V>.fromOptions(job, queryBowl: queryBowl));
|
useMemoized(
|
||||||
|
() => queryBowl.addMutation<T, V>(
|
||||||
|
job,
|
||||||
|
onData: onData,
|
||||||
|
onError: onError,
|
||||||
|
onMutate: onMutate,
|
||||||
|
key: uKey,
|
||||||
|
),
|
||||||
|
[],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
final init = useCallback(() {
|
final init = useCallback(() {
|
||||||
mutation.value = queryBowl.addMutation<T, V>(
|
mutation.value = queryBowl.addMutation<T, V>(
|
||||||
@@ -85,5 +95,5 @@ Mutation<T, V> useMutation<T extends Object, V>({
|
|||||||
return null;
|
return null;
|
||||||
});
|
});
|
||||||
|
|
||||||
return queryBowl.getMutation(job.mutationKey) ?? mutation.value;
|
return mutation.value;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,10 +23,15 @@ Query<T, Outside> useQuery<T extends Object, Outside>({
|
|||||||
final QueryBowl queryBowl = QueryBowl.of(context);
|
final QueryBowl queryBowl = QueryBowl.of(context);
|
||||||
final ValueKey<String> uKey = useMemoized(() => ValueKey(uuid.v4()), []);
|
final ValueKey<String> uKey = useMemoized(() => ValueKey(uuid.v4()), []);
|
||||||
final query = useRef(
|
final query = useRef(
|
||||||
Query.fromOptions(
|
useMemoized(
|
||||||
job,
|
() => queryBowl.addQuery<T, Outside>(
|
||||||
externalData: externalData,
|
job,
|
||||||
queryBowl: queryBowl,
|
externalData: externalData,
|
||||||
|
key: uKey,
|
||||||
|
onData: onData,
|
||||||
|
onError: onError,
|
||||||
|
),
|
||||||
|
[],
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -125,5 +130,5 @@ Query<T, Outside> useQuery<T extends Object, Outside>({
|
|||||||
return null;
|
return null;
|
||||||
});
|
});
|
||||||
|
|
||||||
return queryBowl.getQuery(job.queryKey) ?? query.value;
|
return query.value;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user