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:
co-authored by
Claude Sonnet 4.6
parent
1870159dea
commit
577c4737ae
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user