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;
}

View File

@@ -108,10 +108,10 @@ class LoginScreenState extends State<LoginScreen>
width: 150,
height: 150,
errorBuilder: (context, error, stackTrace) {
return const Icon(
return Icon(
Icons.account_balance,
size: 100,
color: Colors.blue,
color: Theme.of(context).primaryColor,
);
},
),
@@ -123,7 +123,7 @@ class LoginScreenState extends State<LoginScreen>
style: TextStyle(
fontSize: 32,
fontWeight: FontWeight.bold,
color: Colors.blue,
color: Theme.of(context).primaryColor,
),
),
const SizedBox(height: 48),
@@ -136,7 +136,7 @@ class LoginScreenState extends State<LoginScreen>
border: OutlineInputBorder(),
isDense: true,
filled: true,
fillColor: Colors.white,
fillColor: Theme.of(context).scaffoldBackgroundColor,
enabledBorder: OutlineInputBorder(
borderSide: BorderSide(color: Colors.black),
),
@@ -166,7 +166,7 @@ class LoginScreenState extends State<LoginScreen>
border: const OutlineInputBorder(),
isDense: true,
filled: true,
fillColor: Colors.white,
fillColor: Theme.of(context).scaffoldBackgroundColor,
enabledBorder: const OutlineInputBorder(
borderSide: BorderSide(color: Colors.black),
),
@@ -202,8 +202,8 @@ class LoginScreenState extends State<LoginScreen>
style: ElevatedButton.styleFrom(
shape: const StadiumBorder(),
padding: const EdgeInsets.symmetric(vertical: 16),
backgroundColor: Colors.white,
foregroundColor: Colors.blueAccent,
backgroundColor: Theme.of(context).scaffoldBackgroundColor,
foregroundColor: Theme.of(context).primaryColorDark,
side: const BorderSide(color: Colors.black, width: 1),
elevation: 0,
),
@@ -242,7 +242,7 @@ class LoginScreenState extends State<LoginScreen>
style: OutlinedButton.styleFrom(
shape: const StadiumBorder(),
padding: const EdgeInsets.symmetric(vertical: 16),
backgroundColor: Colors.lightBlue[100],
backgroundColor: Theme.of(context).primaryColorLight,
foregroundColor: Colors.black,
),
child: Text(AppLocalizations.of(context).register),

View File

@@ -197,7 +197,7 @@ class _MPinScreenState extends State<MPinScreen> {
key == '<' ? '' : key,
style: TextStyle(
fontSize: 20,
color: key == 'Enter' ? Colors.blue : Colors.black,
color: key == 'Enter' ? Theme.of(context).primaryColor : Colors.black,
),
),
),

View File

@@ -43,10 +43,10 @@ class _WelcomeScreenState extends State<WelcomeScreen> {
children: [
Text(
AppLocalizations.of(context).kconnect,
style: const TextStyle(
style: TextStyle(
fontSize: 36,
fontWeight: FontWeight.bold,
color: Colors.white,
color: Theme.of(context).dialogBackgroundColor,
letterSpacing: 1.5,
),
),
@@ -54,9 +54,9 @@ class _WelcomeScreenState extends State<WelcomeScreen> {
Text(
AppLocalizations.of(context).kccBankFull,
textAlign: TextAlign.center,
style: const TextStyle(
style: TextStyle(
fontSize: 18,
color: Colors.white,
color: Theme.of(context).dialogBackgroundColor,
letterSpacing: 1.2,
),
),
@@ -65,12 +65,12 @@ class _WelcomeScreenState extends State<WelcomeScreen> {
),
/// 🔹 Loading Spinner at Bottom
const Positioned(
Positioned(
bottom: 40,
left: 0,
right: 0,
child: Center(
child: CircularProgressIndicator(color: Colors.white),
child: CircularProgressIndicator(color: Theme.of(context).scaffoldBackgroundColor),
),
),
],