This commit is contained in:
2025-08-06 17:26:25 +05:30
parent 2fdef7c850
commit c4d4261afc
33 changed files with 772 additions and 935 deletions

View File

@@ -0,0 +1,50 @@
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter/material.dart';
import 'theme_state.dart';
import 'package:kmobile/config/theme_type.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:kmobile/config/themes.dart';
class ThemeCubit extends Cubit<ThemeState> {
ThemeCubit()
: super(ThemeState(
lightTheme: AppThemes.getLightTheme(ThemeType.violet),
themeMode: ThemeMode.light,
themeType: ThemeType.violet,
)) {
loadTheme();
}
Future<void> loadTheme() async {
final prefs = await SharedPreferences.getInstance();
final themeIndex = prefs.getInt('theme_type') ?? 0;
final isDark = prefs.getBool('is_dark_mode') ?? false;
final type = ThemeType.values[themeIndex];
emit(state.copyWith(
lightTheme: AppThemes.getLightTheme(type),
themeMode: isDark ? ThemeMode.dark : ThemeMode.light,
themeType: type,
));
}
Future<void> changeTheme(ThemeType type) async {
final prefs = await SharedPreferences.getInstance();
await prefs.setInt('theme_type', type.index);
emit(state.copyWith(
lightTheme: AppThemes.getLightTheme(type),
themeType: type,
));
}
Future<void> toggleDarkMode(bool isDark) async {
final prefs = await SharedPreferences.getInstance();
await prefs.setBool('is_dark_mode', isDark);
emit(state.copyWith(
themeMode: isDark ? ThemeMode.dark : ThemeMode.light,
));
}
}

View File

@@ -0,0 +1,27 @@
import 'package:flutter/material.dart';
import 'package:kmobile/config/theme_type.dart';
class ThemeState {
final ThemeData lightTheme;
final ThemeMode themeMode;
final ThemeType themeType;
ThemeState({
required this.lightTheme,
required this.themeMode,
required this.themeType,
});
ThemeState copyWith({
ThemeData? lightTheme,
ThemeMode? themeMode,
ThemeType? themeType,
}) {
return ThemeState(
lightTheme: lightTheme ?? this.lightTheme,
themeMode: themeMode ?? this.themeMode,
themeType: themeType ?? this.themeType,
);
}
bool get isDarkMode => themeMode == ThemeMode.dark;
}