diff --git a/lib/theme/theme_bloc.dart b/lib/theme/theme_bloc.dart new file mode 100644 index 0000000..0e4a1a2 --- /dev/null +++ b/lib/theme/theme_bloc.dart @@ -0,0 +1,17 @@ +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:equatable/equatable.dart'; + +part 'theme_events.dart'; +part 'theme_state.dart'; + +class ThemeBloc extends Bloc { + final AppTheme initialAppTheme; + ThemeBloc({required this.initialAppTheme}) + : super( + ThemeState(status: ThemeStatus.success, appTheme: initialAppTheme), + ) { + on((event, emit) async { + emit(state.copyWith(appTheme: event.appTheme)); + }); + } +} diff --git a/lib/theme/theme_events.dart b/lib/theme/theme_events.dart new file mode 100644 index 0000000..958e15c --- /dev/null +++ b/lib/theme/theme_events.dart @@ -0,0 +1,17 @@ +part of 'theme_bloc.dart'; + +abstract class ThemeEvent extends Equatable { + const ThemeEvent(); + + @override + List get props => []; +} + +class ChangeThemeEvent extends ThemeEvent { + const ChangeThemeEvent({required this.appTheme}); + + final AppTheme appTheme; + + @override + List get props => [appTheme]; +} diff --git a/lib/theme/theme_state.dart b/lib/theme/theme_state.dart new file mode 100644 index 0000000..588ef78 --- /dev/null +++ b/lib/theme/theme_state.dart @@ -0,0 +1,30 @@ +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}); + + final ThemeStatus status; + final AppTheme appTheme; + + @override + List get props => [status, appTheme]; + + ThemeState copyWith({ThemeStatus? status, AppTheme? appTheme}) { + return ThemeState( + status: status ?? this.status, + appTheme: appTheme ?? this.appTheme, + ); + } +}