fix(mobile): URL changement mdp corrigée + v3.0 — multi-org, AppAuth, sécurité prod

Auth:
- profile_repository.dart: /api/auth/change-password → /api/membres/auth/change-password

Multi-org (Phase 3):
- OrgSelectorPage, OrgSwitcherBloc, OrgSwitcherEntry
- org_context_service.dart: headers X-Active-Organisation-Id + X-Active-Role

Navigation:
- MorePage: navigation conditionnelle par typeOrganisation
- Suppression adaptive_navigation (remplacé par main_navigation_layout)

Auth AppAuth:
- keycloak_webview_auth_service: fixes AppAuth Android
- AuthBloc: gestion REAUTH_REQUIS + premierLoginComplet

Onboarding:
- Nouveaux états: payment_method_page, onboarding_shared_widgets
- SouscriptionStatusModel mis à jour StatutValidationSouscription

Android:
- build.gradle: ProGuard/R8, network_security_config
- Gradle wrapper mis à jour
This commit is contained in:
dahoud
2026-04-07 20:56:03 +00:00
parent 22f9c7e9a1
commit 70cbd1c873
63 changed files with 9316 additions and 6122 deletions

View File

@@ -141,6 +141,78 @@ class MembreDeactivated extends MembresState {
List<Object?> get props => [membre];
}
/// État de succès après affectation à une organisation
class MembreAffecte extends MembresState {
final MembreCompletModel membre;
const MembreAffecte(this.membre);
@override
List<Object?> get props => [membre];
}
/// État de succès après réinitialisation du mot de passe
/// [membre] contient motDePasseTemporaire renseigné (retourné une seule fois)
class MotDePasseReinitialise extends MembresState {
final MembreCompletModel membre;
const MotDePasseReinitialise(this.membre);
@override
List<Object?> get props => [membre];
}
// ── États cycle de vie adhésion ──────────────────────────────────────────
/// Invitation envoyée avec succès
class MembreInvite extends MembresState {
final String membreId;
final String organisationId;
final String nouveauStatut;
const MembreInvite({
required this.membreId,
required this.organisationId,
required this.nouveauStatut,
});
@override
List<Object?> get props => [membreId, organisationId, nouveauStatut];
}
/// Adhésion activée
class AdhesionActivee extends MembresState {
final String membreId;
final String nouveauStatut;
const AdhesionActivee({required this.membreId, required this.nouveauStatut});
@override
List<Object?> get props => [membreId, nouveauStatut];
}
/// Adhésion suspendue
class AdhesionSuspendue extends MembresState {
final String membreId;
final String nouveauStatut;
const AdhesionSuspendue({required this.membreId, required this.nouveauStatut});
@override
List<Object?> get props => [membreId, nouveauStatut];
}
/// Membre radié
class MembreRadie extends MembresState {
final String membreId;
final String nouveauStatut;
const MembreRadie({required this.membreId, required this.nouveauStatut});
@override
List<Object?> get props => [membreId, nouveauStatut];
}
/// État avec statistiques
class MembresStatsLoaded extends MembresState {
final Map<String, dynamic> stats;