Query & Mutation Builders now doesn't create a new instance
This commit is contained in:
@@ -0,0 +1,2 @@
|
|||||||
|
.vscode/dryrun.log
|
||||||
|
.vscode/configurationCache.log
|
||||||
@@ -21,7 +21,6 @@ abstract class BaseOperation<Data, StatusType> extends ChangeNotifier {
|
|||||||
int retryAttempts = 0;
|
int retryAttempts = 0;
|
||||||
DateTime updatedAt;
|
DateTime updatedAt;
|
||||||
|
|
||||||
@protected
|
|
||||||
bool fetched = false;
|
bool fetched = false;
|
||||||
|
|
||||||
/// used for keeping track of query activity. If the are no mounts &
|
/// used for keeping track of query activity. If the are no mounts &
|
||||||
|
|||||||
@@ -168,4 +168,10 @@ class Mutation<T extends Object, V> extends BaseOperation<T, MutationStatus> {
|
|||||||
bool get isLoading => status == MutationStatus.loading;
|
bool get isLoading => status == MutationStatus.loading;
|
||||||
@override
|
@override
|
||||||
bool get isSuccess => status == MutationStatus.success;
|
bool get isSuccess => status == MutationStatus.success;
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(other) {
|
||||||
|
return (other is Mutation<T, V> && other.mutationKey == mutationKey) ||
|
||||||
|
identical(other, this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ class _MutationBuilderState<T extends Object, V>
|
|||||||
void init([_]) {
|
void init([_]) {
|
||||||
queryBowl = QueryBowl.of(context);
|
queryBowl = QueryBowl.of(context);
|
||||||
mutation = queryBowl.addMutation<T, V>(
|
mutation = queryBowl.addMutation<T, V>(
|
||||||
Mutation<T, V>.fromOptions(widget.job, queryBowl: queryBowl),
|
widget.job,
|
||||||
onData: widget.onData,
|
onData: widget.onData,
|
||||||
onError: widget.onError,
|
onError: widget.onError,
|
||||||
onMutate: widget.onMutate,
|
onMutate: widget.onMutate,
|
||||||
|
|||||||
@@ -322,4 +322,10 @@ class Query<T extends Object, Outside> extends BaseOperation<T, QueryStatus> {
|
|||||||
String toString() {
|
String toString() {
|
||||||
return debugLabel;
|
return debugLabel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(other) {
|
||||||
|
return (other is Query<T, Outside> && other.queryKey == queryKey) ||
|
||||||
|
identical(other, this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
|
||||||
import 'package:connectivity_plus/connectivity_plus.dart';
|
import 'package:connectivity_plus/connectivity_plus.dart';
|
||||||
|
import 'package:fl_query/src/models/mutation_job.dart';
|
||||||
import 'package:fl_query/src/models/query_job.dart';
|
import 'package:fl_query/src/models/query_job.dart';
|
||||||
import 'package:fl_query/src/mutation.dart';
|
import 'package:fl_query/src/mutation.dart';
|
||||||
import 'package:fl_query/src/mutation_builder.dart';
|
import 'package:fl_query/src/mutation_builder.dart';
|
||||||
@@ -334,23 +335,24 @@ class QueryBowl extends InheritedWidget {
|
|||||||
/// !⚠️**Warning** only for internal library usage
|
/// !⚠️**Warning** only for internal library usage
|
||||||
@protected
|
@protected
|
||||||
Query<T, Outside> addQuery<T extends Object, Outside>(
|
Query<T, Outside> addQuery<T extends Object, Outside>(
|
||||||
Query<T, Outside> query, {
|
QueryJob<T, Outside> queryJob, {
|
||||||
|
required Outside externalData,
|
||||||
required ValueKey<String> key,
|
required ValueKey<String> key,
|
||||||
final QueryListener<T>? onData,
|
final QueryListener<T>? onData,
|
||||||
final QueryListener<dynamic>? onError,
|
final QueryListener<dynamic>? onError,
|
||||||
}) {
|
}) {
|
||||||
final prevQuery =
|
final prevQuery =
|
||||||
_queries.firstWhereOrNull((q) => q.queryKey == query.queryKey);
|
_queries.firstWhereOrNull((q) => q.queryKey == queryJob.queryKey);
|
||||||
if (prevQuery is Query<T, Outside>) {
|
if (prevQuery is Query<T, Outside>) {
|
||||||
// run the query if its still not called or if externalData has
|
// run the query if its still not called or if externalData has
|
||||||
// changed
|
// changed
|
||||||
if (prevQuery.prevUsedExternalData != null &&
|
if (prevQuery.prevUsedExternalData != null &&
|
||||||
query.externalData != null &&
|
externalData != null &&
|
||||||
!isShallowEqual(
|
!isShallowEqual(
|
||||||
prevQuery.prevUsedExternalData!,
|
prevQuery.prevUsedExternalData!,
|
||||||
query.externalData!,
|
externalData,
|
||||||
)) {
|
)) {
|
||||||
prevQuery.setExternalData(query.externalData);
|
prevQuery.setExternalData(externalData);
|
||||||
}
|
}
|
||||||
prevQuery.mount(key);
|
prevQuery.mount(key);
|
||||||
if (onData != null) prevQuery.onDataListeners.add(onData);
|
if (onData != null) prevQuery.onDataListeners.add(onData);
|
||||||
@@ -358,6 +360,11 @@ class QueryBowl extends InheritedWidget {
|
|||||||
// mounting the widget that is using the query in the prevQuery
|
// mounting the widget that is using the query in the prevQuery
|
||||||
return prevQuery;
|
return prevQuery;
|
||||||
}
|
}
|
||||||
|
final query = Query<T, Outside>.fromOptions(
|
||||||
|
queryJob,
|
||||||
|
externalData: externalData,
|
||||||
|
queryBowl: this,
|
||||||
|
);
|
||||||
if (onData != null) query.onDataListeners.add(onData);
|
if (onData != null) query.onDataListeners.add(onData);
|
||||||
if (onError != null) query.onErrorListeners.add(onError);
|
if (onError != null) query.onErrorListeners.add(onError);
|
||||||
query.updateDefaultOptions(
|
query.updateDefaultOptions(
|
||||||
@@ -375,14 +382,14 @@ class QueryBowl extends InheritedWidget {
|
|||||||
/// !⚠️**Warning** only for internal library usage
|
/// !⚠️**Warning** only for internal library usage
|
||||||
@protected
|
@protected
|
||||||
Mutation<T, V> addMutation<T extends Object, V>(
|
Mutation<T, V> addMutation<T extends Object, V>(
|
||||||
Mutation<T, V> mutation, {
|
MutationJob<T, V> mutationJob, {
|
||||||
final MutationListener<T>? onData,
|
final MutationListener<T>? onData,
|
||||||
final MutationListener<dynamic>? onError,
|
final MutationListener<dynamic>? onError,
|
||||||
final MutationListener<V>? onMutate,
|
final MutationListener<V>? onMutate,
|
||||||
required ValueKey<String> key,
|
required ValueKey<String> key,
|
||||||
}) {
|
}) {
|
||||||
final prevMutation = _mutations.firstWhereOrNull(
|
final prevMutation = _mutations.firstWhereOrNull(
|
||||||
(prevMutation) => prevMutation.mutationKey == mutation.mutationKey);
|
(prevMutation) => prevMutation.mutationKey == mutationJob.mutationKey);
|
||||||
if (prevMutation != null && prevMutation is Mutation<T, V>) {
|
if (prevMutation != null && prevMutation is Mutation<T, V>) {
|
||||||
if (onData != null) prevMutation.onDataListeners.add(onData);
|
if (onData != null) prevMutation.onDataListeners.add(onData);
|
||||||
if (onError != null) prevMutation.onErrorListeners.add(onError);
|
if (onError != null) prevMutation.onErrorListeners.add(onError);
|
||||||
@@ -390,6 +397,10 @@ class QueryBowl extends InheritedWidget {
|
|||||||
prevMutation.mount(key);
|
prevMutation.mount(key);
|
||||||
return prevMutation;
|
return prevMutation;
|
||||||
} else {
|
} else {
|
||||||
|
final mutation = Mutation<T, V>.fromOptions(
|
||||||
|
mutationJob,
|
||||||
|
queryBowl: this,
|
||||||
|
);
|
||||||
if (onData != null) mutation.onDataListeners.add(onData);
|
if (onData != null) mutation.onDataListeners.add(onData);
|
||||||
if (onError != null) mutation.onErrorListeners.add(onError);
|
if (onError != null) mutation.onErrorListeners.add(onError);
|
||||||
if (onMutate != null) mutation.onMutateListeners.add(onMutate);
|
if (onMutate != null) mutation.onMutateListeners.add(onMutate);
|
||||||
|
|||||||
@@ -46,11 +46,8 @@ class _QueryBuilderState<T extends Object, Outside>
|
|||||||
void init([QueryBowl? bowl]) async {
|
void init([QueryBowl? bowl]) async {
|
||||||
bowl ??= QueryBowl.of(context);
|
bowl ??= QueryBowl.of(context);
|
||||||
query = bowl.addQuery<T, Outside>(
|
query = bowl.addQuery<T, Outside>(
|
||||||
Query<T, Outside>.fromOptions(
|
widget.job,
|
||||||
widget.job,
|
externalData: widget.externalData,
|
||||||
externalData: widget.externalData,
|
|
||||||
queryBowl: QueryBowl.of(context),
|
|
||||||
),
|
|
||||||
key: uKey,
|
key: uKey,
|
||||||
onData: widget.onData,
|
onData: widget.onData,
|
||||||
onError: widget.onError,
|
onError: widget.onError,
|
||||||
|
|||||||
@@ -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.5/","native_build":true,"dependencies":[]}],"android":[{"name":"connectivity_plus","path":"/home/krtirtho/.pub-cache/hosted/pub.dartlang.org/connectivity_plus-2.3.5/","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.2/","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-07-08 04:37:56.711440","version":"3.0.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.5/","native_build":true,"dependencies":[]}],"android":[{"name":"connectivity_plus","path":"/home/krtirtho/.pub-cache/hosted/pub.dartlang.org/connectivity_plus-2.3.5/","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.2/","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-07-12 03:10:11.860962","version":"3.0.1"}
|
||||||
@@ -27,7 +27,7 @@ Mutation<T, V> useMutation<T extends Object, V>({
|
|||||||
|
|
||||||
final init = useCallback(() {
|
final init = useCallback(() {
|
||||||
mutation.value = queryBowl.addMutation<T, V>(
|
mutation.value = queryBowl.addMutation<T, V>(
|
||||||
mutation.value,
|
job,
|
||||||
onData: onData,
|
onData: onData,
|
||||||
onError: onError,
|
onError: onError,
|
||||||
onMutate: onMutate,
|
onMutate: onMutate,
|
||||||
@@ -55,10 +55,6 @@ Mutation<T, V> useMutation<T extends Object, V>({
|
|||||||
useEffect(() {
|
useEffect(() {
|
||||||
if (oldJob != null && oldJob.mutationKey != job.mutationKey) {
|
if (oldJob != null && oldJob.mutationKey != job.mutationKey) {
|
||||||
disposeMutation();
|
disposeMutation();
|
||||||
mutation.value = Mutation<T, V>.fromOptions(
|
|
||||||
job,
|
|
||||||
queryBowl: queryBowl,
|
|
||||||
);
|
|
||||||
init();
|
init();
|
||||||
} else {
|
} else {
|
||||||
if (oldOnData != onData && oldOnData != null) {
|
if (oldOnData != onData && oldOnData != null) {
|
||||||
|
|||||||
@@ -33,7 +33,8 @@ Query<T, Outside> useQuery<T extends Object, Outside>({
|
|||||||
|
|
||||||
final init = useCallback(() {
|
final init = useCallback(() {
|
||||||
query.value = queryBowl.addQuery<T, Outside>(
|
query.value = queryBowl.addQuery<T, Outside>(
|
||||||
query.value,
|
job,
|
||||||
|
externalData: externalData,
|
||||||
key: uKey,
|
key: uKey,
|
||||||
onData: onData,
|
onData: onData,
|
||||||
onError: onError,
|
onError: onError,
|
||||||
@@ -46,7 +47,7 @@ Query<T, Outside> useQuery<T extends Object, Outside>({
|
|||||||
hasExternalDataChanged
|
hasExternalDataChanged
|
||||||
? query.value.refetch()
|
? query.value.refetch()
|
||||||
: query.value.fetch();
|
: query.value.fetch();
|
||||||
}, [queryBowl, query.value, uKey, onData, onError, job]);
|
}, [queryBowl, query.value, uKey, onData, onError, job, externalData]);
|
||||||
|
|
||||||
final disposeQuery = useCallback(() {
|
final disposeQuery = useCallback(() {
|
||||||
query.value.unmount(uKey);
|
query.value.unmount(uKey);
|
||||||
@@ -64,11 +65,6 @@ Query<T, Outside> useQuery<T extends Object, Outside>({
|
|||||||
final hasOnDataChanged = oldOnData != onData && oldOnData != null;
|
final hasOnDataChanged = oldOnData != onData && oldOnData != null;
|
||||||
if (oldJob != null && oldJob.queryKey != job.queryKey) {
|
if (oldJob != null && oldJob.queryKey != job.queryKey) {
|
||||||
disposeQuery();
|
disposeQuery();
|
||||||
query.value = Query.fromOptions(
|
|
||||||
job,
|
|
||||||
externalData: externalData,
|
|
||||||
queryBowl: queryBowl,
|
|
||||||
);
|
|
||||||
init();
|
init();
|
||||||
} else if (oldExternalData != null &&
|
} else if (oldExternalData != null &&
|
||||||
externalData != null &&
|
externalData != null &&
|
||||||
|
|||||||
Reference in New Issue
Block a user