theme work
This commit is contained in:
@@ -1,17 +1,30 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:flux/data/enums.dart';
|
||||
import 'package:get_it/get_it.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
part 'theme_events.dart';
|
||||
part 'theme_state.dart';
|
||||
|
||||
class ThemeBloc extends Bloc<ThemeEvent, ThemeState> {
|
||||
final AppTheme initialAppTheme;
|
||||
ThemeBloc({required this.initialAppTheme})
|
||||
: super(
|
||||
ThemeState(status: ThemeStatus.success, appTheme: initialAppTheme),
|
||||
) {
|
||||
static const String _savedThemeKey = "themeModeSetting";
|
||||
final SharedPreferences _prefs = GetIt.I.get<SharedPreferences>();
|
||||
ThemeBloc() : super(ThemeState(themeMode: ThemeMode.system)) {
|
||||
on<LoadThemeEvent>((event, emit) {
|
||||
String savedTheme = _prefs.getString(_savedThemeKey) ?? 'system';
|
||||
emit(
|
||||
state.copyWith(
|
||||
themeMode: AppThemeMode.values
|
||||
.firstWhere((test) => test.value == savedTheme)
|
||||
.themeMode,
|
||||
),
|
||||
);
|
||||
});
|
||||
on<ChangeThemeEvent>((event, emit) async {
|
||||
emit(state.copyWith(appTheme: event.appTheme));
|
||||
await _prefs.setString(_savedThemeKey, event.appThemeMode.value);
|
||||
emit(state.copyWith(themeMode: event.appThemeMode.themeMode));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,11 +7,13 @@ abstract class ThemeEvent extends Equatable {
|
||||
List<Object> get props => [];
|
||||
}
|
||||
|
||||
class ChangeThemeEvent extends ThemeEvent {
|
||||
const ChangeThemeEvent({required this.appTheme});
|
||||
final class LoadThemeEvent extends ThemeEvent {}
|
||||
|
||||
final AppTheme appTheme;
|
||||
final class ChangeThemeEvent extends ThemeEvent {
|
||||
final AppThemeMode appThemeMode;
|
||||
|
||||
const ChangeThemeEvent(this.appThemeMode);
|
||||
|
||||
@override
|
||||
List<Object> get props => [appTheme];
|
||||
List<Object> get props => [appThemeMode];
|
||||
}
|
||||
|
||||
@@ -1,30 +1,14 @@
|
||||
part of 'theme_bloc.dart';
|
||||
|
||||
enum ThemeStatus { initial, success }
|
||||
|
||||
enum AppTheme {
|
||||
dark(name: 'dark'),
|
||||
light(name: 'light'),
|
||||
system(name: 'system');
|
||||
|
||||
final String name;
|
||||
|
||||
const AppTheme({required this.name});
|
||||
}
|
||||
|
||||
class ThemeState extends Equatable {
|
||||
const ThemeState({required this.status, required this.appTheme});
|
||||
const ThemeState({required this.themeMode});
|
||||
|
||||
final ThemeStatus status;
|
||||
final AppTheme appTheme;
|
||||
final ThemeMode themeMode;
|
||||
|
||||
@override
|
||||
List<Object?> get props => [status, appTheme];
|
||||
List<Object?> get props => [themeMode];
|
||||
|
||||
ThemeState copyWith({ThemeStatus? status, AppTheme? appTheme}) {
|
||||
return ThemeState(
|
||||
status: status ?? this.status,
|
||||
appTheme: appTheme ?? this.appTheme,
|
||||
);
|
||||
ThemeState copyWith({ThemeMode? themeMode}) {
|
||||
return ThemeState(themeMode: themeMode ?? this.themeMode);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user