From aa9cd45e306a520bf7e276ed25d56ac3c3ef064a Mon Sep 17 00:00:00 2001 From: yousef_osama11 Date: Mon, 23 Feb 2026 20:11:51 +0200 Subject: [PATCH 1/7] fix: month calculation for getting saving percentage --- lib/data/repository/user_money_repository.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/data/repository/user_money_repository.dart b/lib/data/repository/user_money_repository.dart index 1855470..fb7d9ee 100644 --- a/lib/data/repository/user_money_repository.dart +++ b/lib/data/repository/user_money_repository.dart @@ -108,7 +108,7 @@ class UserRepositoryImpl implements UserMoneyRepository { Future getSavingSpendingPercentage(int month, int year) async { _validateMonth(month); final isJanuary = month == 1; - final previousMonth = isJanuary ? 12 : month; + final previousMonth = isJanuary ? 12 : month - 1; final previousYear = isJanuary ? year - 1 : year; final [ From 18f6e902d481500ecf447d0ea92cf0c605e5dff0 Mon Sep 17 00:00:00 2001 From: yousef_osama11 Date: Mon, 23 Feb 2026 20:12:33 +0200 Subject: [PATCH 2/7] refactor: rounding percentage of home screen --- lib/design_system/widgets/top_spending_card.dart | 5 +---- lib/presentation/home/widget/current_balance.dart | 6 +++++- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/lib/design_system/widgets/top_spending_card.dart b/lib/design_system/widgets/top_spending_card.dart index b4f4918..4160cd4 100644 --- a/lib/design_system/widgets/top_spending_card.dart +++ b/lib/design_system/widgets/top_spending_card.dart @@ -52,8 +52,5 @@ class TopSpendingCard extends StatelessWidget { } String _formatPercentage(double value) { - if (value % 1 == 0) { - return value.toInt().toString(); - } - return value.toString(); + return value.round().toString(); } diff --git a/lib/presentation/home/widget/current_balance.dart b/lib/presentation/home/widget/current_balance.dart index f622d2d..a0083bd 100644 --- a/lib/presentation/home/widget/current_balance.dart +++ b/lib/presentation/home/widget/current_balance.dart @@ -81,7 +81,7 @@ class _CurrentBalanceCardState extends State { children: [ SvgPicture.asset(percentageIcon, width: 16, height: 16), Text( - "${widget.percentage}% $percentageText", + "${_formatPercentage(widget.percentage)}% $percentageText", style: typography.label.xSmall?.copyWith( color: percentageColor, ), @@ -99,3 +99,7 @@ class _CurrentBalanceCardState extends State { }); } } + +String _formatPercentage(double value) { + return value.round().toString(); +} From 16383cd85a70f5e309b222d758146808360507a3 Mon Sep 17 00:00:00 2001 From: yousef_osama11 Date: Mon, 23 Feb 2026 20:13:10 +0200 Subject: [PATCH 3/7] refactor: updating home screen when change date --- lib/presentation/home/cubit/home_cubit.dart | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/lib/presentation/home/cubit/home_cubit.dart b/lib/presentation/home/cubit/home_cubit.dart index 288e95c..df5cd2d 100644 --- a/lib/presentation/home/cubit/home_cubit.dart +++ b/lib/presentation/home/cubit/home_cubit.dart @@ -11,6 +11,7 @@ class HomeCubit extends Cubit { HomeCubit({required this.userMoneyRepository}) : super(HomeLoading()); void getData({required int month, required int year}) async { + emit(HomeLoading()); try { final loadedContent = HomeLoaded( currentBalance: await getTotalBalance(), @@ -33,18 +34,23 @@ class HomeCubit extends Cubit { } void setSelectedDate(int month, int year) async { - if ((state as HomeLoaded).selectedMonth == month && - (state as HomeLoaded).selectedYear == year) { + if (state is! HomeLoaded) return; + final loadedState = state as HomeLoaded; + + if (loadedState.selectedMonth == month && loadedState.selectedYear == year) { return; } - final loadedState = state as HomeLoaded; emit(HomeLoading()); - var expense = await getTotalMonthExpense(month, year); - var income = await getTotalMonthIncome(month, year); + final expense = await getTotalMonthExpense(month, year); + final income = await getTotalMonthIncome(month, year); + final topSpendingCategories = await getTopSpendingCategories(month, year); + final savingSpendingPercentage = await getSavingSpendingPercentage(month, year); emit( loadedState.copyWith( totalMonthIncome: income, totalMonthExpense: expense, + topSpendingCategories: topSpendingCategories, + currentSavingSpendingPercentage: savingSpendingPercentage, selectedMonth: month, selectedYear: year, ), From 34b7712667918683c042729d9af1397408ac03f4 Mon Sep 17 00:00:00 2001 From: yousef_osama11 Date: Mon, 23 Feb 2026 20:14:39 +0200 Subject: [PATCH 4/7] fix: remove redundant account setup cubit in injection and unused imports --- lib/core/di/injection.dart | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/lib/core/di/injection.dart b/lib/core/di/injection.dart index 4737c3e..42fd3ff 100644 --- a/lib/core/di/injection.dart +++ b/lib/core/di/injection.dart @@ -3,12 +3,10 @@ import 'package:moneyplus/domain/repository/transaction_repository.dart'; import 'package:moneyplus/presentation/account_setup/cubit/account_setup_cubit.dart'; import 'package:moneyplus/presentation/transactions/cubit/transaction_cubit.dart'; -import '../../presentation/createAccount/cubit/create_account_cubit.dart'; import '../../data/repository/account_repository.dart'; import '../../data/repository/authentication_repository.dart'; -import '../../data/repository/fake_statistics_repository.dart'; -import '../../data/repository/transaction_repository.dart'; import '../../data/repository/statistics_repository_impl.dart'; +import '../../data/repository/transaction_repository.dart'; import '../../data/repository/user_money_repository.dart'; import '../../data/service/app_secrets_provider.dart'; import '../../data/service/supabase_service.dart'; @@ -17,9 +15,10 @@ import '../../domain/repository/authentication_repository.dart'; import '../../domain/repository/statistics_repository.dart'; import '../../domain/repository/user_money_repository.dart'; import '../../domain/validator/authentication_validator.dart'; +import '../../presentation/createAccount/cubit/create_account_cubit.dart'; +import '../../presentation/expense/cubit/add_expense_cubit.dart'; import '../../presentation/home/cubit/home_cubit.dart'; import '../../presentation/income/cubit/add_income_cubit.dart'; -import '../../presentation/expense/cubit/add_expense_cubit.dart'; import '../../presentation/login/cubit/login_cubit.dart'; import '../../presentation/statistics/cubit/statistics_cubit.dart'; import '../../presentation/trasnaction_details/trasnaction_details_cubit.dart'; @@ -64,10 +63,6 @@ void initDI() { () => TransactionRepositoryImpl(service: getIt()), ); - getIt.registerLazySingleton( - () => AccountSetupCubit(getIt()), - ); - getIt.registerLazySingleton( () => AccountSetupCubit(getIt()), ); From 8c36f614c46deeaa14248a8dc6972686380cd390 Mon Sep 17 00:00:00 2001 From: yousef_osama11 Date: Mon, 23 Feb 2026 20:15:05 +0200 Subject: [PATCH 5/7] fix: improve layout of income/expense display with expanded text handling --- lib/design_system/widgets/income_expense.dart | 63 ++++++++++--------- 1 file changed, 34 insertions(+), 29 deletions(-) diff --git a/lib/design_system/widgets/income_expense.dart b/lib/design_system/widgets/income_expense.dart index 3bbfabf..6e0deb9 100644 --- a/lib/design_system/widgets/income_expense.dart +++ b/lib/design_system/widgets/income_expense.dart @@ -59,38 +59,43 @@ class IncomeExpense extends StatelessWidget { colorFilter: ColorFilter.mode(operationColor, BlendMode.srcIn), ), ), - Padding( - padding: EdgeInsets.fromLTRB(0, 4, 10, 4), - child: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - label, - style: typography.label.xSmall?.copyWith(color: colors.body), - ), - Row( - children: [ - Text( - isIncome ? '+' : '-', - style: typography.title.medium.copyWith( - color: operationColor, + Expanded( + child: Padding( + padding: EdgeInsets.fromLTRB(0, 4, 10, 4), + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + label, + style: typography.label.xSmall?.copyWith(color: colors.body), + ), + Row( + children: [ + Text( + isIncome ? '+' : '-', + style: typography.title.medium.copyWith( + color: operationColor, + ), ), - ), - Text( - l10n.moneyAmount( - amount, - currency + Expanded( + child: Text( + l10n.moneyAmount( + amount, + currency + ), + style: TextStyle( + color: colors.title, + fontSize: 14, + fontWeight: FontWeight.w500, + ), + overflow: TextOverflow.ellipsis, ), - style: TextStyle( - color: colors.title, - fontSize: 14, - fontWeight: FontWeight.w500, ), - ), - ], - ), - ], + ], + ), + ], + ), ), ), ], From b625a606b12966725a0fad18dd4a4210f0ae5afa Mon Sep 17 00:00:00 2001 From: yousef_osama11 Date: Mon, 23 Feb 2026 20:15:28 +0200 Subject: [PATCH 6/7] fix: home screen data reloading when navigating --- lib/presentation/home/screen/home_screen.dart | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/lib/presentation/home/screen/home_screen.dart b/lib/presentation/home/screen/home_screen.dart index 77844d9..8faac3d 100644 --- a/lib/presentation/home/screen/home_screen.dart +++ b/lib/presentation/home/screen/home_screen.dart @@ -76,6 +76,9 @@ class _HomeScreenState extends State { date.year, ); }, + reloadScreen: (){ + context.read().getData(month: currentDate.month, year: currentDate.year); + } ), HomeError() => Scaffold( body: Center(child: Text(state.errorMessage)), @@ -94,6 +97,7 @@ Widget _loadedContent({ required ScrollController scrollController, required bool showAppBarOnly, required Function(DateTime) setSelectedDate, + required Function reloadScreen, }) { final colors = context.colors; final topSpendingCategories = state.topSpendingCategories; @@ -113,7 +117,8 @@ Widget _loadedContent({ showAppBarOnly: showAppBarOnly, state: state, onDatePick: setSelectedDate, - context: context + context: context, + reloadScreen: reloadScreen ), ), ), @@ -219,7 +224,8 @@ Widget _topSection({ required bool showAppBarOnly, required HomeLoaded state, required Function(DateTime) onDatePick, - required BuildContext context + required BuildContext context, + required Function reloadScreen, }) { final colors = MoneyColors.light; if (showAppBarOnly) { @@ -293,8 +299,9 @@ Widget _topSection({ child: VarientButton( text: "Add", iconPath: AppAssets.addMoney, - onPressed: () { - AddIncomeRoute().push(context); + onPressed: () async { + await AddIncomeRoute().push(context); + reloadScreen(); }, ), ), @@ -303,8 +310,9 @@ Widget _topSection({ child: SMSecondaryButton( text: "Spend", iconPath: AppAssets.spendMoney, - onPressed: () { - AddExpenseRoute().push(context); + onPressed: () async { + await AddExpenseRoute().push(context); + reloadScreen(); }, ), ), From aac10d7b93db8bc0129ac4993e9c91159c6298a9 Mon Sep 17 00:00:00 2001 From: yousef_osama11 Date: Mon, 23 Feb 2026 22:35:48 +0200 Subject: [PATCH 7/7] fix: add refresh functionality to home cubit --- lib/presentation/home/cubit/home_cubit.dart | 5 +++++ lib/presentation/home/screen/home_screen.dart | 5 +++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/presentation/home/cubit/home_cubit.dart b/lib/presentation/home/cubit/home_cubit.dart index df5cd2d..0e4670e 100644 --- a/lib/presentation/home/cubit/home_cubit.dart +++ b/lib/presentation/home/cubit/home_cubit.dart @@ -57,6 +57,11 @@ class HomeCubit extends Cubit { ); } + void onRefreshHomeScreen(){ + final currentDate = DateTime.now(); + getData(month: currentDate.month, year: currentDate.year); + } + Future getTotalBalance() async { return await userMoneyRepository.getTotalBalance(); } diff --git a/lib/presentation/home/screen/home_screen.dart b/lib/presentation/home/screen/home_screen.dart index 8faac3d..1154d9c 100644 --- a/lib/presentation/home/screen/home_screen.dart +++ b/lib/presentation/home/screen/home_screen.dart @@ -56,6 +56,7 @@ class _HomeScreenState extends State { getIt()..getData(month: currentDate.month, year: currentDate.year), child: BlocBuilder( builder: (context, state) { + final cubit = context.read(); var content = switch (state) { HomeLoading() => Scaffold( backgroundColor: MoneyColors.light.surface, @@ -71,13 +72,13 @@ class _HomeScreenState extends State { scrollController: _scrollController, showAppBarOnly: showAppBarOnly, setSelectedDate: (date) { - context.read().setSelectedDate( + cubit.setSelectedDate( date.month, date.year, ); }, reloadScreen: (){ - context.read().getData(month: currentDate.month, year: currentDate.year); + cubit.onRefreshHomeScreen(); } ), HomeError() => Scaffold(