A beautiful and intuitive expense splitting application built with Flutter
Features β’ Screenshots β’ Installation β’ Usage β’ Architecture β’ Contributing
Split Expenses is a modern, feature-rich mobile application that simplifies the process of splitting expenses among friends, roommates, or groups. Inspired by Splitwise, this app provides an elegant solution for tracking shared expenses and settling debts.
Whether you're planning a trip with friends, sharing rent with roommates, or managing group expenses, Split Expenses makes it easy to keep track of who owes what and ensures everyone pays their fair share.
- Group Management: Create and manage multiple expense groups
- Expense Tracking: Add, edit, and delete expenses with detailed breakdowns
- Smart Splitting: Automatically split expenses equally among participants
- Participant Management: Add participants from contacts or manually
- Balance Calculation: Real-time calculation of who owes whom
- Expense Details: View detailed breakdown of each expense
- Summary View: Comprehensive overview of all balances and settlements
- Firebase Authentication: Secure email/password authentication
- Email Verification: Verify user email addresses for security
- Cloud Sync: Sync data across devices using Cloud Firestore
- Offline Support: Local storage with Hive for offline functionality
- Beautiful UI: Modern, clean interface with Material Design
- Dark Mode: Full dark mode support
- Google Fonts: Beautiful typography with Google Fonts integration
- Smooth Animations: Polished animations and transitions
- Contact Integration: Import participants directly from phone contacts
- Intuitive Navigation: Easy-to-use navigation and user flows
- Multi-platform: Works on Android, iOS, Web, Windows, macOS, and Linux
- Data Persistence: Local storage ensures data is never lost
- Email Validation: Built-in email validation for user registration
- Permission Handling: Proper permission management for contacts access
- Responsive Design: Adapts to different screen sizes
Want to try the app right away? Download the latest release!
π Go to Releases Page to Download APK
Once on the Releases page:
- Look for v1.0.0 release
- Download
split-expenses-v1.0.0.apk(50.2 MB) - Install on your Android device
- Download the APK file from the Releases page
- Enable "Install from Unknown Sources" in your Android settings
- Open the APK and tap Install
- Start splitting expenses!
π Full Installation Guide | π Release Notes
Note: If you don't see any releases yet, the APK is being prepared. Check back soon!
Coming Soon: iOS, Web, and Desktop versions
Before you begin, ensure you have the following installed:
- Flutter SDK (^3.8.1)
- Dart SDK (^3.8.1)
- Android Studio or VS Code
- Git
-
Clone the repository
git clone https://github.com/369KeYuRmIsTrY/split_expenses.git cd split_expenses -
Install dependencies
flutter pub get
-
Generate Hive adapters
flutter pub run build_runner build --delete-conflicting-outputs
-
Set up Firebase (Optional - for authentication and cloud sync)
Follow the instructions in FIREBASE_SETUP.md to configure Firebase for your project.
-
Run the app
flutter run
- Tap the + button on the home screen
- Enter a group name
- Add participants from contacts or manually
- Tap "Create" to create the group
- Open a group
- Tap the + button
- Enter expense details:
- Description
- Amount
- Select who paid
- Choose participants to split with
- Tap "Add Expense"
- Open a group to see the total spending
- Tap the "Summary" tab to view:
- Individual balances
- Who owes whom
- Settlement suggestions
- Open a group
- Tap on a participant to:
- Edit their name
- View their expenses
- Delete them (if not involved in expenses)
lib/
βββ main.dart # App entry point
βββ models/ # Data models
β βββ expense.dart # Expense model
β βββ group.dart # Group model
β βββ participant.dart # Participant model
βββ screens/ # UI screens
β βββ group_list_screen.dart
β βββ group_detail_screen.dart
β βββ add_expense_screen.dart
β βββ expense_detail_screen.dart
β βββ summary_screen.dart
β βββ login_screen.dart
β βββ register_screen.dart
β βββ verify_email_screen.dart
βββ services/ # Business logic
β βββ group_service.dart
β βββ auth_service.dart
β βββ firebase_service.dart
β βββ firestore_service.dart
β βββ contact_service.dart
βββ storage/ # Local storage
β βββ storage_service.dart
βββ theme/ # App theming
β βββ app_theme.dart
βββ widgets/ # Reusable widgets
βββ expense_tile.dart
βββ add_participant_dialog.dart
| Technology | Purpose |
|---|---|
| Flutter | Cross-platform UI framework |
| Provider | State management |
| Hive | Local NoSQL database |
| Firebase Auth | User authentication |
| Cloud Firestore | Cloud database |
| Google Fonts | Custom typography |
| Flutter Contacts | Contact integration |
| Permission Handler | Runtime permissions |
| Email Validator | Email validation |
| UUID | Unique ID generation |
| Intl | Internationalization & formatting |
- Provider Pattern: For state management
- Service Layer: Separation of business logic
- Repository Pattern: Data access abstraction
- MVVM: Model-View-ViewModel architecture
To enable authentication and cloud sync:
- Create a Firebase project at Firebase Console
- Add your app to the Firebase project
- Download configuration files:
google-services.jsonfor AndroidGoogleService-Info.plistfor iOS
- Enable Email/Password authentication in Firebase Console
- Set up Cloud Firestore database
Detailed instructions: FIREBASE_SETUP.md
Add to android/app/src/main/AndroidManifest.xml:
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.INTERNET" />Add to ios/Runner/Info.plist:
<key>NSContactsUsageDescription</key>
<string>We need access to your contacts to add participants</string>dependencies:
flutter:
sdk: flutter
cupertino_icons: ^1.0.8
hive: ^2.2.3
hive_flutter: ^1.1.0
provider: ^6.1.2
uuid: ^4.5.1
intl: ^0.19.0
google_fonts: ^6.3.2
flutter_contacts: ^1.1.7
permission_handler: ^11.3.1
email_validator: ^2.1.17
firebase_core: ^3.6.0
firebase_auth: ^5.3.1
cloud_firestore: ^5.4.4
dev_dependencies:
flutter_test:
sdk: flutter
flutter_lints: ^5.0.0
build_runner: ^2.4.14
hive_generator: ^2.0.1flutter build apk --release
# or for app bundle
flutter build appbundle --releaseflutter build ios --releaseflutter build web --releaseflutter build windows --releaseRun tests with:
flutter testContributions are welcome! 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
- Follow Effective Dart guidelines
- Use meaningful variable and function names
- Add comments for complex logic
- Keep functions small and focused
This project is licensed under the MIT License - see the LICENSE file for details.
Keyur Mistry
- GitHub: @369KeYuRmIsTrY
- Inspired by Splitwise
- Built with Flutter
- Icons from Material Design Icons
- Fonts from Google Fonts
If you have any questions or need help, feel free to:
- Open an issue on GitHub
- Contact me through GitHub
- Multiple currency support
- Expense categories and tags
- Receipt image upload
- Export data to CSV/PDF
- Push notifications
- Group chat functionality
- Recurring expenses
- Advanced splitting options (percentage, shares)
- Payment integration
- Multi-language support
This project is actively maintained and under development. New features and improvements are added regularly.
If you find this project useful, please consider giving it a βοΈ
Made with β€οΈ using Flutter
