A Flutter mobile app to track subscriptions and receive payment reminders.
cd subscription_alert
flutter pub get
com.example.subscription_alertgoogle-services.jsonandroid/app/com.example.subscriptionAlertGoogleService-Info.plistios/Runner/Enable Firebase Services
Authentication:
Firestore:
# Install FlutterFire CLI
dart pub global activate flutterfire_cli
# Configure Firebase
flutterfire configure
This will update lib/firebase_options.dart with your configuration.
For Google Sign-In to work on Android:
# Debug key
cd android
./gradlew signingReport
Copy the SHA-1 fingerprint and add it to Firebase Console:
In Firebase Console > Firestore > Rules, add:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
// Users can only access their own data
match /users/{userId} {
allow read, write: if request.auth != null && request.auth.uid == userId;
// Subscriptions subcollection
match /subscriptions/{subscriptionId} {
allow read, write: if request.auth != null && request.auth.uid == userId;
}
}
}
}
# Android
flutter run
# iOS (macOS only)
cd ios && pod install && cd ..
flutter run
lib/
βββ main.dart # App entry point
βββ firebase_options.dart # Firebase configuration
βββ models/
β βββ subscription.dart # Subscription data model
βββ services/
β βββ auth_service.dart # Firebase Auth service
β βββ firestore_service.dart # Firestore CRUD operations
β βββ notification_service.dart # Local notifications
βββ providers/
β βββ auth_provider.dart # Auth state providers
β βββ subscription_providers.dart # Subscription providers
βββ screens/
β βββ login_screen.dart # Google Sign-In screen
β βββ home_screen.dart # Main subscription list
β βββ add_edit_subscription_screen.dart # Add/Edit form
βββ widgets/
βββ subscription_list_item.dart # Subscription card widget
users/
βββ {userId}/
βββ subscriptions/
βββ {subscriptionId}/
βββ name: String
βββ price: Number
βββ currency: String
βββ cycle: String ("monthly" | "yearly")
βββ nextPaymentDate: Timestamp
βββ createdAt: Timestamp
βββ updatedAt: Timestamp
The app schedules two notifications per subscription:
Notifications persist after:
In lib/screens/add_edit_subscription_screen.dart:
static const List<String> _currencies = ['UZS', 'USD', 'EUR', 'RUB'];
In lib/screens/add_edit_subscription_screen.dart:
static const List<String> _cycles = ['monthly', 'yearly', 'weekly'];
Donβt forget to update monthlyEquivalent in the model.
google-services.json is in android/app/SCHEDULE_EXACT_ALARM permissionPOST_NOTIFICATIONS permission is grantedflutter clean
flutter pub get
cd android && ./gradlew clean && cd ..
flutter run
MIT License - feel free to use this for your own projects!