A cross-platform personal finance management application built using Flutter,
implementing CLEAN Architecture with GetX state management.
The app allows users to track expenses, manage budgets,
view financial summaries, and access real-time currency exchange rates with offline data support.
🧭 App Usage Flow (Recommended Order) This app is designed to be used in the following simple steps:
-
Set Budget Limits (First Step) Go to the Budget section Set monthly expense limits category-wise This helps track overspending and remaining balance
⚠️ It is recommended to set budgets before adding expenses. -
Add & Manage Expenses Navigate to the Expenses tab Add new expenses with: Amount Category Date Notes Edit an expense by tapping on it Delete an expense using swipe action
-
Track Spending on Dashboard Open the Dashboard View: Monthly total expenses Category-wise spending summary Budget vs spent overview Dashboard data updates automatically when expenses change
-
Use Exchange Rates (Optional) Go to the Exchange Rates section View currency exchange rates Convert amounts between currencies for reference Manage App Settings
-
From Settings, you can: 🔄 Backup data (export Hive data as JSON) 📥 Restore data from backup 🗑️ Clear all stored data ♻️ Reset app to initial state 💡 Helpful Tip
Tap the Help ( ? ) icon on the Dashboard AppBar anytime to see a quick in-app usage guide.
Flutter Hive (local database) State Management: (GetX) Architecture: CLEAN Architecture principles
This application treats budgets as monthly recurring spending allowances. Budgets are not duplicated or reset every month. Instead, recurrence is achieved through month-based expense calculation, which automatically applies the same budget to each new month. How it works Budgets are stored once per category (e.g. Groceries, Rent, Travel). Expenses are stored with their transaction dates.
While calculating totals, expenses are filtered by the current month and year. Monthly Expenses = Expenses where expense.date.month == currentMonth AND expense.date.year == currentYear
Because only the current month’s expenses are considered: Budgets automatically “reset” every month No manual reset, cron job, or database cleanup is required The same budget applies again when a new month starts
Example Month Budget (Groceries) Expenses Remaining January ₹5,000 ₹4,200 ₹800 February ₹5,000 ₹1,500 ₹3,500
The January expenses are excluded from February calculations, making the budget naturally recurring.
Why this approach Avoids duplicating budget records per month Keeps data model simple and scalable Reduces storage and migration complexity Aligns with real-world expense tracking behavior This design ensures budgets remain predictable, reusable, and easy to extend for future enhancements (e.g. yearly budgets or budget versioning).
- Do not change existing
@HiveFieldindexes once released. - For adding new fields:
- Append a new
@HiveField(n)with a new index - Keep it nullable or provide a default mapping
- Append a new
- Avoid changing
typeIdfor existing models. - For breaking changes:
- Create a new box (e.g.,
expenses_box_v2) - Migrate old data to the new structure
- Remove old box after migration (optional)
- Create a new box (e.g.,
- Run code generation:
dart run build_runner build --delete-conflicting-outputs
👨💻 Author Jaimin Modi Sr. Flutter Developer Support: career.jaimin@gmail.com