Files
geo/app/lib/presentation/widgets/loading_overlay.dart
pierre 599b9fcda0 feat: Gestion des secteurs et migration v3.0.4+304
- Ajout système complet de gestion des secteurs avec contours géographiques
- Import des contours départementaux depuis GeoJSON
- API REST pour la gestion des secteurs (/api/sectors)
- Service de géolocalisation pour déterminer les secteurs
- Migration base de données avec tables x_departements_contours et sectors_adresses
- Interface Flutter pour visualisation et gestion des secteurs
- Ajout thème sombre dans l'application
- Corrections diverses et optimisations

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-07 11:01:45 +02:00

90 lines
2.4 KiB
Dart
Executable File

import 'package:flutter/material.dart';
/// Widget d'overlay de chargement qui affiche un spinner centré avec un message optionnel
/// Utilisé pour les opérations longues comme la connexion, déconnexion et synchronisation
class LoadingOverlay extends StatelessWidget {
final String? message;
final Color backgroundColor;
final Color spinnerColor;
final Color textColor;
final double spinnerSize;
final double strokeWidth;
const LoadingOverlay({
super.key,
this.message,
this.backgroundColor = Colors.black54,
this.spinnerColor = Colors.white,
this.textColor = Colors.white,
this.spinnerSize = 60.0,
this.strokeWidth = 5.0,
});
@override
Widget build(BuildContext context) {
return Container(
color: backgroundColor,
child: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
SizedBox(
width: spinnerSize,
height: spinnerSize,
child: CircularProgressIndicator(
valueColor: AlwaysStoppedAnimation<Color>(spinnerColor),
strokeWidth: strokeWidth,
),
),
if (message != null) ...[
// Afficher le texte seulement si message n'est pas null
const SizedBox(height: 24),
Text(
message!,
style: TextStyle(
fontSize: 16,
fontWeight: FontWeight.bold,
color: textColor,
),
textAlign: TextAlign.center,
),
],
],
),
),
);
}
/// Méthode statique pour afficher l'overlay de chargement
static Future<T> show<T>({
required BuildContext context,
required Future<T> future,
String? message,
double spinnerSize = 60.0,
double strokeWidth = 5.0,
}) async {
// Afficher l'overlay
final overlayEntry = OverlayEntry(
builder: (context) => LoadingOverlay(
message: message,
spinnerSize: spinnerSize,
strokeWidth: strokeWidth,
),
);
Overlay.of(context).insert(overlayEntry);
try {
// Attendre que le future se termine
final result = await future;
// Supprimer l'overlay
overlayEntry.remove();
return result;
} catch (e) {
// En cas d'erreur, supprimer l'overlay et relancer l'erreur
overlayEntry.remove();
rethrow;
}
}
}