Skip to content

mohsinali1434/split_expenses

Β 
Β 

Repository files navigation

πŸ’° Split Expenses - Mini Splitwise

Flutter Firebase Dart

A beautiful and intuitive expense splitting application built with Flutter

Features β€’ Screenshots β€’ Installation β€’ Usage β€’ Architecture β€’ Contributing


πŸ“– About

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.

✨ Features

🎯 Core Features

  • 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

πŸ” Authentication & Sync

  • 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

🎨 User Experience

  • 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

πŸ“± Additional Features

  • 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

πŸ“₯ Download & Try Now!

πŸŽ‰ Latest Release: v1.0.0

Want to try the app right away? Download the latest release!

πŸ€– For Android Users

πŸ‘‰ Go to Releases Page to Download APK

Once on the Releases page:

  1. Look for v1.0.0 release
  2. Download split-expenses-v1.0.0.apk (50.2 MB)
  3. Install on your Android device

πŸ“‹ Quick Install Steps

  1. Download the APK file from the Releases page
  2. Enable "Install from Unknown Sources" in your Android settings
  3. Open the APK and tap Install
  4. 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

πŸ“± Application Preview

Split Expenses – Flutter App

πŸš€ Getting Started

Prerequisites

Before you begin, ensure you have the following installed:

Installation

  1. Clone the repository

    git clone https://github.com/369KeYuRmIsTrY/split_expenses.git
    cd split_expenses
  2. Install dependencies

    flutter pub get
  3. Generate Hive adapters

    flutter pub run build_runner build --delete-conflicting-outputs
  4. Set up Firebase (Optional - for authentication and cloud sync)

    Follow the instructions in FIREBASE_SETUP.md to configure Firebase for your project.

  5. Run the app

    flutter run

πŸ“± Usage

Creating a Group

  1. Tap the + button on the home screen
  2. Enter a group name
  3. Add participants from contacts or manually
  4. Tap "Create" to create the group

Adding an Expense

  1. Open a group
  2. Tap the + button
  3. Enter expense details:
    • Description
    • Amount
    • Select who paid
    • Choose participants to split with
  4. Tap "Add Expense"

Viewing Balances

  1. Open a group to see the total spending
  2. Tap the "Summary" tab to view:
    • Individual balances
    • Who owes whom
    • Settlement suggestions

Managing Participants

  1. Open a group
  2. Tap on a participant to:
    • Edit their name
    • View their expenses
    • Delete them (if not involved in expenses)

πŸ—οΈ Architecture

Project Structure

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

Tech Stack

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

Design Patterns

  • Provider Pattern: For state management
  • Service Layer: Separation of business logic
  • Repository Pattern: Data access abstraction
  • MVVM: Model-View-ViewModel architecture

πŸ”§ Configuration

Firebase Setup

To enable authentication and cloud sync:

  1. Create a Firebase project at Firebase Console
  2. Add your app to the Firebase project
  3. Download configuration files:
    • google-services.json for Android
    • GoogleService-Info.plist for iOS
  4. Enable Email/Password authentication in Firebase Console
  5. Set up Cloud Firestore database

Detailed instructions: FIREBASE_SETUP.md

Permissions

Android

Add to android/app/src/main/AndroidManifest.xml:

<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.INTERNET" />

iOS

Add to ios/Runner/Info.plist:

<key>NSContactsUsageDescription</key>
<string>We need access to your contacts to add participants</string>

πŸ“¦ Dependencies

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.1

πŸ› οΈ Building for Production

Android

flutter build apk --release
# or for app bundle
flutter build appbundle --release

iOS

flutter build ios --release

Web

flutter build web --release

Windows

flutter build windows --release

πŸ§ͺ Testing

Run tests with:

flutter test

🀝 Contributing

Contributions are welcome! Here's how you can help:

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/AmazingFeature)
  3. Commit your changes (git commit -m 'Add some AmazingFeature')
  4. Push to the branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

Code Style

  • Follow Effective Dart guidelines
  • Use meaningful variable and function names
  • Add comments for complex logic
  • Keep functions small and focused

πŸ“ License

This project is licensed under the MIT License - see the LICENSE file for details.

πŸ‘¨β€πŸ’» Author

Keyur Mistry

πŸ™ Acknowledgments

πŸ“ž Support

If you have any questions or need help, feel free to:

  • Open an issue on GitHub
  • Contact me through GitHub

πŸ—ΊοΈ Roadmap

Planned Features

  • 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

πŸ“Š Project Status

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

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages

  • Dart 72.5%
  • C++ 13.7%
  • CMake 10.9%
  • Swift 1.3%
  • C 0.8%
  • HTML 0.7%
  • Other 0.1%