fix: refetchOnExternalDataChange isn't working #18
This commit is contained in:
@@ -58,18 +58,22 @@ class _InfiniteQueryBuilderState<T extends Object, Outside,
|
||||
|
||||
void init([T? previousData]) async {
|
||||
final bowl = QueryBowl.of(context);
|
||||
|
||||
final prevInfiniteQuery =
|
||||
bowl.getInfiniteQuery<T, Outside, PageParam>(widget.job.queryKey);
|
||||
infiniteQuery = bowl.addInfiniteQuery<T, Outside, PageParam>(
|
||||
widget.job,
|
||||
externalData: widget.externalData,
|
||||
key: uKey,
|
||||
);
|
||||
final hasExternalDataChanged = infiniteQuery!.externalData != null &&
|
||||
infiniteQuery!.prevUsedExternalData != null &&
|
||||
!isShallowEqual(
|
||||
infiniteQuery!.externalData!,
|
||||
infiniteQuery!.prevUsedExternalData!,
|
||||
);
|
||||
final hasExternalDataChanged = prevInfiniteQuery != null
|
||||
? !isShallowEqual(
|
||||
prevInfiniteQuery.externalData,
|
||||
prevInfiniteQuery.prevUsedExternalData,
|
||||
)
|
||||
: !isShallowEqual(
|
||||
infiniteQuery!.externalData,
|
||||
infiniteQuery!.prevUsedExternalData,
|
||||
);
|
||||
|
||||
if (infiniteQuery!.fetched && hasExternalDataChanged) {
|
||||
await infiniteQuery!.refetchPages();
|
||||
@@ -100,9 +104,7 @@ class _InfiniteQueryBuilderState<T extends Object, Outside,
|
||||
// } else {
|
||||
// init();
|
||||
// }
|
||||
} else if (oldWidget.externalData != null &&
|
||||
widget.externalData != null &&
|
||||
!isShallowEqual(oldWidget.externalData!, widget.externalData!)) {
|
||||
} else if (!isShallowEqual(oldWidget.externalData, widget.externalData)) {
|
||||
if (widget.job.refetchOnExternalDataChange ??
|
||||
queryBowl.refetchOnExternalDataChange) {
|
||||
QueryBowl.of(context).addInfiniteQuery(
|
||||
|
||||
@@ -383,12 +383,10 @@ class QueryBowl {
|
||||
if (prevQuery != null) {
|
||||
// run the query if its still not called or if externalData has
|
||||
// changed
|
||||
if (prevQuery.prevUsedExternalData != null &&
|
||||
externalData != null &&
|
||||
!isShallowEqual(
|
||||
prevQuery.prevUsedExternalData!,
|
||||
externalData,
|
||||
)) {
|
||||
if (!isShallowEqual(
|
||||
prevQuery.prevUsedExternalData,
|
||||
externalData,
|
||||
)) {
|
||||
prevQuery.setExternalData(externalData);
|
||||
}
|
||||
prevQuery.mount(key);
|
||||
@@ -425,12 +423,10 @@ class QueryBowl {
|
||||
if (prevInfiniteQuery != null) {
|
||||
// run the query if its still not called or if externalData has
|
||||
// changed
|
||||
if (prevInfiniteQuery.prevUsedExternalData != null &&
|
||||
externalData != null &&
|
||||
!isShallowEqual(
|
||||
prevInfiniteQuery.prevUsedExternalData!,
|
||||
externalData,
|
||||
)) {
|
||||
if (!isShallowEqual(
|
||||
prevInfiniteQuery.prevUsedExternalData,
|
||||
externalData,
|
||||
)) {
|
||||
prevInfiniteQuery.setExternalData(externalData);
|
||||
}
|
||||
prevInfiniteQuery.mount(key);
|
||||
@@ -499,12 +495,10 @@ class QueryBowl {
|
||||
if (prevQuery != null) {
|
||||
// run the query if its still not called or if externalData has
|
||||
// changed
|
||||
final hasExternalDataChanged = prevQuery.prevUsedExternalData != null &&
|
||||
externalData != null &&
|
||||
!isShallowEqual(
|
||||
prevQuery.prevUsedExternalData!,
|
||||
externalData,
|
||||
);
|
||||
final hasExternalDataChanged = !isShallowEqual(
|
||||
prevQuery.prevUsedExternalData,
|
||||
externalData,
|
||||
);
|
||||
prevQuery.mount(key);
|
||||
if (onData != null) prevQuery.addDataListener(onData);
|
||||
if (onError != null) prevQuery.addErrorListener(onError);
|
||||
|
||||
@@ -58,6 +58,7 @@ class _QueryBuilderState<T extends Object, Outside>
|
||||
|
||||
void init([T? previousData]) async {
|
||||
final bowl = QueryBowl.of(context);
|
||||
final prevQuery = bowl.getQuery<T, Outside>(widget.job.queryKey);
|
||||
query = bowl.addQuery<T, Outside>(
|
||||
widget.job,
|
||||
externalData: widget.externalData,
|
||||
@@ -66,13 +67,15 @@ class _QueryBuilderState<T extends Object, Outside>
|
||||
onData: widget.onData,
|
||||
onError: widget.onError,
|
||||
);
|
||||
|
||||
final hasExternalDataChanged = query!.externalData != null &&
|
||||
query!.prevUsedExternalData != null &&
|
||||
!isShallowEqual(
|
||||
query!.externalData!,
|
||||
query!.prevUsedExternalData!,
|
||||
);
|
||||
final hasExternalDataChanged = prevQuery != null
|
||||
? !isShallowEqual(
|
||||
prevQuery.externalData,
|
||||
prevQuery.prevUsedExternalData,
|
||||
)
|
||||
: !isShallowEqual(
|
||||
query!.externalData,
|
||||
query!.prevUsedExternalData,
|
||||
);
|
||||
|
||||
if (query!.fetched && hasExternalDataChanged) {
|
||||
await query!.refetch();
|
||||
@@ -103,9 +106,7 @@ class _QueryBuilderState<T extends Object, Outside>
|
||||
} else {
|
||||
init();
|
||||
}
|
||||
} else if (oldWidget.externalData != null &&
|
||||
widget.externalData != null &&
|
||||
!isShallowEqual(oldWidget.externalData!, widget.externalData!)) {
|
||||
} else if (!isShallowEqual(oldWidget.externalData, widget.externalData)) {
|
||||
if (widget.job.refetchOnExternalDataChange ??
|
||||
bowl.refetchOnExternalDataChange) {
|
||||
bowl.fetchQuery(
|
||||
|
||||
@@ -31,7 +31,10 @@ bool isShallowEqualMap(Map list1, Map list2) {
|
||||
});
|
||||
}
|
||||
|
||||
bool isShallowEqual(Object obj1, Object obj2) {
|
||||
bool isShallowEqual(dynamic obj1, dynamic obj2) {
|
||||
if (obj1 == null && obj2 == null) return true;
|
||||
if ((obj1 == null && obj2 != null) || (obj2 == null && obj1 != null))
|
||||
return false;
|
||||
if (obj1 is List && obj2 is List) {
|
||||
return isShallowEqualList(obj1, obj2);
|
||||
} else if (obj1 is Set && obj2 is Set) {
|
||||
|
||||
Reference in New Issue
Block a user