sapaly_store/lib/models/settings_model.dart

89 lines
3.1 KiB
Dart

import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:provider/provider.dart';
import 'package:shared_preferences/shared_preferences.dart';
const kDefaultLanguage = 'ru';
class SettingsModel extends ChangeNotifier {
String _language = kDefaultLanguage;
static AppLocalizations? _localization;
static Future<void> initLocalization(String l) async {
_localization =
await AppLocalizations.delegate.load(Locale(l, l == 'en' ? 'US' : ''));
await AppLocalizations.delegate.load(Locale(l));
}
Future<void> setLanguage(String l) async {
_language = l;
await initLocalization(l);
var prefs = await SharedPreferences.getInstance();
await prefs.setString('language', _language);
notifyListeners();
}
String get currentLanguage => _language;
Locale get language {
switch (_language) {
case 'ru':
return const Locale('ru', '');
case 'en':
return const Locale('en', 'US');
case 'tk':
return const Locale('tk', '');
default:
return const Locale('tk', '');
}
}
void launch(SharedPreferences prefs) {
_language = prefs.getString('language') ?? _language;
notifyListeners();
}
SettingsModel(SharedPreferences prefs) {
launch(prefs);
}
static SettingsModel of(BuildContext context, [bool listen = false]) {
return Provider.of<SettingsModel>(context, listen: listen);
}
}
extension LocalMessageExt on String {
String get translation {
return <String, String?>{
"categories": SettingsModel._localization?.categories,
"searchHint": SettingsModel._localization?.searchHint,
"email": SettingsModel._localization?.email,
"enter_your_email": SettingsModel._localization?.enter_your_email,
"password": SettingsModel._localization?.password,
"enter_your_password":
SettingsModel._localization?.enter_your_password,
"enter_your_password_here":
SettingsModel._localization?.enter_your_password_here,
"login": SettingsModel._localization?.login,
"or": SettingsModel._localization?.or,
"register": SettingsModel._localization?.register,
"your_phone_number": SettingsModel._localization?.your_phone_number,
"repeat_password": SettingsModel._localization?.repeat_password,
"repeat_password_to_confirm":
SettingsModel._localization?.repeat_password_to_confirm,
"add_to_cart": SettingsModel._localization?.add_to_cart,
"home": SettingsModel._localization?.home,
"about_us": SettingsModel._localization?.about_us,
"sales": SettingsModel._localization?.sales,
"new_arrival": SettingsModel._localization?.new_arrival,
"shops": SettingsModel._localization?.shops,
"contacts": SettingsModel._localization?.contacts,
"settings": SettingsModel._localization?.settings,
"currentLang": SettingsModel._localization?.currentLang,
}[this] ??
this;
}
}