A Flutter app for tracking recurring payments from clients that works entirely offline.
- Track recurring payments with client name, amount, and frequency (monthly/weekly)
- Mark payments as paid and automatically schedule next due date
- View total amount due this month
- Local notifications one day before payment due dates
- Add new payments with form validation
- Delete payments with long-press
- Offline-first with Hive local storage
- Flutter ≥ 3.22
- Dart ≥ 3.0
get- State managementhive&hive_flutter- Local databaseintl- Date/number formattingflutter_local_notifications- Push notificationspath_provider- File system pathstimezone- Timezone handling
-
Clone or create the project structure:
# If cloning, navigate to project directory cd paytick
-
Install dependencies:
flutter pub get
-
Generate Hive adapters:
flutter packages pub run build_runner build
-
Run the app:
flutter run
Run unit tests:
flutter testThe test suite includes:
- PaymentFrequency.nextDate logic validation
- PaymentController.togglePaid functionality
- Edge cases for date calculations
- Data persistence verification
lib/
├── model/
│ └── payment.dart # Payment model & Hive adapter
├── controller/
│ └── payment_controller.dart # GetX controller with business logic
├── ui/
│ ├── payments_page.dart # Main payments list page
│ └── add_payment_page.dart # Add payment form
├── utils/
│ └── date_utils.dart # Date utility functions
└── main.dart # App entry point
test/
├── payment_frequency_test.dart # Unit tests for frequency logic
└── payment_controller_test.dart # Unit tests for controller
-
Add a Payment:
- Tap the + button
- Fill in client name, amount, frequency, and next due date
- Tap "Add Payment"
-
Mark Payment as Paid:
- Tap the checkbox next to a payment
- The next due date will automatically advance based on frequency
-
Delete a Payment:
- Long-press on a payment item
- Confirm deletion in the dialog
-
View Monthly Total:
- The banner at the top shows total amount due this month
The app schedules local notifications one day before each payment is due. Make sure to grant notification permissions when prompted.
The app works entirely offline using Hive for local storage. All data is persisted locally on the device.
- Android ✅
- iOS ✅ (with additional notification setup)
- Web
⚠️ (limited Hive support) - Desktop
⚠️ (limited notification support)