Skip to content

Expense & Income Tracker. A feature-rich Flutter mobile application for seamlessly tracking expenses and income across multiple currencies. Built with Clean Architecture principles, featuring offline-first functionality, secure OAuth authentication, and real-time financial insights.

Notifications You must be signed in to change notification settings

shihabkandil/extro

Repository files navigation

iOS CI Build Android CI Build Analyze & Format & Test

Extro

A Flutter expense and income tracking application built with Clean Architecture principles.

🏗️ Architecture

This project follows Clean Architecture with three main layers:

  • Data Layer: API clients, repositories, request/response models
  • Domain Layer: Business logic, entities, cubits, repository interfaces
  • Presentation Layer: UI components, screens, widgets

📁 Project Structure

lib/
├── common/          # Shared utilities and components
│   ├── constants/
│   ├── data/
│   ├── domain/
│   └── presentation/
│       ├── ui_utils/
│       └── widgets/
├── core/           # Core functionality
│   ├── di/         # Dependency injection
│   ├── network/    # Network client and API setup
│   ├── failures/   # Error handling
│   ├── extensions/ # Dart extensions
│   ├── providers/  # Service providers
│   └── utils/      # Utility functions
├── features/       # Feature modules
│   └── example/
│       ├── data/
│       │   ├── models/
│       │   ├── repositories/
│       │   └── datasources/
│       ├── domain/
│       │   ├── entities/
│       │   ├── cubits/
│       │   └── repositories/
│       └── presentation/
│           ├── screens/
│           └── widgets/
├── gen/           # Generated files (localization, code generation)
└── l10n/          # Localization files

assets/
├── fonts/         # Font files
├── images/        # Image assets
└── svgs/          # SVG files

🚀 Getting Started

Prerequisites

  • Flutter SDK (>= 3.0.0)
  • Dart SDK (>= 3.0.0)

Installation

  1. Clone the repository:
git clone https://github.com/shihabkandil/extro.git
cd extro
  1. Install dependencies:
flutter pub get
  1. Run code generation:
flutter pub run build_runner build --delete-conflicting-outputs
flutter gen-l10n
  1. Configure OAuth providers (optional for development):

    • See docs/OAUTH_SETUP.md for Google and Apple Sign-In setup
    • Configure OAuth credentials in Google Cloud Console and Apple Developer Portal
  2. Run the app:

flutter run

🔧 Key Technologies

  • State Management: flutter_bloc
  • Dependency Injection: get_it + injectable
  • Immutable Models: freezed
  • Network: dio
  • Functional Programming: dartz
  • Localization: flutter_localizations
  • Authentication: google_sign_in + sign_in_with_apple

✨ Features

  • OAuth Authentication: Sign in with Google and Apple (no Firebase required)
  • Clean Architecture: Separation of concerns with data, domain, and presentation layers
  • Type-safe Models: Immutable data structures using Freezed
  • Error Handling: Comprehensive error handling with Either pattern
  • Internationalization: Multi-language support ready

📝 Code Generation

This project uses code generation for:

  • Freezed models
  • JSON serialization
  • Dependency injection
  • Localization

Run the following command after making changes:

flutter pub run build_runner build --delete-conflicting-outputs

Or use watch mode for development:

flutter pub run build_runner watch --delete-conflicting-outputs

🌍 Localization

Add translations to lib/l10n/app_en.arb and run:

flutter gen-l10n

📖 Developer Guidelines

See the comprehensive documentation in the docs/ directory:

📄 License

This project is licensed under the MIT License.

About

Expense & Income Tracker. A feature-rich Flutter mobile application for seamlessly tracking expenses and income across multiple currencies. Built with Clean Architecture principles, featuring offline-first functionality, secure OAuth authentication, and real-time financial insights.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •  

Languages