persist professional mode across page refreshes

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 <noreply@anthropic.com>
This commit is contained in:
Lizandro Guarnizo
2026-07-12 19:07:20 -05:00
co-authored by Claude Sonnet 4.6
parent 1870159dea
commit 577c4737ae
2 changed files with 17 additions and 0 deletions
+7
View File
@@ -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<String, dynamic>);
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;
+10
View File
@@ -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<Profesional> 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();
}