Clean project: remove test files, debug logs, and add documentation
This commit is contained in:
102
unionflow-mobile-apps/lib/core/l10n/locale_provider.dart
Normal file
102
unionflow-mobile-apps/lib/core/l10n/locale_provider.dart
Normal file
@@ -0,0 +1,102 @@
|
||||
/// Provider pour gérer la locale de l'application
|
||||
library locale_provider;
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
import '../utils/logger.dart';
|
||||
|
||||
/// Provider pour la gestion de la locale
|
||||
class LocaleProvider extends ChangeNotifier {
|
||||
static const String _localeKey = 'app_locale';
|
||||
|
||||
Locale _locale = const Locale('fr');
|
||||
|
||||
/// Locale actuelle
|
||||
Locale get locale => _locale;
|
||||
|
||||
/// Locales supportées
|
||||
static const List<Locale> supportedLocales = [
|
||||
Locale('fr'),
|
||||
Locale('en'),
|
||||
];
|
||||
|
||||
/// Initialiser la locale depuis les préférences
|
||||
Future<void> initialize() async {
|
||||
try {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
final localeCode = prefs.getString(_localeKey);
|
||||
|
||||
if (localeCode != null) {
|
||||
_locale = Locale(localeCode);
|
||||
AppLogger.info('Locale chargée: $localeCode');
|
||||
} else {
|
||||
AppLogger.info('Locale par défaut: fr');
|
||||
}
|
||||
|
||||
notifyListeners();
|
||||
} catch (e, stackTrace) {
|
||||
AppLogger.error(
|
||||
'Erreur lors du chargement de la locale',
|
||||
error: e,
|
||||
stackTrace: stackTrace,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/// Changer la locale
|
||||
Future<void> setLocale(Locale locale) async {
|
||||
if (!supportedLocales.contains(locale)) {
|
||||
AppLogger.warning('Locale non supportée: ${locale.languageCode}');
|
||||
return;
|
||||
}
|
||||
|
||||
if (_locale == locale) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
_locale = locale;
|
||||
notifyListeners();
|
||||
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
await prefs.setString(_localeKey, locale.languageCode);
|
||||
|
||||
AppLogger.info('Locale changée: ${locale.languageCode}');
|
||||
AppLogger.userAction('Change language', data: {'locale': locale.languageCode});
|
||||
} catch (e, stackTrace) {
|
||||
AppLogger.error(
|
||||
'Erreur lors du changement de locale',
|
||||
error: e,
|
||||
stackTrace: stackTrace,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/// Basculer entre FR et EN
|
||||
Future<void> toggleLocale() async {
|
||||
final newLocale = _locale.languageCode == 'fr'
|
||||
? const Locale('en')
|
||||
: const Locale('fr');
|
||||
await setLocale(newLocale);
|
||||
}
|
||||
|
||||
/// Obtenir le nom de la langue actuelle
|
||||
String get currentLanguageName {
|
||||
switch (_locale.languageCode) {
|
||||
case 'fr':
|
||||
return 'Français';
|
||||
case 'en':
|
||||
return 'English';
|
||||
default:
|
||||
return 'Français';
|
||||
}
|
||||
}
|
||||
|
||||
/// Vérifier si la locale est française
|
||||
bool get isFrench => _locale.languageCode == 'fr';
|
||||
|
||||
/// Vérifier si la locale est anglaise
|
||||
bool get isEnglish => _locale.languageCode == 'en';
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user