diff --git a/lib/pangea/controllers/user_controller.dart b/lib/pangea/controllers/user_controller.dart index a4fd08c4d..1fd13acfc 100644 --- a/lib/pangea/controllers/user_controller.dart +++ b/lib/pangea/controllers/user_controller.dart @@ -69,11 +69,8 @@ class UserController extends BaseController { ); } - /// A boolean flag indicating whether the profile data is currently being fetched. - bool _isFetching = false; - /// A completer for the profile model of a user. - Completer _profileCompleter = Completer(); + Completer? _profileCompleter; /// Fetches the user model. /// @@ -85,25 +82,27 @@ class UserController extends BaseController { /// /// Returns the future value of the user model completer. Future fetchUserModel() async { - if (_profileCompleter.isCompleted) return _profileCompleter.future; - if (_isFetching) { - await _profileCompleter.future; - return _profileCompleter.future; + if (_profileCompleter?.isCompleted ?? false) { + return _profileCompleter!.future; + } + + if (_profileCompleter != null) { + await _profileCompleter!.future; + return _profileCompleter!.future; } - _isFetching = true; + _profileCompleter = Completer(); PUserModel? fetchedUserModel; try { fetchedUserModel = await _fetchUserModel(); } catch (err, s) { ErrorHandler.logError(e: err, s: s); - return null; + } finally { + _profileCompleter!.complete(fetchedUserModel); } - _isFetching = false; - _profileCompleter.complete(fetchedUserModel); - return _profileCompleter.future; + return _profileCompleter!.future; } /// Fetches the user model asynchronously. @@ -133,13 +132,9 @@ class UserController extends BaseController { } /// Reinitializes the user's profile - /// - /// This method sets up the necessary variables and fetches the user model. - /// It completes the [_profileCompleter] with the fetched user model. /// This method should be called whenever the user's login status changes Future reinitialize() async { - _profileCompleter = Completer(); - _isFetching = false; + _profileCompleter = null; await fetchUserModel(); }