Flutter app with local SQLite storage and local notifications.
- Flutter
- SQLite via
sqflite - State management via
provider - Local reminders via
flutter_local_notifications
- Expense tracker
- Amount
- Category
- Payment type (Cash/Online)
- Date
- Optional comment
- Monthly income and summary
- First-day income prompt if missing
- Income/expense/balance overview
- Highest spending category
- Daily average spending
- Budget warning when spending reaches 70% of monthly income
- Task scheduler
- Add task with deadline
- Optional reminder notification
- Mark complete
- Carry-forward incomplete tasks
- Productivity extras
- Dark mode toggle (from dashboard)
- Export current month expenses to CSV from Expenses screen
expenses(id, amount, category, payment_type, date, comment)income(id, month, year, amount)tasks(id, title, description, deadline, is_completed, reminder_time)
Indexes:
idx_expenses_dateidx_expenses_category
lib/
├── main.dart
├── core/
│ ├── database/db_helper.dart
│ ├── models/
│ │ ├── expense_model.dart
│ │ ├── income_model.dart
│ │ └── task_model.dart
│ └── services/notification_service.dart
├── features/
│ ├── dashboard/dashboard_screen.dart
│ ├── expenses/
│ │ ├── add_expense_screen.dart
│ │ └── expense_list.dart
│ ├── summary/monthly_summary_screen.dart
│ └── tasks/task_screen.dart
└── providers/
├── expense_provider.dart
└── task_provider.dart
- Install Flutter SDK and Android Studio.
- In this project folder run:
flutter create .
flutter pub get
flutter runflutter build apk --releaseOutput:
build/app/outputs/flutter-apk/app-release.apk
- Update
applicationIdandnamespaceinandroid/app/build.gradle.ktsfromcom.example...to your own reverse-domain ID. - Move
MainActivity.ktpackage path if you change the namespace.
- Create
android/key.properties(do not commit it):
storePassword=YOUR_STORE_PASSWORD
keyPassword=YOUR_KEY_PASSWORD
keyAlias=upload
storeFile=../upload-keystore.jks- Keep your keystore file safe (example:
android/upload-keystore.jks).
flutter clean
flutter pub get
flutter build appbundle --releaseOutput:
build/app/outputs/bundle/release/app-release.aab
- Replace default launcher icon and app name if needed.
- Verify notification behavior on Android 13+ (runtime notification permission).
- Update version in
pubspec.yamlfor each release. - Test install and upgrade path using release builds.
- Complete Play Console listing (privacy policy, screenshots, content rating, data safety form).
lib/pubspec.yamlpubspec.lockREADME.mdandroid/key.properties(private)- Your keystore file (
*.jks/*.keystore, private) android/app/google-services.jsonif you add Firebase laterios/Runner/GoogleService-Info.plistif you add Firebase later