A comprehensive Flutter application for managing personal finances locally. Take complete control of your money with an intuitive interface for tracking income, expenses, transactions, and financial goals.
- Authentication: Secure user authentication using Firebase Auth
- Dashboard: Overview of your financial status and key metrics
- Cash Flow Management: Track income and expenses with detailed transaction groups and categories
- Transaction Tracking: Record and manage all financial transactions
- Wallet Management: Monitor wallet balances and transactions
- Spending Analysis: Visualize spending patterns with charts and analytics
- Local Storage: Data stored locally using Hive for offline-first functionality
- Dark Mode Support: Beautiful dark and light themes
- Firebase Integration: Cloud Firestore for data synchronization and Firebase Remote Config
- Flutter: 3.35.4 (via FVM)
- Dart: ^3.8.1
- Firebase: Authentication, Firestore, Remote Config
- State Management: BLoC (flutter_bloc ^9.1.1)
- Local Storage: Hive (^2.2.3)
- Dependency Injection: GetIt (^7.6.7) + Injectable (^2.4.1)
- Routing: GoRouter (^16.2.1)
- Charts: FL Chart (^1.1.0)
- Code Generation: Freezed (^3.2.3), Build Runner (^2.7.1)
- Testing: flutter_test, bloc_test (^10.0.0), mocktail (^1.0.1)
- Linting: flutter_lints (^5.0.0)
- Flutter SDK 3.35.4 (install via FVM)
- Dart SDK ^3.8.1
- Firebase project configured
- Android Studio / Xcode (for mobile development)
- Git
git clone <repository-url>
cd ultimate_finance_app# macOS/Linux
brew tap leoafarias/fvm
brew install fvm
# Or using pub
dart pub global activate fvmfvm install 3.35.4
fvm use 3.35.4fvm flutter pub get-
Copy your Firebase configuration files:
- Android:
google-services.jsonβandroid/app/ - iOS:
GoogleService-Info.plistβios/Runner/
- Android:
-
Ensure Firebase is properly initialized in your Firebase console.
Run code generation for Freezed and Injectable:
fvm flutter pub run build_runner build --delete-conflicting-outputs# Development
fvm flutter run
# Specific platform
fvm flutter run -d chrome # Web
fvm flutter run -d ios # iOS
fvm flutter run -d android # Androidlib/
βββ common/ # Shared utilities and components
β βββ remoteconfig/ # Remote config implementations
β βββ repositories/ # Shared repositories
β βββ router/ # App routing configuration
β βββ services/ # Shared services (Hive, Remote Config)
β βββ theme/ # App themes and styling
β βββ utils/ # Utility functions
β βββ widgets/ # Reusable widgets
βββ di/ # Dependency injection
β βββ injection.dart # Injectable configuration
β βββ injection.config.dart # Generated DI config
β βββ injection_manual.dart # Manual DI setup
βββ feature/ # Feature modules
β βββ auth/ # Authentication
β β βββ data/ # Models, repositories, services
β β βββ presentation/ # BLoC, views, widgets
β βββ cash_flow/ # Cash flow management
β βββ dashboard/ # Dashboard screen
β βββ spending/ # Spending analysis
β βββ wallet/ # Wallet management
βββ main.dart # App entry point
test/ # Test files
βββ feature/ # Feature-specific tests
βββ widget_test.dart # Widget tests
The app follows Clean Architecture principles with BLoC pattern for state management:
- Presentation Layer: BLoC, Views, Widgets
- Data Layer: Models, Repositories, Services
- Domain Layer: Business logic and entities
- Dependency Injection: GetIt + Injectable for service location
- BLoC Pattern: Using
flutter_blocfor predictable state management - Events: User actions trigger events
- States: UI reacts to state changes
- Repository Pattern: Abstraction layer between data sources and business logic
# All tests
fvm flutter test --no-pub -r compact --coverage
# Specific test file
fvm flutter test test/feature/cash_flow/data/models/transaction_group_test.dart
# Integration tests
fvm flutter test integration_test/app_test.dart# Generate coverage report
fvm flutter test --coverage
# View coverage (requires lcov)
genhtml coverage/lcov.info -o coverage/html
open coverage/html/index.html- Unit Tests:
flutter_test - BLoC Tests:
bloc_testfor testing state transitions - Mocking:
mocktailfor creating test doubles - Widget Tests: Test individual widgets in isolation
# Watch mode (auto-generate on file changes)
fvm flutter pub run build_runner watch --delete-conflicting-outputs
# One-time generation
fvm flutter pub run build_runner build --delete-conflicting-outputs# Analyze code
fvm flutter analyze
# Fix auto-fixable issues
fvm flutter fix# Android APK
fvm flutter build apk --release
# Android App Bundle
fvm flutter build appbundle --release
# iOS
fvm flutter build ios --release
# Web
fvm flutter build web --releasebloc&flutter_bloc: State managementget_it: Dependency injectioninjectable: Code generation for DIfreezed: Immutable classes and unions
hive&hive_flutter: Local NoSQL databasecloud_firestore: Cloud databasefirebase_auth: Authenticationfirebase_remote_config: Remote configuration
go_router: Declarative routingfl_chart: Beautiful chartsequatable: Value equality
gsheets: Google Sheets integration (optional)
The app includes a custom green finance theme with:
- Light theme: Green-based color scheme
- Dark theme: Dark variant with green accents
- Automatic theme switching based on system preferences
- User logs in via Firebase Auth
- Authentication state is managed by
AuthBloc - Router redirects based on auth state
- Protected routes require authentication
- Groups transactions by category (income, expense, income_debt, loan)
- Predefined groups for income and expenses
- Represents individual financial transactions
- Includes amount, date, category, and metadata
- Subcategories within transaction groups
- Links to parent group via
groupId
The app uses Firebase for:
- Authentication: User login and registration
- Firestore: Optional cloud data synchronization
- Remote Config: Feature flags and remote configuration
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is private and not published.
For issues and questions, please open an issue in the repository.
Current version: 1.0.0+1
Built with β€οΈ using Flutter