fix: refetchOnExternalDataChange isn't working #18

This commit is contained in:
Kingkor Roy Tirtho
2022-12-14 14:06:40 +06:00
parent 6676f508ae
commit a7c03f891f
25 changed files with 183 additions and 172 deletions
@@ -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(
+12 -18
View File
@@ -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);
+11 -10
View File
@@ -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(
+4 -1
View File
@@ -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) {