Aidra Connect 10.0.2+16
Aidra Connect Mobile Application
Loading...
Searching...
No Matches
language_cubit.dart
Go to the documentation of this file.
1import 'package:flutter/material.dart';
2import 'package:flutter_bloc/flutter_bloc.dart';
3import 'package:shared_preferences/shared_preferences.dart';
4
5// States
6abstract class LanguageState {}
7
8class LanguageInitial extends LanguageState {}
9
10class LanguageLoaded extends LanguageState {
11 final Locale locale;
12 final String languageCode;
13
14 LanguageLoaded(this.locale) : languageCode = locale.languageCode;
15}
16
17// Cubit
18class LanguageCubit extends Cubit<LanguageState> {
19 LanguageCubit() : super(LanguageInitial()) {
21 }
22
23 static const String LANGUAGE_CODE = 'languageCode';
24
25 void loadSavedLanguage() async {
26 final prefs = await SharedPreferences.getInstance();
27 final String languageCode = prefs.getString(LANGUAGE_CODE) ?? 'en';
28 emit(LanguageLoaded(Locale(languageCode)));
29 }
30
31 void changeLanguage(String languageCode) async {
32 final prefs = await SharedPreferences.getInstance();
33 await prefs.setString(LANGUAGE_CODE, languageCode);
34 emit(LanguageLoaded(Locale(languageCode)));
35 }
36
37 void toggleLanguage() async {
38 if (state is LanguageLoaded) {
39 final currentLocale = (state as LanguageLoaded).locale;
40 final newLanguageCode = currentLocale.languageCode == 'en' ? 'ar' : 'en';
41 changeLanguage(newLanguageCode);
42 }
43 }
44}
final Locale locale
void changeLanguage(String languageCode) async
static const String LANGUAGE_CODE
abstract class LanguageState locale
final String languageCode