Aidra Connect 10.0.2+16
Aidra Connect Mobile Application
Loading...
Searching...
No Matches
theme_cubit.dart
Go to the documentation of this file.
1import 'package:flutter/material.dart';
2import 'package:equatable/equatable.dart';
3import 'package:flutter_bloc/flutter_bloc.dart';
4import 'package:shared_preferences/shared_preferences.dart';
6class ThemeModeState extends Equatable {
7 final ThemeMode themeMode;
8
9 const ThemeModeState({required this.themeMode});
10
11 @override
12 List<Object?> get props => [themeMode];
13}
14
15// theme_mode_event.dart
16abstract class ThemeModeEvent extends Equatable {
17 const ThemeModeEvent();
18
19 @override
20 List<Object?> get props => [];
21}
22
23class LoadThemeMode extends ThemeModeEvent {}
24
25class ChangeThemeMode extends ThemeModeEvent {
26 final ThemeMode themeMode;
27
28 const ChangeThemeMode(this.themeMode);
29
30 @override
31 List<Object?> get props => [themeMode];
32}
33
34class ThemeModeBloc extends Bloc<ThemeModeEvent, ThemeModeState> {
35 static const String _themeModeKey = 'theme_mode';
36
37 ThemeModeBloc() : super(const ThemeModeState(themeMode: ThemeMode.system)) {
38 on<LoadThemeMode>(_onLoadThemeMode);
39 on<ChangeThemeMode>(_onChangeThemeMode);
40 }
41
42 Future<void> _onLoadThemeMode(
43 LoadThemeMode event,
44 Emitter<ThemeModeState> emit,
45 ) async {
46 final prefs = await SharedPreferences.getInstance();
47 final savedThemeMode = prefs.getString(_themeModeKey);
48 if (savedThemeMode == null) {
49 emit(const ThemeModeState(themeMode: ThemeMode.system));
50 return;
51 }
52
53 final themeMode = _getThemeModeFromString(savedThemeMode);
55 }
56
57 Future<void> _onChangeThemeMode(
58 ChangeThemeMode event,
59 Emitter<ThemeModeState> emit,
60 ) async {
61 final prefs = await SharedPreferences.getInstance();
62 await prefs.setString(_themeModeKey, event.themeMode.toString());
63 emit(ThemeModeState(themeMode: event.themeMode));
64 }
65
66 ThemeMode _getThemeModeFromString(String themeModeString) {
67 switch (themeModeString) {
68 case 'ThemeMode.light':
69 return ThemeMode.light;
70 case 'ThemeMode.dark':
71 return ThemeMode.dark;
72 default:
73 return ThemeMode.system;
74 }
75 }
76}
ThemeMode _getThemeModeFromString(String themeModeString)
Future< void > _onChangeThemeMode(ChangeThemeMode event, Emitter< ThemeModeState > emit,) async
Future< void > _onLoadThemeMode(LoadThemeMode event, Emitter< ThemeModeState > emit,) async
const ThemeModeState({required this.themeMode})
final ThemeMode themeMode
class ThemeModeState extends Equatable ThemeModeEvent()
const ChangeThemeMode(this.themeMode)
final ThemeMode themeMode
override List< Object?> get props
const ThemeModeState({required this.themeMode})
abstract class UseCase< Type, Params > props