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

@@ -81,12 +81,7 @@ class EvenementsBloc extends Bloc<EvenementsEvent, EvenementsState> {
totalPages: result.totalPages,
));
} on DioException catch (e) {
if (e.type == DioExceptionType.cancel) return;
emit(EvenementsNetworkError(
message: _getNetworkErrorMessage(e),
code: e.response?.statusCode.toString(),
error: e,
));
_emitDioError(e, emit);
} catch (e) {
if (e is DioException && e.type == DioExceptionType.cancel) return;
emit(EvenementsError(
@@ -115,12 +110,7 @@ class EvenementsBloc extends Bloc<EvenementsEvent, EvenementsState> {
));
}
} on DioException catch (e) {
if (e.type == DioExceptionType.cancel) return;
emit(EvenementsNetworkError(
message: _getNetworkErrorMessage(e),
code: e.response?.statusCode.toString(),
error: e,
));
_emitDioError(e, emit);
} catch (e) {
if (e is DioException && e.type == DioExceptionType.cancel) return;
emit(EvenementsError(
@@ -151,11 +141,7 @@ class EvenementsBloc extends Bloc<EvenementsEvent, EvenementsState> {
code: '400',
));
} else {
emit(EvenementsNetworkError(
message: _getNetworkErrorMessage(e),
code: e.response?.statusCode.toString(),
error: e,
));
_emitDioError(e, emit);
}
} catch (e) {
if (e is DioException && e.type == DioExceptionType.cancel) return;
@@ -187,11 +173,7 @@ class EvenementsBloc extends Bloc<EvenementsEvent, EvenementsState> {
code: '400',
));
} else {
emit(EvenementsNetworkError(
message: _getNetworkErrorMessage(e),
code: e.response?.statusCode.toString(),
error: e,
));
_emitDioError(e, emit);
}
} catch (e) {
if (e is DioException && e.type == DioExceptionType.cancel) return;
@@ -214,12 +196,7 @@ class EvenementsBloc extends Bloc<EvenementsEvent, EvenementsState> {
emit(EvenementDeleted(event.id));
} on DioException catch (e) {
if (e.type == DioExceptionType.cancel) return;
emit(EvenementsNetworkError(
message: _getNetworkErrorMessage(e),
code: e.response?.statusCode.toString(),
error: e,
));
_emitDioError(e, emit);
} catch (e) {
if (e is DioException && e.type == DioExceptionType.cancel) return;
emit(EvenementsError(
@@ -250,12 +227,7 @@ class EvenementsBloc extends Bloc<EvenementsEvent, EvenementsState> {
totalPages: result.totalPages,
));
} on DioException catch (e) {
if (e.type == DioExceptionType.cancel) return;
emit(EvenementsNetworkError(
message: _getNetworkErrorMessage(e),
code: e.response?.statusCode.toString(),
error: e,
));
_emitDioError(e, emit);
} catch (e) {
if (e is DioException && e.type == DioExceptionType.cancel) return;
emit(EvenementsError(
@@ -286,12 +258,7 @@ class EvenementsBloc extends Bloc<EvenementsEvent, EvenementsState> {
totalPages: result.totalPages,
));
} on DioException catch (e) {
if (e.type == DioExceptionType.cancel) return;
emit(EvenementsNetworkError(
message: _getNetworkErrorMessage(e),
code: e.response?.statusCode.toString(),
error: e,
));
_emitDioError(e, emit);
} catch (e) {
if (e is DioException && e.type == DioExceptionType.cancel) return;
emit(EvenementsError(
@@ -322,12 +289,7 @@ class EvenementsBloc extends Bloc<EvenementsEvent, EvenementsState> {
totalPages: result.totalPages,
));
} on DioException catch (e) {
if (e.type == DioExceptionType.cancel) return;
emit(EvenementsNetworkError(
message: _getNetworkErrorMessage(e),
code: e.response?.statusCode.toString(),
error: e,
));
_emitDioError(e, emit);
} catch (e) {
if (e is DioException && e.type == DioExceptionType.cancel) return;
emit(EvenementsError(
@@ -349,12 +311,7 @@ class EvenementsBloc extends Bloc<EvenementsEvent, EvenementsState> {
emit(EvenementInscrit(event.evenementId));
} on DioException catch (e) {
if (e.type == DioExceptionType.cancel) return;
emit(EvenementsNetworkError(
message: _getNetworkErrorMessage(e),
code: e.response?.statusCode.toString(),
error: e,
));
_emitDioError(e, emit);
} catch (e) {
if (e is DioException && e.type == DioExceptionType.cancel) return;
emit(EvenementsError(
@@ -376,12 +333,7 @@ class EvenementsBloc extends Bloc<EvenementsEvent, EvenementsState> {
emit(EvenementDesinscrit(event.evenementId));
} on DioException catch (e) {
if (e.type == DioExceptionType.cancel) return;
emit(EvenementsNetworkError(
message: _getNetworkErrorMessage(e),
code: e.response?.statusCode.toString(),
error: e,
));
_emitDioError(e, emit);
} catch (e) {
if (e is DioException && e.type == DioExceptionType.cancel) return;
emit(EvenementsError(
@@ -406,12 +358,7 @@ class EvenementsBloc extends Bloc<EvenementsEvent, EvenementsState> {
participants: participants,
));
} on DioException catch (e) {
if (e.type == DioExceptionType.cancel) return;
emit(EvenementsNetworkError(
message: _getNetworkErrorMessage(e),
code: e.response?.statusCode.toString(),
error: e,
));
_emitDioError(e, emit);
} catch (e) {
if (e is DioException && e.type == DioExceptionType.cancel) return;
emit(EvenementsError(
@@ -433,12 +380,7 @@ class EvenementsBloc extends Bloc<EvenementsEvent, EvenementsState> {
emit(EvenementsStatsLoaded(stats));
} on DioException catch (e) {
if (e.type == DioExceptionType.cancel) return;
emit(EvenementsNetworkError(
message: _getNetworkErrorMessage(e),
code: e.response?.statusCode.toString(),
error: e,
));
_emitDioError(e, emit);
} catch (e) {
if (e is DioException && e.type == DioExceptionType.cancel) return;
emit(EvenementsError(
@@ -493,5 +435,24 @@ class EvenementsBloc extends Bloc<EvenementsEvent, EvenementsState> {
return 'Erreur réseau inattendue.';
}
}
/// Émet le bon état selon le type d'erreur :
/// 401/403 → EvenementsError (autorisation), autres → EvenementsNetworkError (réseau).
void _emitDioError(DioException e, Emitter<EvenementsState> emit) {
if (e.type == DioExceptionType.cancel) return;
final statusCode = e.response?.statusCode;
if (statusCode == 401 || statusCode == 403) {
emit(EvenementsError(
message: _getNetworkErrorMessage(e),
error: e,
));
} else {
emit(EvenementsNetworkError(
message: _getNetworkErrorMessage(e),
code: statusCode?.toString(),
error: e,
));
}
}
}