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

@@ -17,6 +17,8 @@ import '../../../../core/l10n/locale_provider.dart';
import '../../../../core/theme/theme_provider.dart';
import '../../../authentication/presentation/bloc/auth_bloc.dart';
import '../../../members/data/models/membre_complete_model.dart';
import '../../../organizations/bloc/org_switcher_bloc.dart';
import '../../../organizations/presentation/pages/org_selector_page.dart';
import '../../../settings/presentation/pages/language_settings_page.dart';
import '../../../settings/presentation/pages/privacy_settings_page.dart';
import '../../../settings/presentation/pages/feedback_page.dart';
@@ -309,6 +311,31 @@ class _ProfilePageState extends State<ProfilePage>
_buildStatItem('ORG', orgValue),
],
),
// Sélecteur d'organisation (multi-org)
BlocBuilder<OrgSwitcherBloc, OrgSwitcherState>(
builder: (context, orgState) {
if (orgState is! OrgSwitcherLoaded ||
orgState.organisations.length <= 1) {
return const SizedBox.shrink();
}
return Padding(
padding: const EdgeInsets.only(top: 12),
child: Center(
child: OrgSwitcherBadge(
activeOrg: orgState.active,
onTap: () async {
final selected = await showOrgSelector(context);
if (selected != null && context.mounted) {
context
.read<OrgSwitcherBloc>()
.add(OrgSwitcherSelectRequested(selected));
}
},
),
),
);
},
),
],
),
);