build method
Build (Init)
Implementation
@override
FutureOr<AuthRepositoryState> build() async {
_log = ref.watch(appTalkerProvider);
_log.logTyped(AuthRepositoryLog('build()'));
_authService = ref.read(AuthService.provider);
var resultCompleter = Completer<AuthRepositoryState>();
/// Cancel all subscriptions
await _authStateChangesSubscription?.cancel();
/// Give it a bit of time to cancel
// await Future.delayed(const Duration(seconds: 1));
/// Check current user
final currentUser = _authService.currentUser;
if (currentUser is AuthUserVO) {
try {
resultCompleter.complete(AuthRepositoryState(authUser: currentUser));
} catch (err) {
_log.logTyped(AuthRepositoryLog(
'build() _fetchUserData()', err, StackTrace.current));
await _authService.logout();
resultCompleter.complete(const AuthRepositoryState());
}
}
/// Stream Changes
_authStateChangesSubscription = _authService.authIdTokenChanges().listen(
(user) async {
_log.logTyped(AuthRepositoryLog('build authIdTokenChanges()', user));
final tmpState = AuthRepositoryState(authUser: user);
if (!resultCompleter.isCompleted) {
resultCompleter.complete(tmpState);
} else {
state = AsyncValue.data(tmpState);
}
},
);
return resultCompleter.future;
}