# HogarControl Flutter app for tracking home bills and recurring expenses. All data stored locally via SQLite — no internet required, no accounts. ## Build & install ```bash export JAVA_HOME=/root/.sdkman/candidates/java/21.0.11-amzn flutter pub get flutter build apk --debug adb install build/app/outputs/flutter-apk/app-debug.apk ``` ## Prerequisites - **JDK 21** via SDKMAN: `sdk use java 21.0.11-amzn` - **Android SDK** at `/opt/android-sdk` (set via `flutter config --android-sdk /opt/android-sdk`) - **Flutter 3.27.4** at `/opt/flutter/bin` - NDK `27.0.12077973` (set in `android/app/build.gradle`) ## Key config - `android/app/build.gradle` — compileSdk 35, minSdk 26, targetSdk 35, coreLibraryDesugaringEnabled, AGP 8.7.3 - `android/settings.gradle` — AGP + Kotlin plugin versions - Permissions: `INTERNET`, `POST_NOTIFICATIONS`, `RECEIVE_BOOT_COMPLETED`, `SCHEDULE_EXACT_ALARM` ## Stack - **State**: Provider (`ChangeNotifierProvider` for `Servicio`, `Factura`, `Configuracion`) - **DB**: sqflite (single DB `hogarcontrol.db`, tables: `servicios`, `facturas`, `configuracion`) - **Notifications**: `flutter_local_notifications` with `zonedSchedule` + timezone - **Charts**: fl_chart (bar chart) + table_calendar - **UI**: Material 3, no router (manual Navigator pushes) ## Project layout | Path | Purpose | |---|---| | `lib/main.dart` | App entry, MultiProvider setup, theme | | `lib/models/` | Data classes (`Servicio`, `Factura`, `Configuracion`) | | `lib/database/database_helper.dart` | Singleton DB with CRUD helpers | | `lib/providers/` | ChangeNotifier state classes | | `lib/screens/` | 9 screens (Splash → Dashboard → ...) | | `lib/services/notification_service.dart` | Local notification scheduling | | `lib/widgets/` | Reusable UI components | ## DB schema - `servicios` — id, nombre, icono, color, dia_vencimiento, fecha_creacion - `facturas` — id, servicio_id (FK), monto, fecha_emision, fecha_vencimiento, estado, nota, fecha_pago - `configuracion` — id, dias_recordatorio (comma-separated), tema, moneda ## Warnings - `dart analyze` may flag unused imports/variables in screens — safe to ignore for widget-tree watchers - Running as root causes flutter warnings but doesn't break builds - Flutter 3.27.4 has known warnings about x86 target deprecation