fix: Récupérer l'opération active depuis la table operations
- Corrige l'erreur SQL 'Unknown column fk_operation in users' - L'opération active est récupérée depuis operations.chk_active = 1 - Jointure avec users pour filtrer par entité de l'admin créateur - Query: SELECT o.id FROM operations o INNER JOIN users u ON u.fk_entite = o.fk_entite WHERE u.id = ? AND o.chk_active = 1
This commit is contained in:
100
app/lib/app.dart
100
app/lib/app.dart
@@ -2,7 +2,6 @@ import 'package:flutter/material.dart';
|
||||
import 'package:flutter/foundation.dart' show kIsWeb;
|
||||
import 'package:flutter_localizations/flutter_localizations.dart';
|
||||
import 'package:geosector_app/core/theme/app_theme.dart';
|
||||
import 'package:geosector_app/core/services/theme_service.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
// Import conditionnel pour le web
|
||||
import 'package:universal_html/html.dart' as html;
|
||||
@@ -38,7 +37,6 @@ final membreRepository = MembreRepository();
|
||||
final amicaleRepository = AmicaleRepository();
|
||||
final syncService = SyncService(userRepository: userRepository);
|
||||
final connectivityService = ConnectivityService();
|
||||
final themeService = ThemeService.instance;
|
||||
|
||||
class GeosectorApp extends StatefulWidget {
|
||||
const GeosectorApp({super.key});
|
||||
@@ -168,64 +166,56 @@ class _GeosectorAppState extends State<GeosectorApp> with WidgetsBindingObserver
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return AnimatedBuilder(
|
||||
animation: themeService,
|
||||
return MaterialApp.router(
|
||||
title: 'GeoSector',
|
||||
theme: AppTheme.lightTheme,
|
||||
// Pas de darkTheme - thème clair forcé pour éviter les problèmes d'affichage
|
||||
themeMode: ThemeMode.light,
|
||||
routerConfig: _createRouter(),
|
||||
debugShowCheckedModeBanner: false,
|
||||
// Builder pour appliquer le theme responsive à toute l'app
|
||||
builder: (context, child) {
|
||||
return MaterialApp.router(
|
||||
title: 'GeoSector',
|
||||
theme: AppTheme.lightTheme,
|
||||
darkTheme: AppTheme.darkTheme,
|
||||
themeMode: themeService.themeMode,
|
||||
routerConfig: _createRouter(),
|
||||
debugShowCheckedModeBanner: false,
|
||||
// Builder pour appliquer le theme responsive à toute l'app
|
||||
builder: (context, child) {
|
||||
return LayoutBuilder(
|
||||
builder: (context, constraints) {
|
||||
// Récupérer le theme actuel (clair ou sombre)
|
||||
final brightness = Theme.of(context).brightness;
|
||||
final textColor = brightness == Brightness.light
|
||||
? AppTheme.textLightColor
|
||||
: AppTheme.textDarkColor;
|
||||
|
||||
// Débogage en mode développement
|
||||
final width = constraints.maxWidth;
|
||||
final scaleFactor = AppTheme.getFontScaleFactor(width);
|
||||
|
||||
// Afficher le debug uniquement lors du changement de taille
|
||||
if (width < AppTheme.breakpointMobileSmall) {
|
||||
debugPrint('📱 Mode: Très petit mobile (${width.toStringAsFixed(0)}px) → Facteur: ×$scaleFactor');
|
||||
} else if (width < AppTheme.breakpointMobile) {
|
||||
debugPrint('📱 Mode: Mobile (${width.toStringAsFixed(0)}px) → Facteur: ×$scaleFactor');
|
||||
} else if (width < AppTheme.breakpointTablet) {
|
||||
debugPrint('📱 Mode: Tablette (${width.toStringAsFixed(0)}px) → Facteur: ×$scaleFactor');
|
||||
} else {
|
||||
debugPrint('🖥️ Mode: Desktop (${width.toStringAsFixed(0)}px) → Facteur: ×$scaleFactor');
|
||||
}
|
||||
|
||||
// Appliquer le TextTheme responsive
|
||||
return Theme(
|
||||
data: Theme.of(context).copyWith(
|
||||
textTheme: AppTheme.getResponsiveTextTheme(context, textColor),
|
||||
),
|
||||
child: child ?? const SizedBox.shrink(),
|
||||
);
|
||||
},
|
||||
return LayoutBuilder(
|
||||
builder: (context, constraints) {
|
||||
// Thème clair uniquement
|
||||
const textColor = AppTheme.textLightColor;
|
||||
|
||||
// Débogage en mode développement
|
||||
final width = constraints.maxWidth;
|
||||
final scaleFactor = AppTheme.getFontScaleFactor(width);
|
||||
|
||||
// Afficher le debug uniquement lors du changement de taille
|
||||
if (width < AppTheme.breakpointMobileSmall) {
|
||||
debugPrint('📱 Mode: Très petit mobile (${width.toStringAsFixed(0)}px) → Facteur: ×$scaleFactor');
|
||||
} else if (width < AppTheme.breakpointMobile) {
|
||||
debugPrint('📱 Mode: Mobile (${width.toStringAsFixed(0)}px) → Facteur: ×$scaleFactor');
|
||||
} else if (width < AppTheme.breakpointTablet) {
|
||||
debugPrint('📱 Mode: Tablette (${width.toStringAsFixed(0)}px) → Facteur: ×$scaleFactor');
|
||||
} else {
|
||||
debugPrint('🖥️ Mode: Desktop (${width.toStringAsFixed(0)}px) → Facteur: ×$scaleFactor');
|
||||
}
|
||||
|
||||
// Appliquer le TextTheme responsive
|
||||
return Theme(
|
||||
data: Theme.of(context).copyWith(
|
||||
textTheme: AppTheme.getResponsiveTextTheme(context, textColor),
|
||||
),
|
||||
child: child ?? const SizedBox.shrink(),
|
||||
);
|
||||
},
|
||||
// Configuration des localisations pour le français
|
||||
localizationsDelegates: const [
|
||||
GlobalMaterialLocalizations.delegate,
|
||||
GlobalWidgetsLocalizations.delegate,
|
||||
GlobalCupertinoLocalizations.delegate,
|
||||
],
|
||||
supportedLocales: const [
|
||||
Locale('fr', 'FR'), // Français comme langue principale
|
||||
Locale('en', 'US'), // Anglais en fallback
|
||||
],
|
||||
locale: const Locale('fr', 'FR'), // Forcer le français par défaut
|
||||
);
|
||||
},
|
||||
// Configuration des localisations pour le français
|
||||
localizationsDelegates: const [
|
||||
GlobalMaterialLocalizations.delegate,
|
||||
GlobalWidgetsLocalizations.delegate,
|
||||
GlobalCupertinoLocalizations.delegate,
|
||||
],
|
||||
supportedLocales: const [
|
||||
Locale('fr', 'FR'), // Français comme langue principale
|
||||
Locale('en', 'US'), // Anglais en fallback
|
||||
],
|
||||
locale: const Locale('fr', 'FR'), // Forcer le français par défaut
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user