uaestats_fe/lib/presentation/components/indicators/locale_provider.dart

42 lines
1.1 KiB
Dart
Executable File

import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:shared_preferences/shared_preferences.dart';
class LocaleNotifier extends StateNotifier<Locale> {
LocaleNotifier() : super(const Locale('en')) {
_loadSavedLocale();
}
static const _storageKey = 'preferred_language';
Future<void> _loadSavedLocale() async {
final prefs = await SharedPreferences.getInstance();
final code = prefs.getString(_storageKey);
if (code == 'ar' || code == 'en') {
state = Locale(code!);
}
}
Future<void> _persistLocale(String languageCode) async {
final prefs = await SharedPreferences.getInstance();
await prefs.setString(_storageKey, languageCode);
}
Future<void> toggle() async {
final nextCode = state.languageCode == 'en' ? 'ar' : 'en';
state = Locale(nextCode);
await _persistLocale(nextCode);
}
Future<void> toggleLocale() => toggle();
Future<void> setLocale(Locale locale) async {
state = locale;
await _persistLocale(locale.languageCode);
}
}
final localeProvider = StateNotifierProvider<LocaleNotifier, Locale>(
(ref) => LocaleNotifier(),
);