fix(auth): fix stream account, now including correctly extra data

This commit is contained in:
Hugo Pointcheval 2022-11-16 19:51:45 -05:00
parent 279d451cd8
commit 390fb81b1e
Signed by: hugo
GPG Key ID: A9E8E9615379254F
2 changed files with 26 additions and 11 deletions

View File

@ -14,6 +14,9 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
import 'dart:async';
import 'package:rxdart/rxdart.dart';
import 'package:wyatt_architecture/wyatt_architecture.dart';
import 'package:wyatt_authentication_bloc/src/core/constants/form_field.dart';
import 'package:wyatt_authentication_bloc/src/core/constants/form_name.dart';
@ -43,6 +46,8 @@ class AuthenticationRepositoryImpl<T extends Object>
final OnSignUpSuccess<T>? _onSignUpSuccess;
final OnAuthChange<T>? _onAccountChanges;
final StreamController<FutureResult<AccountWrapper<T>>> _signUpStream =
StreamController();
bool _pause = false; // Semaphore
@ -134,7 +139,11 @@ class AuthenticationRepositoryImpl<T extends Object>
_formRepository.accessForm(AuthFormName.signUpForm).clone(),
);
await dataResult.foldAsync(
_authenticationLocalDataSource.storeData,
(data) async {
await _authenticationLocalDataSource.storeData(data);
_signUpStream
.add(Future.value(Ok(AccountWrapperModel(account, data))));
},
(error) async => error,
);
}
@ -205,16 +214,21 @@ class AuthenticationRepositoryImpl<T extends Object>
);
@override
Stream<FutureResult<AccountWrapper<T>>> streamAccount() =>
_authenticationRemoteDataSource.streamAccount().map((account) async {
if (_onAccountChanges.isNotNull && !_pause) {
final dataResult = await _onAccountChanges!.call(account);
return dataResult.map((data) => AccountWrapperModel(account, data));
}
return Ok<AccountWrapperModel<T>, AppException>(
AccountWrapperModel<T>(account, null),
);
});
Stream<FutureResult<AccountWrapper<T>>> streamAccount() => MergeStream([
_signUpStream.stream.asBroadcastStream(),
_authenticationRemoteDataSource.streamAccount().map((account) async {
if (_onAccountChanges.isNotNull && !_pause) {
final dataResult = await _onAccountChanges!.call(account);
return dataResult.map((data) {
_authenticationLocalDataSource.storeData(data);
return AccountWrapperModel(account, data);
});
}
return Ok<AccountWrapperModel<T>, AppException>(
AccountWrapperModel<T>(account, null),
);
})
]);
@override
FutureResult<void> confirmPasswordReset({

View File

@ -21,6 +21,7 @@ dependencies:
flutter_facebook_auth: ^4.3.0
sign_in_with_apple: ^3.3.0
twitter_login: ^4.2.3
rxdart: ^0.27.7
wyatt_form_bloc:
hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub/