From 3dd523ba98b6908e6b7fb055c6c8892f20b4d03b Mon Sep 17 00:00:00 2001 From: marah222 Date: Mon, 23 Feb 2026 13:38:10 +0300 Subject: [PATCH 01/11] fix: remove duplicate AccountSetupCubit registration in GetIt --- lib/core/di/injection.dart | 4 ---- 1 file changed, 4 deletions(-) diff --git a/lib/core/di/injection.dart b/lib/core/di/injection.dart index 4737c3e..554608f 100644 --- a/lib/core/di/injection.dart +++ b/lib/core/di/injection.dart @@ -64,10 +64,6 @@ void initDI() { () => TransactionRepositoryImpl(service: getIt()), ); - getIt.registerLazySingleton( - () => AccountSetupCubit(getIt()), - ); - getIt.registerLazySingleton( () => AccountSetupCubit(getIt()), ); From badd909d80825039c5fab04e65fa84dd3085c87b Mon Sep 17 00:00:00 2001 From: marah222 Date: Mon, 23 Feb 2026 13:38:35 +0300 Subject: [PATCH 02/11] refactor: use iconCancel from AppAssets in MBottomSheet --- lib/design_system/widgets/bottom_sheet.dart | 25 +++++++-------------- 1 file changed, 8 insertions(+), 17 deletions(-) diff --git a/lib/design_system/widgets/bottom_sheet.dart b/lib/design_system/widgets/bottom_sheet.dart index 66b3d1b..ea655e4 100644 --- a/lib/design_system/widgets/bottom_sheet.dart +++ b/lib/design_system/widgets/bottom_sheet.dart @@ -1,9 +1,13 @@ import 'dart:ui'; import 'package:flutter/material.dart'; +import 'package:moneyplus/design_system/assets/app_assets.dart'; import 'package:moneyplus/design_system/theme/money_colors.dart'; +import 'package:svg_flutter/svg.dart'; import 'package:moneyplus/design_system/theme/money_typography.dart'; +import '../theme/money_extension_context.dart'; + class MBottomSheet extends StatelessWidget { final String title; final Widget content; @@ -19,9 +23,9 @@ class MBottomSheet extends StatelessWidget { @override Widget build(BuildContext context) { return Container( - decoration: const BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.only( + decoration: BoxDecoration( + color: context.colors.surface, + borderRadius: const BorderRadius.only( topLeft: Radius.circular(24), topRight: Radius.circular(24), ), @@ -42,20 +46,7 @@ class MBottomSheet extends StatelessWidget { ), GestureDetector( onTap: () => Navigator.pop(context), - child: Container( - width: 28, - height: 28, - decoration: BoxDecoration( - color: const Color(0xFFE5E7EB), - borderRadius: BorderRadius.circular(14), - border: Border.all(color: MoneyColors.light.body, width: 1), - ), - child: Icon( - Icons.close, - size: 16, - color: MoneyColors.light.body, - ), - ), + child: SvgPicture.asset(AppAssets.iconCancel, width: 20, height: 20), ), ], ), From aeebbff10cdffb7d17b98e98d5e62b08219d9aee Mon Sep 17 00:00:00 2001 From: marah222 Date: Mon, 23 Feb 2026 13:38:53 +0300 Subject: [PATCH 03/11] feat: add TransactionTypeCard widget --- .../widget/transaction_type_card.dart | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 lib/presentation/transactions/widget/transaction_type_card.dart diff --git a/lib/presentation/transactions/widget/transaction_type_card.dart b/lib/presentation/transactions/widget/transaction_type_card.dart new file mode 100644 index 0000000..645cf35 --- /dev/null +++ b/lib/presentation/transactions/widget/transaction_type_card.dart @@ -0,0 +1,69 @@ +import 'package:flutter/material.dart'; +import 'package:moneyplus/design_system/constants/design_constants.dart'; +import 'package:moneyplus/design_system/theme/money_extension_context.dart'; +import 'package:svg_flutter/svg.dart'; + +class TransactionTypeCard extends StatelessWidget { + final String label; + final String iconPath; + final bool selected; + final VoidCallback onTap; + + const TransactionTypeCard({ + super.key, + required this.label, + required this.iconPath, + required this.selected, + required this.onTap, + }); + + @override + Widget build(BuildContext context) { + final colors = context.colors; + final typography = context.typography; + + final Color borderColor = selected ? colors.primary : Colors.transparent; + final Color backgroundColor = selected + ? colors.primary.withValues(alpha: 0.08) + : colors.surfaceLow; + final Color contentColor = selected ? colors.primary : colors.body; + + return GestureDetector( + onTap: onTap, + child: AnimatedContainer( + duration: const Duration(milliseconds: 200), + curve: Curves.easeInOut, + padding: const EdgeInsets.symmetric( + vertical: DesignConstants.spacingMedium, + horizontal: DesignConstants.spacingLarge, + ), + decoration: BoxDecoration( + color: backgroundColor, + borderRadius: BorderRadius.circular(DesignConstants.radiusMedium), + border: Border.all(color: borderColor, width: 1), + ), + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SvgPicture.asset( + iconPath, + width: DesignConstants.iconSizeMed, + height: DesignConstants.iconSizeMed, + colorFilter: ColorFilter.mode(contentColor, BlendMode.srcIn), + ), + const SizedBox(height: DesignConstants.spacingSmall), + Text( + label, + style: typography.label.medium.copyWith( + color: contentColor, + fontWeight: selected ? FontWeight.w600 : FontWeight.w500, + ), + textAlign: TextAlign.start, + ), + ], + ), + ), + ); + } +} From f94589990b57b296d20b304a9a1b879ba2e05396 Mon Sep 17 00:00:00 2001 From: marah222 Date: Mon, 23 Feb 2026 13:39:23 +0300 Subject: [PATCH 04/11] feat: add Add Transaction bottom sheet --- .../widget/add_transaction_bottom_sheet.dart | 102 ++++++++++++++++++ .../widget/empty_transactions.dart | 6 +- 2 files changed, 107 insertions(+), 1 deletion(-) create mode 100644 lib/presentation/transactions/widget/add_transaction_bottom_sheet.dart diff --git a/lib/presentation/transactions/widget/add_transaction_bottom_sheet.dart b/lib/presentation/transactions/widget/add_transaction_bottom_sheet.dart new file mode 100644 index 0000000..e54a0d0 --- /dev/null +++ b/lib/presentation/transactions/widget/add_transaction_bottom_sheet.dart @@ -0,0 +1,102 @@ +import 'package:flutter/material.dart'; +import 'package:moneyplus/core/l10n/app_localizations.dart'; +import 'package:moneyplus/design_system/assets/app_assets.dart'; +import 'package:moneyplus/design_system/constants/design_constants.dart'; +import 'package:moneyplus/design_system/theme/money_extension_context.dart'; +import 'package:moneyplus/design_system/widgets/bottom_sheet.dart'; +import 'package:moneyplus/design_system/widgets/buttons/button/default_button.dart'; +import 'package:moneyplus/domain/entity/transaction_type.dart'; +import 'package:moneyplus/presentation/navigation/routes.dart'; +import 'package:moneyplus/presentation/transactions/widget/transaction_type_card.dart'; +import 'package:moneyplus/utils/extenstions/show_bottom_sheet.dart'; + +class AddTransactionBottomSheet extends StatefulWidget { + final BuildContext parentContext; + + const AddTransactionBottomSheet({ + super.key, + required this.parentContext, + }); + + @override + State createState() => + _AddTransactionBottomSheetState(); +} + +class _AddTransactionBottomSheetState extends State { + TransactionType? _selectedType; + + void _selectType(TransactionType type) { + setState(() { + _selectedType = type; + }); + } + + void _onContinue() { + final selected = _selectedType; + if (selected == null) return; + + Navigator.of(context).pop(); + if (selected == TransactionType.income) { + AddIncomeRoute().push(widget.parentContext); + } else { + AddExpenseRoute().push(widget.parentContext); + } + } + + @override + Widget build(BuildContext context) { + final typography = context.typography; + final colors = context.colors; + final l10n = AppLocalizations.of(context)!; + + return MBottomSheet( + title: l10n.add_transaction, + content: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + Text( + l10n.add_transaction_sheet_subtitle, + style: typography.body.small.copyWith(color: colors.body), + ), + const SizedBox(height: DesignConstants.spacingLarge), + Row( + children: [ + Expanded( + child: TransactionTypeCard( + label: l10n.addIncome, + iconPath: AppAssets.icAddAmount, + selected: _selectedType == TransactionType.income, + onTap: () => _selectType(TransactionType.income), + ), + ), + const SizedBox(width: DesignConstants.spacingSmall), + Expanded( + child: TransactionTypeCard( + label: l10n.make_expense, + iconPath: AppAssets.icAddExpense, + selected: _selectedType == TransactionType.expense, + onTap: () => _selectType(TransactionType.expense), + ), + ), + ], + ), + ], + ), + actionButtons: [ + DefaultButton( + text: l10n.continueButton, + isEnabled: _selectedType != null, + onPressed: _selectedType != null ? _onContinue : null, + ), + ], + ); + } +} + +void showAddTransactionBottomSheet(BuildContext context) { + context.showBlurBottomSheet( + AddTransactionBottomSheet(parentContext: context), + ); +} + diff --git a/lib/presentation/transactions/widget/empty_transactions.dart b/lib/presentation/transactions/widget/empty_transactions.dart index c6032ae..7fbea25 100644 --- a/lib/presentation/transactions/widget/empty_transactions.dart +++ b/lib/presentation/transactions/widget/empty_transactions.dart @@ -4,6 +4,7 @@ import 'package:moneyplus/design_system/assets/app_assets.dart'; import 'package:moneyplus/design_system/theme/money_extension_context.dart'; import 'package:moneyplus/design_system/widgets/buttons/button/default_button.dart'; import 'package:svg_flutter/svg.dart'; +import 'package:moneyplus/presentation/transactions/widget/add_transaction_bottom_sheet.dart'; class EmptyTransactions extends StatelessWidget { const EmptyTransactions({super.key}); @@ -46,7 +47,10 @@ class EmptyTransactions extends StatelessWidget { ), SizedBox(height: 24), IntrinsicWidth( - child: DefaultButton(text: localizations.add_transaction), + child: DefaultButton( + text: localizations.add_transaction, + onPressed: () => showAddTransactionBottomSheet(context), + ), ), ], ); From ea3d769cd8e54c5f764d342ddd474f57f06c0bc7 Mon Sep 17 00:00:00 2001 From: marah222 Date: Mon, 23 Feb 2026 13:40:53 +0300 Subject: [PATCH 05/11] feat: localize Add Transaction bottom sheet --- lib/core/l10n/app_ar.arb | 5 ++++- lib/core/l10n/app_en.arb | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/core/l10n/app_ar.arb b/lib/core/l10n/app_ar.arb index 326108e..ce1e775 100644 --- a/lib/core/l10n/app_ar.arb +++ b/lib/core/l10n/app_ar.arb @@ -141,5 +141,8 @@ "transaction_details": "تفاصيل المعاملة", "transaction_details": "Transaction details", "income_details": "تفاصيل الدخل", - "expense_details": "تفاصيل المصروف" + "expense_details": "تفاصيل المصروف", + "add_transaction_sheet_subtitle": "اختر نوع المعاملة التي تريد إضافتها", + "make_expense": "تسجيل مصروف", + "continueButton": "متابعة" } diff --git a/lib/core/l10n/app_en.arb b/lib/core/l10n/app_en.arb index e9285ba..8648e14 100644 --- a/lib/core/l10n/app_en.arb +++ b/lib/core/l10n/app_en.arb @@ -154,5 +154,8 @@ "add" : "Add", "transaction_details": "Transaction details", "income_details": "Income details", - "expense_details": "Expense details" + "expense_details": "Expense details", + "add_transaction_sheet_subtitle": "Select transaction type you want to add it", + "make_expense": "Make expense", + "continueButton": "Continue" } From fb9019fe83b827667fd72b6a5c1189d63dd91821 Mon Sep 17 00:00:00 2001 From: marah222 Date: Mon, 23 Feb 2026 13:41:35 +0300 Subject: [PATCH 06/11] feat: add transaction assets --- assets/icons/ic_add_transaction_expense.svg | 7 +++++++ assets/icons/ic_add_transaction_income.svg | 6 ++++++ lib/design_system/assets/app_assets.dart | 2 ++ 3 files changed, 15 insertions(+) create mode 100644 assets/icons/ic_add_transaction_expense.svg create mode 100644 assets/icons/ic_add_transaction_income.svg diff --git a/assets/icons/ic_add_transaction_expense.svg b/assets/icons/ic_add_transaction_expense.svg new file mode 100644 index 0000000..5ebb2cc --- /dev/null +++ b/assets/icons/ic_add_transaction_expense.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/assets/icons/ic_add_transaction_income.svg b/assets/icons/ic_add_transaction_income.svg new file mode 100644 index 0000000..b4f61a2 --- /dev/null +++ b/assets/icons/ic_add_transaction_income.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/lib/design_system/assets/app_assets.dart b/lib/design_system/assets/app_assets.dart index 9ad969f..4d795a8 100644 --- a/lib/design_system/assets/app_assets.dart +++ b/lib/design_system/assets/app_assets.dart @@ -68,4 +68,6 @@ class AppAssets { static const String icEmptyTransactionImage = '$_images/empty_transaction_image.png'; static const String icEmptyTransactionPattern = '$_icons/empty_transaction_pattern.svg'; static const String icFilter = "$_icons/ic_filter.svg"; + static const String icAddAmount = "$_icons/ic_add_transaction_income.svg"; + static const String icAddExpense = "$_icons/ic_add_transaction_expense.svg"; } From ba2b4b6285d102f234e55f491dd2149d7be90981 Mon Sep 17 00:00:00 2001 From: marah222 Date: Mon, 23 Feb 2026 13:42:11 +0300 Subject: [PATCH 07/11] feat: add icon size --- lib/design_system/constants/design_constants.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/design_system/constants/design_constants.dart b/lib/design_system/constants/design_constants.dart index 9780691..9f0321b 100644 --- a/lib/design_system/constants/design_constants.dart +++ b/lib/design_system/constants/design_constants.dart @@ -19,6 +19,7 @@ class DesignConstants { // Icon Sizes static const double iconSizeSmall = 14.0; static const double iconSizeMedium = 16.0; + static const double iconSizeMed = 24.0; static const double iconSizeLarge = 28.0; // Component Sizes From 862c35e75d3acfd641c4a4a0fb2fafbb4a059fbd Mon Sep 17 00:00:00 2001 From: marah222 Date: Tue, 24 Feb 2026 23:44:50 +0300 Subject: [PATCH 08/11] feat: add categories filter bottom sheet --- .../categories_filter_bottom_sheet.dart | 108 ++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 lib/presentation/transactions/widget/categories_filter_bottom_sheet.dart diff --git a/lib/presentation/transactions/widget/categories_filter_bottom_sheet.dart b/lib/presentation/transactions/widget/categories_filter_bottom_sheet.dart new file mode 100644 index 0000000..ca2c7cf --- /dev/null +++ b/lib/presentation/transactions/widget/categories_filter_bottom_sheet.dart @@ -0,0 +1,108 @@ +import 'package:flutter/material.dart'; +import 'package:moneyplus/design_system/constants/design_constants.dart'; +import 'package:moneyplus/design_system/widgets/bottom_sheet.dart'; +import 'package:moneyplus/design_system/widgets/buttons/button/default_button.dart'; +import 'package:moneyplus/design_system/widgets/buttons/secondary/defult_secondary_button.dart'; +import 'package:moneyplus/design_system/widgets/chip.dart'; +import 'package:moneyplus/utils/extenstions/show_bottom_sheet.dart'; + +import '../../../core/l10n/app_localizations.dart'; + +Future?> showCategoriesFilterBottomSheet({ + required BuildContext context, + required List categories, + Set? initialSelectedCategories, +}) { + return context.showBlurBottomSheet>( + CategoriesFilterBottomSheet( + categories: categories, + initialSelectedCategories: initialSelectedCategories, + ), + ); +} + +class CategoriesFilterBottomSheet extends StatefulWidget { + final List categories; + final Set? initialSelectedCategories; + + const CategoriesFilterBottomSheet({ + super.key, + required this.categories, + this.initialSelectedCategories, + }); + + @override + State createState() => + _CategoriesFilterBottomSheetState(); +} + +class _CategoriesFilterBottomSheetState extends State { + late Set _selected; + + @override + void initState() { + super.initState(); + _selected = Set.from(widget.initialSelectedCategories ?? const {}); + } + + void _toggle(String category) { + setState(() { + if (_selected.contains(category)) { + _selected.remove(category); + } else { + _selected.add(category); + } + }); + } + + void _clear() { + setState(() { + _selected.clear(); + }); + } + + void _apply() { + final selectedInOrder = widget.categories + .where(_selected.contains) + .toList(growable: false); + Navigator.of(context).pop(selectedInOrder); + } + + @override + Widget build(BuildContext context) { + final l10n = AppLocalizations.of(context)!; + + return MBottomSheet( + title: l10n.categoriesFilterTitle, + content: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + Wrap( + spacing: DesignConstants.spacingSmall, + runSpacing: DesignConstants.spacingSmall, + children: [ + for (final category in widget.categories) + MChip( + label: category, + selected: _selected.contains(category), + onTap: () => _toggle(category), + ), + ], + ), + ], + ), + actionButtons: [ + DefaultSecondaryButton( + text: l10n.categoriesFilterClear, + isEnabled: _selected.isNotEmpty, + onPressed: _selected.isNotEmpty ? _clear : null, + ), + DefaultButton( + text: l10n.categoriesFilterApply, + onPressed: _apply, + ), + ], + ); + } +} + From 6fa811f9039930869c55fe435935521a62fc3f11 Mon Sep 17 00:00:00 2001 From: marah222 Date: Tue, 24 Feb 2026 23:45:23 +0300 Subject: [PATCH 09/11] feat: add category filtering to transactions --- .../transactions/cubit/transaction_cubit.dart | 66 +++++++++++++++---- .../transactions/cubit/transaction_state.dart | 8 +++ .../screen/transactions_screen.dart | 13 +++- .../widget/transaction_app_bar.dart | 4 +- 4 files changed, 77 insertions(+), 14 deletions(-) diff --git a/lib/presentation/transactions/cubit/transaction_cubit.dart b/lib/presentation/transactions/cubit/transaction_cubit.dart index 5af5b07..6a251a4 100644 --- a/lib/presentation/transactions/cubit/transaction_cubit.dart +++ b/lib/presentation/transactions/cubit/transaction_cubit.dart @@ -1,4 +1,5 @@ import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:flutter/foundation.dart'; import 'package:moneyplus/domain/entity/transaction.dart'; import 'package:moneyplus/domain/entity/transaction_type.dart'; import 'package:moneyplus/domain/repository/transaction_repository.dart'; @@ -10,6 +11,17 @@ class TransactionCubit extends Cubit { TransactionCubit({required this.transactionRepository}) : super(TransactionState.initial()); + static const List _mockCategories = [ + 'Food', + 'Transport', + 'Shopping', + 'Bills', + 'Health', + 'Entertainment', + 'Salary', + 'Gifts', + ]; + void loadData() async { emit(state.copyWith(status: TransactionStatus.loading)); @@ -18,7 +30,13 @@ class TransactionCubit extends Cubit { emit( state.copyWith( allTransactions: result, - filteredTransactions: _filterTransaction(now.month, now.year, result), + availableCategories: _mockCategories, + filteredTransactions: _filterTransaction( + month: now.month, + year: now.year, + transactions: result, + selectedCategories: state.selectedCategories, + ), selectedYear: now.year, selectedMonth: now.month, status: TransactionStatus.success, @@ -38,9 +56,10 @@ class TransactionCubit extends Cubit { status: TransactionStatus.success, allTransactions: result, filteredTransactions: _filterTransaction( - state.selectedMonth, - state.selectedYear, - result, + month: state.selectedMonth, + year: state.selectedYear, + transactions: result, + selectedCategories: state.selectedCategories, ), ), ); @@ -61,9 +80,26 @@ class TransactionCubit extends Cubit { state.copyWith( status: TransactionStatus.success, filteredTransactions: _filterTransaction( - month, - year, - state.allTransactions, + month: month, + year: year, + transactions: state.allTransactions, + selectedCategories: state.selectedCategories, + ), + ), + ); + } + + void setSelectedCategories(Set categories) { + if (setEquals(state.selectedCategories, categories)) return; + + emit( + state.copyWith( + selectedCategories: Set.from(categories), + filteredTransactions: _filterTransaction( + month: state.selectedMonth, + year: state.selectedYear, + transactions: state.allTransactions, + selectedCategories: categories, ), ), ); @@ -81,12 +117,20 @@ class TransactionCubit extends Cubit { } List _filterTransaction( - int month, - int year, - List transactions, + { + required int month, + required int year, + required List transactions, + required Set selectedCategories, + } ) { return transactions.where((transaction) { - return transaction.date.year == year && transaction.date.month == month; + final matchesDate = + transaction.date.year == year && transaction.date.month == month; + if (!matchesDate) return false; + + if (selectedCategories.isEmpty) return true; + return selectedCategories.contains(transaction.category.name); }).toList(); } } diff --git a/lib/presentation/transactions/cubit/transaction_state.dart b/lib/presentation/transactions/cubit/transaction_state.dart index 5ffd7a2..d3e7efc 100644 --- a/lib/presentation/transactions/cubit/transaction_state.dart +++ b/lib/presentation/transactions/cubit/transaction_state.dart @@ -15,6 +15,8 @@ class TransactionState { final TransactionTabs selectedTab; final int selectedMonth; final int selectedYear; + final List availableCategories; + final Set selectedCategories; const TransactionState({ required this.status, @@ -24,6 +26,8 @@ class TransactionState { this.selectedTab = TransactionTabs.all, this.selectedYear = 2026, this.selectedMonth = 1, + this.availableCategories = const [], + this.selectedCategories = const {}, }); factory TransactionState.initial() => @@ -37,6 +41,8 @@ class TransactionState { TransactionTabs? selectedTab, int? selectedYear, int? selectedMonth, + List? availableCategories, + Set? selectedCategories, }) { return TransactionState( status: status ?? this.status, @@ -46,6 +52,8 @@ class TransactionState { selectedTab: selectedTab ?? this.selectedTab, selectedYear: selectedYear ?? this.selectedYear, selectedMonth: selectedMonth ?? this.selectedMonth, + availableCategories: availableCategories ?? this.availableCategories, + selectedCategories: selectedCategories ?? this.selectedCategories, ); } } diff --git a/lib/presentation/transactions/screen/transactions_screen.dart b/lib/presentation/transactions/screen/transactions_screen.dart index b4e9733..9ed86b3 100644 --- a/lib/presentation/transactions/screen/transactions_screen.dart +++ b/lib/presentation/transactions/screen/transactions_screen.dart @@ -6,6 +6,7 @@ import 'package:moneyplus/design_system/widgets/snack_bar.dart'; import 'package:moneyplus/presentation/transactions/cubit/transaction_cubit.dart'; import 'package:moneyplus/presentation/transactions/cubit/transaction_state.dart'; import 'package:moneyplus/presentation/transactions/widget/empty_transactions.dart'; +import 'package:moneyplus/presentation/transactions/widget/categories_filter_bottom_sheet.dart'; import 'package:moneyplus/presentation/transactions/widget/loading_view.dart'; import 'package:moneyplus/presentation/transactions/widget/tabs_row.dart'; import 'package:moneyplus/presentation/transactions/widget/transaction_app_bar.dart'; @@ -40,7 +41,17 @@ class TransactionsScreen extends StatelessWidget { year: state.selectedYear, month: state.selectedMonth, onDatePick: context.read().setSelectedDate, - onFilterClicked: (){}, + onFilterClicked: () async { + final result = await showCategoriesFilterBottomSheet( + context: context, + categories: state.availableCategories, + initialSelectedCategories: state.selectedCategories, + ); + if (result == null) return; + context + .read() + .setSelectedCategories(result.toSet()); + }, ), ), SliverPadding( diff --git a/lib/presentation/transactions/widget/transaction_app_bar.dart b/lib/presentation/transactions/widget/transaction_app_bar.dart index ad94b65..169adf9 100644 --- a/lib/presentation/transactions/widget/transaction_app_bar.dart +++ b/lib/presentation/transactions/widget/transaction_app_bar.dart @@ -9,7 +9,7 @@ import '../../../design_system/assets/app_assets.dart'; class TransactionAppBar extends StatelessWidget { final Function(int month, int year) onDatePick; - final Function onFilterClicked; + final VoidCallback onFilterClicked; final int year; final int month; @@ -37,7 +37,7 @@ class TransactionAppBar extends StatelessWidget { }, year: year, month: month), SizedBox(width: 8,), GestureDetector( - onTap: () {}, + onTap: onFilterClicked, child: Container( height: 40, width: 40, From 6ea23b491ae5bbfcf688a2161b699395e8a11e3f Mon Sep 17 00:00:00 2001 From: marah222 Date: Tue, 24 Feb 2026 23:45:34 +0300 Subject: [PATCH 10/11] feat: add localization strings for categories filter --- lib/core/l10n/app_ar.arb | 5 ++++- lib/core/l10n/app_en.arb | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/core/l10n/app_ar.arb b/lib/core/l10n/app_ar.arb index ce1e775..6b1bd6a 100644 --- a/lib/core/l10n/app_ar.arb +++ b/lib/core/l10n/app_ar.arb @@ -144,5 +144,8 @@ "expense_details": "تفاصيل المصروف", "add_transaction_sheet_subtitle": "اختر نوع المعاملة التي تريد إضافتها", "make_expense": "تسجيل مصروف", - "continueButton": "متابعة" + "continueButton": "متابعة", + "categoriesFilterTitle": "تصفية الفئات", + "categoriesFilterClear": "مسح", + "categoriesFilterApply": "تطبيق" } diff --git a/lib/core/l10n/app_en.arb b/lib/core/l10n/app_en.arb index 8648e14..4c13ee6 100644 --- a/lib/core/l10n/app_en.arb +++ b/lib/core/l10n/app_en.arb @@ -157,5 +157,8 @@ "expense_details": "Expense details", "add_transaction_sheet_subtitle": "Select transaction type you want to add it", "make_expense": "Make expense", - "continueButton": "Continue" + "continueButton": "Continue", + "categoriesFilterTitle": "Categories filter", + "categoriesFilterClear": "Clear", + "categoriesFilterApply": "Apply" } From 2ac9af8422552b832dbbba5cb020cdc5720cfe3a Mon Sep 17 00:00:00 2001 From: marah222 Date: Wed, 25 Feb 2026 00:22:24 +0300 Subject: [PATCH 11/11] feat: add localization strings for categories filter --- lib/core/l10n/app_en.arb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/core/l10n/app_en.arb b/lib/core/l10n/app_en.arb index a159e4a..5658786 100644 --- a/lib/core/l10n/app_en.arb +++ b/lib/core/l10n/app_en.arb @@ -154,8 +154,7 @@ "expense_details": "Expense details", "whereDoYouUsuallySpendYourMoney": "Where do you usually spend your money?", "suggestions": "Suggestions:", - "selectedCategories": "Selected Categories:" - "expense_details": "Expense details", + "selectedCategories": "Selected Categories:", "add_transaction_sheet_subtitle": "Select transaction type you want to add it", "make_expense": "Make expense", "continueButton": "Continue",