Tickets
The Keshless User App includes a ticketing feature that allows users to browse events, purchase tickets, and manage their ticket collection.
Overview
The ticketing system enables:
- Browse upcoming events
- Purchase tickets with wallet balance
- View purchased tickets with QR codes
- Transfer tickets to other users
- Use tickets at event entry
Browse Events
Event List
Events are displayed with:
- Event image/banner
- Event name
- Date and time
- Venue location
- Price range
- Available tickets count
Event Categories
| Category | Examples |
|---|---|
| Music | Concerts, festivals |
| Sports | Football, rugby matches |
| Entertainment | Movies, comedy shows |
| Business | Conferences, seminars |
| Community | Markets, exhibitions |
Event Filtering
| Filter | Description |
|---|---|
| category | Event category |
| fromDate | Start date range |
| toDate | End date range |
| maxPrice | Maximum price |
| location | Event location |
Event Details
The event details page shows:
- Full event description
- Multiple ticket types/tiers
- Seating map (if applicable)
- Organizer information
- Terms and conditions
- Share button
Ticket Types
| Type | Description |
|---|---|
| General | Standard entry |
| VIP | Premium access, perks |
| Early Bird | Discounted early purchase |
| Group | Bundle for multiple people |
Purchase Tickets
Purchase Flow
┌─────────────────┐
│ Select Event │
│ │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Select Ticket │
│ Type & Quantity│
└────────┬────────┘
│
▼
┌─────────────────┐
│ Enter Attendee │
│ Details │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Review Order │
│ (Total + Fees) │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Confirm & Pay │
│ (Enter PIN) │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Success │
│ (View Tickets) │
└─────────────────┘Purchase Request Fields
| Field | Type | Required | Description |
|---|---|---|---|
| eventId | string | Yes | Event ID |
| ticketTypeId | string | Yes | Ticket type ID |
| quantity | number | Yes | Number of tickets |
| attendees | array | Yes | Attendee info per ticket |
Pricing
- Service fee: 5% of ticket price
My Tickets
Ticket List
View all purchased tickets:
- Upcoming events (sorted by date)
- Past events (collapsed)
- Ticket status indicators
Ticket Statuses
| Status | Description | Icon |
|---|---|---|
valid | Ready to use | Green |
used | Already scanned | Gray |
expired | Event passed | Red |
transferred | Sent to another user | Blue |
refunded | Purchase refunded | Yellow |
Ticket View
Each ticket displays:
- Event name and banner
- Date, time, venue
- Ticket type
- Attendee name
- QR code (expandable)
- Ticket number
QR Code Ticket
QR Code Format
| Field | Description |
|---|---|
| type | keshless_ticket |
| ticket_id | Unique ticket ID |
| event_id | Event ID |
| validation_hash | Validation hash |
Display Options
| Mode | Description |
|---|---|
| Normal view | Small QR with ticket details |
| Present view | Full-screen QR, high brightness |
| Offline mode | Cached QR code, works without internet |
Transfer Tickets
Transfer Flow
┌─────────────────┐
│ Select Ticket │
│ to Transfer │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Enter Phone │
│ Number │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Confirm │
│ Recipient │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Enter PIN │
│ │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Transfer │
│ Complete │
└─────────────────┘Transfer Rules
| Rule | Limit |
|---|---|
| Transfers per ticket | 1 |
| Transfer deadline | 24h before event |
| Fee | Free |
API Endpoints
| Endpoint | Method | Description |
|---|---|---|
/events | GET | List events |
/events/:id | GET | Event details |
/events/:id/tickets | GET | Available ticket types |
/tickets/purchase | POST | Purchase tickets |
/tickets/my | GET | User's tickets |
/tickets/:id | GET | Ticket details |
/tickets/:id/transfer | POST | Transfer ticket |
Error Handling
| Error | Cause | Action |
|---|---|---|
TKT_001 | Sold out | View other ticket types |
TKT_002 | Event cancelled | Automatic refund |
TKT_003 | Purchase limit | Max per user reached |
TKT_004 | Transfer failed | Check recipient |
TKT_005 | Already scanned | Contact organizer |
Related Files
| File | Purpose |
|---|---|
lib/screens/tickets/events_list_screen.dart | Events list |
lib/screens/tickets/event_details_screen.dart | Event details |
lib/screens/tickets/purchase_screen.dart | Purchase |
lib/screens/tickets/my_tickets_screen.dart | My tickets |
lib/screens/tickets/ticket_details_screen.dart | Ticket details |
lib/controllers/ticket_controller.dart | Ticket controller |
lib/services/ticket_service.dart | Ticket service |