A Flutter application for managing loyalty cards locally. Scan barcodes, store card information, and access your cards anytime without an internet connection.
- Barcode Scanning: Scan loyalty card barcodes using your device camera
- Manual Entry: Enter barcode manually if scanning fails
- Card Management: Store card name, store name, barcode value, and format
- Store Logos: Add custom store logos from your photo library
- Local Storage: All data stored locally using Hive (no cloud sync needed)
- Dark Mode: Full support for light and dark themes
- Card Display: View cards in a beautiful grid layout
- Barcode Display: View scannable barcodes on card detail screen
- Light & Dark Mode: Full support with Material 3 design
- Theme Persistence: Automatically saves user's theme preference
- Customizable Colors: Comprehensive color system with semantic naming
- Typography: Pre-configured text styles for consistent UI
- Input Widgets: Text fields, dropdowns, date/time pickers
- Buttons: Primary, secondary, outlined, and text button variants
- Cards: Consistent card components
- Dialogs: Customizable dialog system
- Loading Indicators: Various loading states
- GoRouter: Modern declarative routing
- Type-safe Routes: Route constants for better maintainability
- Error Handling: Built-in 404 error pages
- Flutter SDK 3.9.2 or higher
- Dart SDK
- Camera access (for barcode scanning)
- Photo library access (for selecting store logos)
git clone <repository-url>
cd PulseCardAppflutter pub getAfter installing dependencies, generate the Hive type adapters:
flutter pub run build_runner build --delete-conflicting-outputsflutter runlib/
βββ main.dart # App entry point
βββ core/
β βββ config/ # Configuration files
β β βββ app_config.dart # App-level configuration
β β βββ environment.dart # Environment enum
β βββ constants/
β β βββ app_constants.dart # App-wide constants
β βββ routing/
β β βββ app_router.dart # Navigation configuration
β βββ theme/ # Theme system
β β βββ app_theme.dart # Main theme configuration
β β βββ app_colors.dart # Color definitions
β β βββ app_text_styles.dart # Text style definitions
β βββ utils/
β βββ app_icons.dart # Icon helper
βββ features/ # Feature modules
β βββ cards/ # Loyalty cards feature
β β βββ models/ # Card model
β β βββ services/ # Storage service
β β βββ providers/ # State management
β β βββ screens/ # Card detail screen
β βββ home/ # Home screen
β βββ scanner/ # Scanner screen
β βββ settings/ # Settings screen
β βββ splash/ # Splash screen
βββ shared/
βββ widgets/ # Reusable widgets
βββ inputs/ # Input widgets
βββ buttons/ # Button widgets
βββ cards/ # Card widgets
βββ loading/ # Loading indicators
βββ dialogs/ # Dialog widgets
βββ snackbars/ # Snackbar widgets
- mobile_scanner: Barcode scanning using device camera
- hive: Local NoSQL database for storing cards
- hive_flutter: Flutter integration for Hive
- image_picker: Selecting store logos from photo library
- barcode_widget: Displaying scannable barcodes
- path_provider: File system paths for storing images
- provider: State management
- go_router: Navigation
- shared_preferences: Theme persistence
- Tap the "Scan Card" floating action button on the home screen
- Point your camera at the barcode
- Once scanned, fill in the store name (required) and optional card name
- Optionally add a store logo from your photo library
- Tap "Save Card" to store it locally
- Cards are displayed in a grid on the home screen
- Each card shows the store logo (or placeholder), store name, and card name
- Tap any card to view details including the scannable barcode
- Use the menu button on the detail screen to edit or delete cards
- Toggle dark mode from the settings screen
- View app version information
- Clear all cards (with confirmation)
All loyalty card data is stored locally on your device using Hive:
- No internet connection required
- No cloud sync
- Data persists across app restarts
Store logos are stored locally in the app's document directory:
- When you select an image from your photo library, it's copied to the app's private storage
- The file path is saved in the Hive database along with the card information
- Images are retrieved using
File(card.logoPath!)when displaying cards - If an image file is missing or corrupted, a placeholder icon is shown instead
The app requires the following permissions:
- Camera: For scanning barcodes
- Photo Library: For selecting store logos (iOS)
flutter test# Android
flutter build apk --release
# iOS
flutter build ios --releaseIf you modify the LoyaltyCard model, regenerate the Hive adapter:
flutter pub run build_runner build --delete-conflicting-outputsThis project is licensed under the MIT License - see the LICENSE file for details.
For issues, questions, or contributions, please open an issue on the repository.
