- Replace flutter_appauth with custom WebView implementation to resolve deep link issues - Add KeycloakWebViewAuthService with integrated WebView for seamless authentication - Configure Android manifest for HTTP cleartext traffic support - Add network security config for development environment (192.168.1.11) - Update Keycloak client to use HTTP callback endpoint (http://192.168.1.11:8080/auth/callback) - Remove obsolete keycloak_auth_service.dart and temporary scripts - Clean up dependencies and regenerate injection configuration - Tested successfully on multiple Android devices (Xiaomi 2201116TG, SM A725F) BREAKING CHANGE: Authentication flow now uses WebView instead of external browser - Users will see Keycloak login page within the app instead of browser redirect - Resolves ERR_CLEARTEXT_NOT_PERMITTED and deep link state management issues - Maintains full OIDC compliance with PKCE flow and secure token storage Technical improvements: - WebView with custom navigation delegate for callback handling - Automatic token extraction and user info parsing from JWT - Proper error handling and user feedback - Consistent authentication state management across app lifecycle
95 lines
3.9 KiB
Dart
95 lines
3.9 KiB
Dart
// GENERATED CODE - DO NOT MODIFY BY HAND
|
|
|
|
part of 'evenement_model.dart';
|
|
|
|
// **************************************************************************
|
|
// JsonSerializableGenerator
|
|
// **************************************************************************
|
|
|
|
EvenementModel _$EvenementModelFromJson(Map<String, dynamic> json) =>
|
|
EvenementModel(
|
|
id: json['id'] as String?,
|
|
titre: json['titre'] as String,
|
|
description: json['description'] as String?,
|
|
dateDebut: DateTime.parse(json['dateDebut'] as String),
|
|
dateFin: json['dateFin'] == null
|
|
? null
|
|
: DateTime.parse(json['dateFin'] as String),
|
|
lieu: json['lieu'] as String?,
|
|
adresse: json['adresse'] as String?,
|
|
typeEvenement: $enumDecode(_$TypeEvenementEnumMap, json['typeEvenement']),
|
|
statut: $enumDecode(_$StatutEvenementEnumMap, json['statut']),
|
|
capaciteMax: (json['capaciteMax'] as num?)?.toInt(),
|
|
prix: (json['prix'] as num?)?.toDouble(),
|
|
inscriptionRequise: json['inscriptionRequise'] as bool,
|
|
dateLimiteInscription: json['dateLimiteInscription'] == null
|
|
? null
|
|
: DateTime.parse(json['dateLimiteInscription'] as String),
|
|
instructionsParticulieres: json['instructionsParticulieres'] as String?,
|
|
contactOrganisateur: json['contactOrganisateur'] as String?,
|
|
materielRequis: json['materielRequis'] as String?,
|
|
visiblePublic: json['visiblePublic'] as bool,
|
|
actif: json['actif'] as bool,
|
|
creePar: json['creePar'] as String?,
|
|
dateCreation: json['dateCreation'] == null
|
|
? null
|
|
: DateTime.parse(json['dateCreation'] as String),
|
|
modifiePar: json['modifiePar'] as String?,
|
|
dateModification: json['dateModification'] == null
|
|
? null
|
|
: DateTime.parse(json['dateModification'] as String),
|
|
organisationId: json['organisationId'] as String?,
|
|
organisateurId: json['organisateurId'] as String?,
|
|
);
|
|
|
|
Map<String, dynamic> _$EvenementModelToJson(EvenementModel instance) =>
|
|
<String, dynamic>{
|
|
'id': instance.id,
|
|
'titre': instance.titre,
|
|
'description': instance.description,
|
|
'dateDebut': instance.dateDebut.toIso8601String(),
|
|
'dateFin': instance.dateFin?.toIso8601String(),
|
|
'lieu': instance.lieu,
|
|
'adresse': instance.adresse,
|
|
'typeEvenement': _$TypeEvenementEnumMap[instance.typeEvenement]!,
|
|
'statut': _$StatutEvenementEnumMap[instance.statut]!,
|
|
'capaciteMax': instance.capaciteMax,
|
|
'prix': instance.prix,
|
|
'inscriptionRequise': instance.inscriptionRequise,
|
|
'dateLimiteInscription':
|
|
instance.dateLimiteInscription?.toIso8601String(),
|
|
'instructionsParticulieres': instance.instructionsParticulieres,
|
|
'contactOrganisateur': instance.contactOrganisateur,
|
|
'materielRequis': instance.materielRequis,
|
|
'visiblePublic': instance.visiblePublic,
|
|
'actif': instance.actif,
|
|
'creePar': instance.creePar,
|
|
'dateCreation': instance.dateCreation?.toIso8601String(),
|
|
'modifiePar': instance.modifiePar,
|
|
'dateModification': instance.dateModification?.toIso8601String(),
|
|
'organisationId': instance.organisationId,
|
|
'organisateurId': instance.organisateurId,
|
|
};
|
|
|
|
const _$TypeEvenementEnumMap = {
|
|
TypeEvenement.assembleeGenerale: 'ASSEMBLEE_GENERALE',
|
|
TypeEvenement.reunion: 'REUNION',
|
|
TypeEvenement.formation: 'FORMATION',
|
|
TypeEvenement.conference: 'CONFERENCE',
|
|
TypeEvenement.atelier: 'ATELIER',
|
|
TypeEvenement.seminaire: 'SEMINAIRE',
|
|
TypeEvenement.evenementSocial: 'EVENEMENT_SOCIAL',
|
|
TypeEvenement.manifestation: 'MANIFESTATION',
|
|
TypeEvenement.celebration: 'CELEBRATION',
|
|
TypeEvenement.autre: 'AUTRE',
|
|
};
|
|
|
|
const _$StatutEvenementEnumMap = {
|
|
StatutEvenement.planifie: 'PLANIFIE',
|
|
StatutEvenement.confirme: 'CONFIRME',
|
|
StatutEvenement.enCours: 'EN_COURS',
|
|
StatutEvenement.termine: 'TERMINE',
|
|
StatutEvenement.annule: 'ANNULE',
|
|
StatutEvenement.reporte: 'REPORTE',
|
|
};
|