Skip to content

Commit dfbad3e

Browse files
committed
Implemented language bloc and added required dependencies.
1 parent 82ebc96 commit dfbad3e

File tree

5 files changed

+109
-8
lines changed

5 files changed

+109
-8
lines changed

lib/Blocs/bloc_provider_list.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import 'package:flood_mobile/Blocs/language_bloc/language_bloc.dart';
12
import 'package:flutter_bloc/flutter_bloc.dart';
23
import 'package:flood_mobile/Blocs/api_bloc/api_bloc.dart';
34
import 'package:flood_mobile/Blocs/filter_torrent_bloc/filter_torrent_bloc.dart';
@@ -51,5 +52,9 @@ class BlocProviders {
5152
BlocProvider<OnBoardingPageColorBloc>(
5253
create: (context) => OnBoardingPageColorBloc(),
5354
),
55+
BlocProvider<LanguageBloc>(
56+
create: (context) => LanguageBloc(),
57+
lazy: false,
58+
),
5459
];
5560
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import 'dart:ui';
2+
import 'package:bloc/bloc.dart';
3+
import 'package:equatable/equatable.dart';
4+
import 'package:shared_preferences/shared_preferences.dart';
5+
6+
part 'language_event.dart';
7+
part 'language_state.dart';
8+
9+
class LanguageBloc extends Bloc<LanguageEvent, LanguageState> {
10+
LanguageBloc() : super(LanguageState.initial()) {
11+
on<ChangeLanguageEvent>(_handleChangeLanguageEvent);
12+
on<GetPreviousLanguageEvent>(_handleGetPreviousSetLanguage);
13+
}
14+
15+
Future<void> _handleChangeLanguageEvent(
16+
ChangeLanguageEvent event, Emitter<LanguageState> emit) async {
17+
await storeCurrentLang(event.languageCode);
18+
emit(state.copyWith(event.languageCode));
19+
}
20+
21+
void _handleGetPreviousSetLanguage(
22+
GetPreviousLanguageEvent event, Emitter<LanguageState> emit) async {
23+
Locale? storedLanguageCode = await getPreviousLang();
24+
emit(state.copyWith(storedLanguageCode));
25+
}
26+
27+
Future<Locale?> getPreviousLang() async {
28+
try {
29+
final prefs = await SharedPreferences.getInstance();
30+
if (prefs.getString('languageCode') != 'null')
31+
return Locale(prefs.getString('languageCode')!);
32+
else {
33+
return null;
34+
}
35+
} catch (error) {
36+
print('Error retrieving language code from SharedPreferences: $error');
37+
}
38+
return null;
39+
}
40+
41+
Future<void> storeCurrentLang(Locale? code) async {
42+
try {
43+
final prefs = await SharedPreferences.getInstance();
44+
if (code == null)
45+
await prefs.setString('languageCode', 'null');
46+
else
47+
await prefs.setString('languageCode', code.languageCode);
48+
} catch (error) {
49+
print('Error retrieving language code from SharedPreferences: $error');
50+
}
51+
}
52+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
part of 'language_bloc.dart';
2+
3+
abstract class LanguageEvent extends Equatable {
4+
const LanguageEvent();
5+
6+
@override
7+
List<Object?> get props => [];
8+
}
9+
10+
class ChangeLanguageEvent extends LanguageEvent {
11+
final Locale? languageCode;
12+
13+
const ChangeLanguageEvent(this.languageCode);
14+
15+
@override
16+
List<Object?> get props => [languageCode];
17+
}
18+
19+
class GetPreviousLanguageEvent extends LanguageEvent {}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
part of 'language_bloc.dart';
2+
3+
class LanguageState extends Equatable {
4+
final Locale? locale;
5+
6+
LanguageState(this.locale);
7+
8+
factory LanguageState.initial() => LanguageState(null);
9+
10+
LanguageState copyWith(Locale? locale) => LanguageState(locale);
11+
12+
@override
13+
List<Object?> get props => [locale];
14+
}

lib/main.dart

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import 'package:awesome_notifications/awesome_notifications.dart';
2+
import 'package:flood_mobile/Blocs/language_bloc/language_bloc.dart';
23
import 'package:flood_mobile/Notifications/notification_controller.dart';
34
import 'package:flood_mobile/Blocs/theme_bloc/theme_bloc.dart';
45
import 'package:flood_mobile/Notifications/notification_channels.dart';
@@ -9,6 +10,7 @@ import 'package:flutter_downloader/flutter_downloader.dart';
910
import 'package:flutter_keyboard_visibility/flutter_keyboard_visibility.dart';
1011
import 'package:flood_mobile/Route/route_generator.dart';
1112
import 'package:flood_mobile/Blocs/bloc_provider_list.dart';
13+
import 'package:flood_mobile/l10n/l10n.dart';
1214

1315
Future<void> main() async {
1416
WidgetsFlutterBinding.ensureInitialized();
@@ -40,14 +42,23 @@ class MyApp extends StatelessWidget {
4042
]);
4143
return MultiBlocProvider(
4244
providers: BlocProviders.multiBlocProviders,
43-
child: KeyboardDismissOnTap(
44-
child: MaterialApp(
45-
navigatorKey: NavigationService.navigatorKey,
46-
debugShowCheckedModeBanner: false,
47-
title: 'Flood Mobile',
48-
onGenerateInitialRoutes: RouteGenerator.onGenerateInitialRoutes,
49-
onGenerateRoute: RouteGenerator.generateRoute,
50-
),
45+
child: BlocBuilder<LanguageBloc, LanguageState>(
46+
builder: (context, state) {
47+
BlocProvider.of<LanguageBloc>(context, listen: false)
48+
.add(GetPreviousLanguageEvent());
49+
return KeyboardDismissOnTap(
50+
child: MaterialApp(
51+
locale: state.locale,
52+
localizationsDelegates: AppLocalizations.localizationsDelegates,
53+
supportedLocales: AppLocalizations.supportedLocales,
54+
navigatorKey: NavigationService.navigatorKey,
55+
debugShowCheckedModeBanner: false,
56+
title: 'Flood Mobile',
57+
onGenerateInitialRoutes: RouteGenerator.onGenerateInitialRoutes,
58+
onGenerateRoute: RouteGenerator.generateRoute,
59+
),
60+
);
61+
},
5162
),
5263
);
5364
}

0 commit comments

Comments
 (0)