fix(mutation): isMutating not working

This commit is contained in:
Kingkor Roy Tirtho
2023-10-06 10:23:01 +06:00
parent ea6b3f7b96
commit b512a5da06
5 changed files with 61 additions and 40 deletions
@@ -40,7 +40,7 @@ class _MutationPageState extends State<MutationPage> {
'sign-up', 'sign-up',
(variables) { (variables) {
return Future.delayed( return Future.delayed(
const Duration(seconds: 1), const Duration(seconds: 5),
() => { () => {
'name': variables['name'], 'name': variables['name'],
'email': variables['email'], 'email': variables['email'],
@@ -49,12 +49,12 @@ class _MutationPageState extends State<MutationPage> {
); );
}, },
onMutate: (variables) { onMutate: (variables) {
print('onMutate: $variables'); debugPrint('onMutate: $variables');
return "Recover ME"; return "Recover ME";
}, },
onData: (data, recoveryData) { onData: (data, recoveryData) {
print('onData: $data'); debugPrint('onData: $data');
print('recoveryData: $recoveryData'); debugPrint('recoveryData: $recoveryData');
}, },
refreshQueries: const ['hello'], refreshQueries: const ['hello'],
builder: (context, mutation) { builder: (context, mutation) {
+22 -14
View File
@@ -45,10 +45,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: collection name: collection
sha256: "4a07be6cb69c84d677a6c3096fcf960cc3285a8330b4603e0d463d15d9bd934c" sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.17.1" version: "1.17.2"
connectivity_plus: connectivity_plus:
dependency: transitive dependency: transitive
description: description:
@@ -111,21 +111,21 @@ packages:
path: ".." path: ".."
relative: true relative: true
source: path source: path
version: "1.0.0-alpha.2" version: "1.0.0-alpha.4"
fl_query_connectivity_plus_adapter: fl_query_connectivity_plus_adapter:
dependency: "direct main" dependency: "direct main"
description: description:
path: "../../fl_query_connectivity_plus_adapter" path: "../../fl_query_connectivity_plus_adapter"
relative: true relative: true
source: path source: path
version: "0.1.0" version: "0.1.0-alpha.3"
fl_query_devtools: fl_query_devtools:
dependency: "direct main" dependency: "direct main"
description: description:
path: "../../fl_query_devtools" path: "../../fl_query_devtools"
relative: true relative: true
source: path source: path
version: "0.1.0" version: "0.1.0-alpha.2"
flutter: flutter:
dependency: "direct main" dependency: "direct main"
description: flutter description: flutter
@@ -225,18 +225,18 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: matcher name: matcher
sha256: "6501fbd55da300384b768785b83e5ce66991266cec21af89ab9ae7f5ce1c4cbb" sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.12.15" version: "0.12.16"
material_color_utilities: material_color_utilities:
dependency: transitive dependency: transitive
description: description:
name: material_color_utilities name: material_color_utilities
sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.2.0" version: "0.5.0"
meta: meta:
dependency: transitive dependency: transitive
description: description:
@@ -358,10 +358,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: source_span name: source_span
sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.9.1" version: "1.10.0"
stack_trace: stack_trace:
dependency: transitive dependency: transitive
description: description:
@@ -406,10 +406,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: test_api name: test_api
sha256: eb6ac1540b26de412b3403a163d919ba86f6a973fe6cc50ae3541b80092fdcfb sha256: "75760ffd7786fffdfb9597c35c5b27eaeec82be8edfb6d71d32651128ed7aab8"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.5.1" version: "0.6.0"
typed_data: typed_data:
dependency: transitive dependency: transitive
description: description:
@@ -426,6 +426,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.4" version: "2.1.4"
web:
dependency: transitive
description:
name: web
sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10
url: "https://pub.dev"
source: hosted
version: "0.1.4-beta"
win32: win32:
dependency: transitive dependency: transitive
description: description:
@@ -451,5 +459,5 @@ packages:
source: hosted source: hosted
version: "6.3.0" version: "6.3.0"
sdks: sdks:
dart: ">=3.0.0-0 <4.0.0" dart: ">=3.1.0-185.0.dev <4.0.0"
flutter: ">=3.3.0" flutter: ">=3.3.0"
+10 -5
View File
@@ -16,22 +16,27 @@ typedef MutationFn<DataType, VariablesType> = Future<DataType> Function(
class MutationState<DataType, ErrorType, VariablesType> { class MutationState<DataType, ErrorType, VariablesType> {
final DataType? data; final DataType? data;
final ErrorType? error; final ErrorType? error;
final bool _loading;
final DateTime updatedAt; final DateTime updatedAt;
MutationState({ MutationState({
this.data, this.data,
this.error, this.error,
bool loading = false,
DateTime? updatedAt, DateTime? updatedAt,
}) : updatedAt = updatedAt ?? DateTime.now(); }) : _loading = loading,
updatedAt = updatedAt ?? DateTime.now();
MutationState<DataType, ErrorType, VariablesType> copyWith({ MutationState<DataType, ErrorType, VariablesType> copyWith({
DataType? data, DataType? data,
ErrorType? error, ErrorType? error,
DateTime? updatedAt, DateTime? updatedAt,
bool? loading,
}) { }) {
return MutationState<DataType, ErrorType, VariablesType>( return MutationState<DataType, ErrorType, VariablesType>(
data: data ?? this.data, data: data ?? this.data,
error: error ?? this.error, error: error ?? this.error,
loading: loading ?? this._loading,
updatedAt: updatedAt ?? DateTime.now(), updatedAt: updatedAt ?? DateTime.now(),
); );
} }
@@ -80,7 +85,7 @@ class Mutation<DataType, ErrorType, VariablesType>
late final StreamSubscription<bool>? _connectivitySubscription; late final StreamSubscription<bool>? _connectivitySubscription;
bool get isInactive => !hasListeners; bool get isInactive => !hasListeners;
bool get isMutating => _mutex.isLocked; bool get isMutating => state._loading;
bool get hasData => state.data != null; bool get hasData => state.data != null;
bool get hasError => state.error != null; bool get hasError => state.error != null;
@@ -96,7 +101,7 @@ class Mutation<DataType, ErrorType, VariablesType>
return; return;
} }
return _mutex.protect(() async { return _mutex.protect(() async {
state = state.copyWith(); state = state.copyWith(loading: true);
_operation = cancellableRetryOperation( _operation = cancellableRetryOperation(
() { () {
_mutationController.add(variables); _mutationController.add(variables);
@@ -104,13 +109,13 @@ class Mutation<DataType, ErrorType, VariablesType>
}, },
config: retryConfig, config: retryConfig,
onSuccessful: (data) { onSuccessful: (data) {
state = state.copyWith(data: data); state = state.copyWith(data: data, loading: false);
if (data is DataType) { if (data is DataType) {
_dataController.add(data); _dataController.add(data);
} }
}, },
onFailed: (error) { onFailed: (error) {
state = state.copyWith(error: error); state = state.copyWith(error: error, loading: false);
if (error is ErrorType) { if (error is ErrorType) {
_errorController.add(error); _errorController.add(error);
} }
+24 -16
View File
@@ -45,10 +45,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: collection name: collection
sha256: "4a07be6cb69c84d677a6c3096fcf960cc3285a8330b4603e0d463d15d9bd934c" sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.17.1" version: "1.17.2"
connectivity_plus: connectivity_plus:
dependency: transitive dependency: transitive
description: description:
@@ -119,21 +119,21 @@ packages:
path: "../../fl_query" path: "../../fl_query"
relative: true relative: true
source: path source: path
version: "1.0.0-alpha.2" version: "1.0.0-alpha.4"
fl_query_connectivity_plus_adapter: fl_query_connectivity_plus_adapter:
dependency: "direct main" dependency: "direct main"
description: description:
path: "../../fl_query_connectivity_plus_adapter" path: "../../fl_query_connectivity_plus_adapter"
relative: true relative: true
source: path source: path
version: "0.1.0" version: "0.1.0-alpha.3"
fl_query_hooks: fl_query_hooks:
dependency: "direct main" dependency: "direct main"
description: description:
path: ".." path: ".."
relative: true relative: true
source: path source: path
version: "1.0.0-alpha.2" version: "1.0.0-alpha.4+1"
flutter: flutter:
dependency: "direct main" dependency: "direct main"
description: flutter description: flutter
@@ -143,10 +143,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: flutter_hooks name: flutter_hooks
sha256: "6a126f703b89499818d73305e4ce1e3de33b4ae1c5512e3b8eab4b986f46774c" sha256: "4618087243264d5f745b2a719a9fc610768f723da570efc2d0eaefe1efcbae70"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.18.6" version: "0.20.2"
flutter_lints: flutter_lints:
dependency: "direct dev" dependency: "direct dev"
description: description:
@@ -233,18 +233,18 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: matcher name: matcher
sha256: "6501fbd55da300384b768785b83e5ce66991266cec21af89ab9ae7f5ce1c4cbb" sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.12.15" version: "0.12.16"
material_color_utilities: material_color_utilities:
dependency: transitive dependency: transitive
description: description:
name: material_color_utilities name: material_color_utilities
sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.2.0" version: "0.5.0"
meta: meta:
dependency: transitive dependency: transitive
description: description:
@@ -366,10 +366,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: source_span name: source_span
sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.9.1" version: "1.10.0"
stack_trace: stack_trace:
dependency: transitive dependency: transitive
description: description:
@@ -414,10 +414,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: test_api name: test_api
sha256: eb6ac1540b26de412b3403a163d919ba86f6a973fe6cc50ae3541b80092fdcfb sha256: "75760ffd7786fffdfb9597c35c5b27eaeec82be8edfb6d71d32651128ed7aab8"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.5.1" version: "0.6.0"
typed_data: typed_data:
dependency: transitive dependency: transitive
description: description:
@@ -434,6 +434,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.4" version: "2.1.4"
web:
dependency: transitive
description:
name: web
sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10
url: "https://pub.dev"
source: hosted
version: "0.1.4-beta"
win32: win32:
dependency: transitive dependency: transitive
description: description:
@@ -459,5 +467,5 @@ packages:
source: hosted source: hosted
version: "6.3.0" version: "6.3.0"
sdks: sdks:
dart: ">=3.0.0-0 <4.0.0" dart: ">=3.1.0-185.0.dev <4.0.0"
flutter: ">=3.3.0" flutter: ">=3.3.0"
+1 -1
View File
@@ -18,7 +18,7 @@ dependencies:
fl_query_hooks: ^1.0.0-alpha.4+1 fl_query_hooks: ^1.0.0-alpha.4+1
go_router: ^6.0.9 go_router: ^6.0.9
http: ^0.13.5 http: ^0.13.5
flutter_hooks: ^0.18.6 flutter_hooks: ^0.20.0
dev_dependencies: dev_dependencies:
flutter_test: flutter_test: