From b512a5da06e9c75377e45029822720c9323bb6e5 Mon Sep 17 00:00:00 2001 From: Kingkor Roy Tirtho Date: Fri, 6 Oct 2023 10:23:01 +0600 Subject: [PATCH] fix(mutation): isMutating not working --- .../example/lib/pages/mutation/mutation.dart | 8 ++-- packages/fl_query/example/pubspec.lock | 36 ++++++++++------- packages/fl_query/lib/src/core/mutation.dart | 15 ++++--- packages/fl_query_hooks/example/pubspec.lock | 40 +++++++++++-------- packages/fl_query_hooks/example/pubspec.yaml | 2 +- 5 files changed, 61 insertions(+), 40 deletions(-) diff --git a/packages/fl_query/example/lib/pages/mutation/mutation.dart b/packages/fl_query/example/lib/pages/mutation/mutation.dart index 4e134b0..6133a9f 100644 --- a/packages/fl_query/example/lib/pages/mutation/mutation.dart +++ b/packages/fl_query/example/lib/pages/mutation/mutation.dart @@ -40,7 +40,7 @@ class _MutationPageState extends State { 'sign-up', (variables) { return Future.delayed( - const Duration(seconds: 1), + const Duration(seconds: 5), () => { 'name': variables['name'], 'email': variables['email'], @@ -49,12 +49,12 @@ class _MutationPageState extends State { ); }, onMutate: (variables) { - print('onMutate: $variables'); + debugPrint('onMutate: $variables'); return "Recover ME"; }, onData: (data, recoveryData) { - print('onData: $data'); - print('recoveryData: $recoveryData'); + debugPrint('onData: $data'); + debugPrint('recoveryData: $recoveryData'); }, refreshQueries: const ['hello'], builder: (context, mutation) { diff --git a/packages/fl_query/example/pubspec.lock b/packages/fl_query/example/pubspec.lock index 68c823b..1fcd6d9 100644 --- a/packages/fl_query/example/pubspec.lock +++ b/packages/fl_query/example/pubspec.lock @@ -45,10 +45,10 @@ packages: dependency: transitive description: name: collection - sha256: "4a07be6cb69c84d677a6c3096fcf960cc3285a8330b4603e0d463d15d9bd934c" + sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687 url: "https://pub.dev" source: hosted - version: "1.17.1" + version: "1.17.2" connectivity_plus: dependency: transitive description: @@ -111,21 +111,21 @@ packages: path: ".." relative: true source: path - version: "1.0.0-alpha.2" + version: "1.0.0-alpha.4" fl_query_connectivity_plus_adapter: dependency: "direct main" description: path: "../../fl_query_connectivity_plus_adapter" relative: true source: path - version: "0.1.0" + version: "0.1.0-alpha.3" fl_query_devtools: dependency: "direct main" description: path: "../../fl_query_devtools" relative: true source: path - version: "0.1.0" + version: "0.1.0-alpha.2" flutter: dependency: "direct main" description: flutter @@ -225,18 +225,18 @@ packages: dependency: transitive description: name: matcher - sha256: "6501fbd55da300384b768785b83e5ce66991266cec21af89ab9ae7f5ce1c4cbb" + sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" url: "https://pub.dev" source: hosted - version: "0.12.15" + version: "0.12.16" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 + sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" url: "https://pub.dev" source: hosted - version: "0.2.0" + version: "0.5.0" meta: dependency: transitive description: @@ -358,10 +358,10 @@ packages: dependency: transitive description: name: source_span - sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 + sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" url: "https://pub.dev" source: hosted - version: "1.9.1" + version: "1.10.0" stack_trace: dependency: transitive description: @@ -406,10 +406,10 @@ packages: dependency: transitive description: name: test_api - sha256: eb6ac1540b26de412b3403a163d919ba86f6a973fe6cc50ae3541b80092fdcfb + sha256: "75760ffd7786fffdfb9597c35c5b27eaeec82be8edfb6d71d32651128ed7aab8" url: "https://pub.dev" source: hosted - version: "0.5.1" + version: "0.6.0" typed_data: dependency: transitive description: @@ -426,6 +426,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" + web: + dependency: transitive + description: + name: web + sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10 + url: "https://pub.dev" + source: hosted + version: "0.1.4-beta" win32: dependency: transitive description: @@ -451,5 +459,5 @@ packages: source: hosted version: "6.3.0" sdks: - dart: ">=3.0.0-0 <4.0.0" + dart: ">=3.1.0-185.0.dev <4.0.0" flutter: ">=3.3.0" diff --git a/packages/fl_query/lib/src/core/mutation.dart b/packages/fl_query/lib/src/core/mutation.dart index 8cdf9bf..c9bc817 100644 --- a/packages/fl_query/lib/src/core/mutation.dart +++ b/packages/fl_query/lib/src/core/mutation.dart @@ -16,22 +16,27 @@ typedef MutationFn = Future Function( class MutationState { final DataType? data; final ErrorType? error; + final bool _loading; final DateTime updatedAt; MutationState({ this.data, this.error, + bool loading = false, DateTime? updatedAt, - }) : updatedAt = updatedAt ?? DateTime.now(); + }) : _loading = loading, + updatedAt = updatedAt ?? DateTime.now(); MutationState copyWith({ DataType? data, ErrorType? error, DateTime? updatedAt, + bool? loading, }) { return MutationState( data: data ?? this.data, error: error ?? this.error, + loading: loading ?? this._loading, updatedAt: updatedAt ?? DateTime.now(), ); } @@ -80,7 +85,7 @@ class Mutation late final StreamSubscription? _connectivitySubscription; bool get isInactive => !hasListeners; - bool get isMutating => _mutex.isLocked; + bool get isMutating => state._loading; bool get hasData => state.data != null; bool get hasError => state.error != null; @@ -96,7 +101,7 @@ class Mutation return; } return _mutex.protect(() async { - state = state.copyWith(); + state = state.copyWith(loading: true); _operation = cancellableRetryOperation( () { _mutationController.add(variables); @@ -104,13 +109,13 @@ class Mutation }, config: retryConfig, onSuccessful: (data) { - state = state.copyWith(data: data); + state = state.copyWith(data: data, loading: false); if (data is DataType) { _dataController.add(data); } }, onFailed: (error) { - state = state.copyWith(error: error); + state = state.copyWith(error: error, loading: false); if (error is ErrorType) { _errorController.add(error); } diff --git a/packages/fl_query_hooks/example/pubspec.lock b/packages/fl_query_hooks/example/pubspec.lock index 615c310..b1f3069 100644 --- a/packages/fl_query_hooks/example/pubspec.lock +++ b/packages/fl_query_hooks/example/pubspec.lock @@ -45,10 +45,10 @@ packages: dependency: transitive description: name: collection - sha256: "4a07be6cb69c84d677a6c3096fcf960cc3285a8330b4603e0d463d15d9bd934c" + sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687 url: "https://pub.dev" source: hosted - version: "1.17.1" + version: "1.17.2" connectivity_plus: dependency: transitive description: @@ -119,21 +119,21 @@ packages: path: "../../fl_query" relative: true source: path - version: "1.0.0-alpha.2" + version: "1.0.0-alpha.4" fl_query_connectivity_plus_adapter: dependency: "direct main" description: path: "../../fl_query_connectivity_plus_adapter" relative: true source: path - version: "0.1.0" + version: "0.1.0-alpha.3" fl_query_hooks: dependency: "direct main" description: path: ".." relative: true source: path - version: "1.0.0-alpha.2" + version: "1.0.0-alpha.4+1" flutter: dependency: "direct main" description: flutter @@ -143,10 +143,10 @@ packages: dependency: "direct main" description: name: flutter_hooks - sha256: "6a126f703b89499818d73305e4ce1e3de33b4ae1c5512e3b8eab4b986f46774c" + sha256: "4618087243264d5f745b2a719a9fc610768f723da570efc2d0eaefe1efcbae70" url: "https://pub.dev" source: hosted - version: "0.18.6" + version: "0.20.2" flutter_lints: dependency: "direct dev" description: @@ -233,18 +233,18 @@ packages: dependency: transitive description: name: matcher - sha256: "6501fbd55da300384b768785b83e5ce66991266cec21af89ab9ae7f5ce1c4cbb" + sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" url: "https://pub.dev" source: hosted - version: "0.12.15" + version: "0.12.16" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 + sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" url: "https://pub.dev" source: hosted - version: "0.2.0" + version: "0.5.0" meta: dependency: transitive description: @@ -366,10 +366,10 @@ packages: dependency: transitive description: name: source_span - sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 + sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" url: "https://pub.dev" source: hosted - version: "1.9.1" + version: "1.10.0" stack_trace: dependency: transitive description: @@ -414,10 +414,10 @@ packages: dependency: transitive description: name: test_api - sha256: eb6ac1540b26de412b3403a163d919ba86f6a973fe6cc50ae3541b80092fdcfb + sha256: "75760ffd7786fffdfb9597c35c5b27eaeec82be8edfb6d71d32651128ed7aab8" url: "https://pub.dev" source: hosted - version: "0.5.1" + version: "0.6.0" typed_data: dependency: transitive description: @@ -434,6 +434,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" + web: + dependency: transitive + description: + name: web + sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10 + url: "https://pub.dev" + source: hosted + version: "0.1.4-beta" win32: dependency: transitive description: @@ -459,5 +467,5 @@ packages: source: hosted version: "6.3.0" sdks: - dart: ">=3.0.0-0 <4.0.0" + dart: ">=3.1.0-185.0.dev <4.0.0" flutter: ">=3.3.0" diff --git a/packages/fl_query_hooks/example/pubspec.yaml b/packages/fl_query_hooks/example/pubspec.yaml index 4bd378e..3c6ca8c 100644 --- a/packages/fl_query_hooks/example/pubspec.yaml +++ b/packages/fl_query_hooks/example/pubspec.yaml @@ -18,7 +18,7 @@ dependencies: fl_query_hooks: ^1.0.0-alpha.4+1 go_router: ^6.0.9 http: ^0.13.5 - flutter_hooks: ^0.18.6 + flutter_hooks: ^0.20.0 dev_dependencies: flutter_test: