42 lines
1.1 KiB
Dart
Executable File
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(),
|
|
);
|