Repat Event is a comprehensive event management application built with Flutter and Firebase. The app allows users to discover, book, and manage events, with features for both event attendees and organizers. The application follows clean architecture principles and uses BLoC pattern for state management.
- Event Discovery: Browse and search for upcoming events with filtering options
- Event Registration: Register for events with ticket purchasing functionality
- Event Management: View registered events and manage bookings
- Booking Cancellation: Cancel event bookings with reason tracking
- Event Reviews: Leave reviews for past events
- User Authentication: Secure login with Firebase Authentication
- Clean Architecture: Separation of concerns with domain, data, and presentation layers
- BLoC Pattern: Reactive state management using the BLoC pattern
- Firebase Integration: Real-time data with Cloud Firestore
- Responsive UI: Beautiful and responsive UI that works across devices
- Offline Support: Basic functionality works offline with data synchronization
- Error Handling: Comprehensive error handling and user feedback
The application follows Clean Architecture principles with the following layers:
- Domain Layer: Contains business logic, entities, and use cases
- Data Layer: Implements repositories and data sources
- Presentation Layer: Contains UI components and BLoC state management
lib/
├── core/ # Core functionality and utilities
│ ├── errors/ # Error handling
│ ├── fixtures/ # Test fixtures
│ ├── themes/ # App themes
│ └── usecases/ # Base use case definitions
├── features/ # Feature modules
│ ├── app/ # App initialization
│ ├── auth/ # Authentication
│ └── events/ # Events feature
│ ├── data/ # Data layer (repositories, models, sources)
│ ├── domain/ # Domain layer (entities, use cases)
│ └── presentation/ # Presentation layer (UI, bloc)
└── l10n/ # Localization
This project contains 3 flavors:
- development
- staging
- production
To run the desired flavor either use the launch configuration in VSCode/Android Studio or use the following commands:
# Development
$ flutter run --flavor development --target lib/main_development.dart
# Staging
$ flutter run --flavor staging --target lib/main_staging.dart
# Production
$ flutter run --flavor production --target lib/main_production.dart
- Flutter SDK (version 3.6.0 or higher)
- Dart SDK (version 3.6.0 or higher)
- Firebase project setup
- Android Studio / VS Code with Flutter extensions
- Create a Firebase project in the Firebase Console
- Add Android and iOS apps to your Firebase project
- Download and add the configuration files (google-services.json, GoogleService-Info.plist)
- Enable Authentication and Firestore in the Firebase Console
*Repat Event works on iOS, Android, Web, and Windows.
Below are screenshots showcasing the key screens and features of the Repat Event application:
Screen | Screenshot |
---|---|
Events List | ![]() |
Event Details | ![]() |
Event Registration | ![]() |
Payment Confirmation | ![]() |
Booking Cancellation | ![]() |
Success Dialog | ![]() |
User Events | ![]() |
Reviews | ![]() |
To run all unit and widget tests use the following command:
$ flutter test --coverage --test-randomize-ordering-seed random
To view the generated coverage report you can use lcov.
# Generate Coverage Report
$ genhtml coverage/lcov.info -o coverage/
# Open Coverage Report
$ open coverage/index.html
This project relies on flutter_localizations and follows the official internationalization guide for Flutter.
- To add a new localizable string, open the
app_en.arb
file atlib/l10n/arb/app_en.arb
.
{
"@@locale": "en",
"counterAppBarTitle": "Counter",
"@counterAppBarTitle": {
"description": "Text shown in the AppBar of the Counter Page"
}
}
- Then add a new key/value and description
{
"@@locale": "en",
"counterAppBarTitle": "Counter",
"@counterAppBarTitle": {
"description": "Text shown in the AppBar of the Counter Page"
},
"helloWorld": "Hello World",
"@helloWorld": {
"description": "Hello World Text"
}
}
- Use the new string
import 'package:repat_event/l10n/l10n.dart';
@override
Widget build(BuildContext context) {
final l10n = context.l10n;
return Text(l10n.helloWorld);
}
Update the CFBundleLocalizations
array in the Info.plist
at ios/Runner/Info.plist
to include the new locale.
...
<key>CFBundleLocalizations</key>
<array>
<string>en</string>
<string>es</string>
</array>
...
- For each supported locale, add a new ARB file in
lib/l10n/arb
.
├── l10n
│ ├── arb
│ │ ├── app_en.arb
│ │ └── app_es.arb
- Add the translated strings to each
.arb
file:
app_en.arb
{
"@@locale": "en",
"counterAppBarTitle": "Counter",
"@counterAppBarTitle": {
"description": "Text shown in the AppBar of the Counter Page"
}
}
app_es.arb
{
"@@locale": "es",
"counterAppBarTitle": "Contador",
"@counterAppBarTitle": {
"description": "Texto mostrado en la AppBar de la página del contador"
}
}
To use the latest translations changes, you will need to generate them:
- Generate localizations for the current project:
flutter gen-l10n --arb-dir="lib/l10n/arb"
Alternatively, run flutter run
and code generation will take place automatically.