- Colorful Charts: Vibrant, distinct colors for clear data differentiation
- Pie Charts: Category breakdown with percentage visualization
- Spending Trends: Visual representation of monthly expenses
- Add Expenses: Quick entry with smart category suggestions
- Edit/Delete: Full CRUD operations with swipe-to-delete
- Category System: Predefined categories with custom icons
- Multi-Currency: Support for ₹, $, €, £ with Indian Rupee as default
- Light/Dark Mode: Seamless theme switching
- Persistent Preferences: Theme choice saved between sessions
- System Adaptive: Automatically adapts to system theme
- Local Storage: SharedPreferences for persistent data storage
- No Authentication: Private by default, no account required
- Instant Access: Works immediately without network connectivity
- Flutter SDK 3.0 or higher
- Dart SDK 2.17 or higher
- Android Studio / VS Code with Flutter extensions
- Clone the repository
git clone https://github.com/your-username/ledge.git
cd ledge- Install dependencies
flutter pub get- Run the app
flutter runAndroid:
flutter build apk --releaseiOS:
flutter build ios --release- Framework: Flutter
- State Management: Provider
- Data Visualization: fl_chart
- Local Storage: shared_preferences
- Date Formatting: intl
- UI Components: Material Design with custom theming
lib/
├── main.dart # App entry point
├── models/ # Data models
│ ├── expense.dart # Expense model
│ ├── category.dart # Category model
│ └── predefined_categories.dart # Predefined categories
├── providers/ # State management
│ └── expense_provider.dart # Expense state provider
├── screens/ # Main screens
│ ├── dashboard_screen.dart # Main dashboard
│ ├── add_expense_screen.dart # Add expense form
│ ├── edit_expense_screen.dart # Edit expense form
│ └── settings_screen.dart # Settings screen
├── widgets/ # Reusable components
│ ├── expense_chart.dart # Data visualization
│ ├── expense_list.dart # Expense list component
│ └── month_selector.dart # Month navigation
└── services/ # Business logic
└── local_storage_service.dart # Local storage handling
We welcome contributions from the community! Here's how you can help:
- Fork the repository
- Create a feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
- Ensure you have Flutter installed and set up
- Fork and clone the repository
- Run
flutter pub getto install dependencies - Run
flutter analyzeto check for code issues - Run
flutter testto execute tests
- Follow the existing code style
- Write meaningful commit messages
- Add tests for new functionality
- Update documentation as needed
Run the test suite:
flutter testRun tests with coverage:
flutter test --coverageLedge follows a clean architecture pattern with:
- Models: Data structures and business logic
- Providers: State management using Provider package
- Services: Data access layer (local storage)
- Screens: Main UI pages and user flows
- Widgets: Reusable UI components
The app uses the Provider package for state management:
ExpenseProvider: Manages the list of expenses and provides methods for CRUD operations- Change notifications automatically update the UI when data changes
All data is stored locally using SharedPreferences:
- Expenses are serialized to JSON and stored as a string list
- Theme preferences and currency settings are also persisted
If you find a bug or have a feature request, please open an issue on GitHub. When reporting a bug, please include:
- A clear description of the issue
- Steps to reproduce the problem
- Expected vs. actual behavior
- Screenshots if applicable
- Device and OS information
This project is licensed under the MIT License - see the LICENSE file for details.

