From 577c4737ae50b0a00797824b16e5908f32490388 Mon Sep 17 00:00:00 2001 From: Lizandro Guarnizo <77708265+lizandrogd@users.noreply.github.com> Date: Sun, 12 Jul 2026 19:07:20 -0500 Subject: [PATCH] persist professional mode across page refreshes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit isProModeActive was in-memory only — a browser refresh reset it to false even when the URL was a professional route. Fix: read/write 'isProModeActive' from SharedPreferences in ProfessionalProvider (constructor, toggleProMode, setIsProModeActive, logout). Also clear the flag in AuthProvider.isAuthenticated() when the user's proState is not active, so a stale value can't trap a non-pro user in professional mode. Co-Authored-By: Claude Sonnet 4.6 --- lib/providers/auth_provider.dart | 7 +++++++ lib/providers/professional_provider.dart | 10 ++++++++++ 2 files changed, 17 insertions(+) diff --git a/lib/providers/auth_provider.dart b/lib/providers/auth_provider.dart index f7c2c6c..da3902f 100644 --- a/lib/providers/auth_provider.dart +++ b/lib/providers/auth_provider.dart @@ -1,11 +1,13 @@ import 'package:flutter/material.dart'; import 'package:flutter/scheduler.dart'; +import 'package:prosapp_web_app/models/pro_state.dart'; import 'package:prosapp_web_app/models/usuario.dart'; import 'package:prosapp_web_app/providers/professional_form_provider.dart'; import 'package:prosapp_web_app/providers/professional_provider.dart'; import 'package:prosapp_web_app/providers/services_provider.dart'; import 'package:prosapp_web_app/router/router.dart'; import 'package:prosapp_web_app/services/api_service.dart'; +import 'package:prosapp_web_app/services/local_storage.dart'; import 'package:prosapp_web_app/services/navigation_service.dart'; import 'package:prosapp_web_app/services/notifications_service.dart'; import 'package:provider/provider.dart'; @@ -179,6 +181,11 @@ class AuthProvider extends ChangeNotifier { final data = await _api.get('/auth/me'); user = Usuario.fromDocument(data as Map); userAverageScore = await _loadAverageScore(user!.id); + // If the user is not an active professional, clear the persisted pro mode + // flag so a stale value doesn't leave them stuck in professional mode. + if (user!.proState != ProState.active) { + LocalStorage.prefs.setBool('isProModeActive', false); + } authStatus = AuthStatus.authenticated; notifyListeners(); return true; diff --git a/lib/providers/professional_provider.dart b/lib/providers/professional_provider.dart index f2d16bc..acda988 100644 --- a/lib/providers/professional_provider.dart +++ b/lib/providers/professional_provider.dart @@ -4,12 +4,19 @@ import 'package:prosapp_web_app/models/payment_method_entity.dart'; import 'package:prosapp_web_app/models/profesional.dart'; import 'package:prosapp_web_app/models/schedules.dart'; import 'package:prosapp_web_app/services/api_service.dart'; +import 'package:prosapp_web_app/services/local_storage.dart'; class ProfessionalProvider extends ChangeNotifier { Profesional? profesional; bool _isProModeActive = false; final _api = ApiService.instance; + static const _kProModeKey = 'isProModeActive'; + + ProfessionalProvider() { + _isProModeActive = LocalStorage.prefs.getBool(_kProModeKey) ?? false; + } + bool get isProModeActive => _isProModeActive; Future getProfessional(String uid) async { @@ -59,16 +66,19 @@ class ProfessionalProvider extends ChangeNotifier { void logout() { _isProModeActive = false; + LocalStorage.prefs.setBool(_kProModeKey, false); notifyListeners(); } void toggleProMode() { _isProModeActive = !_isProModeActive; + LocalStorage.prefs.setBool(_kProModeKey, _isProModeActive); notifyListeners(); } void setIsProModeActive(bool value) { _isProModeActive = value; + LocalStorage.prefs.setBool(_kProModeKey, value); notifyListeners(); }