EJ Flutter App is the mobile codebase behind an inspector exam preparation experience that combines authentication, exam unlocks, paid resources, quiz sessions, performance tracking, referrals, and profile management in a single Flutter application.
It uses a controller-driven structure with GetX for state management, GoRouter for navigation, http for API access, local persistence for session data, deep links for shared content, and Stripe for purchase flows.
A compact product flow showing home, unlock, resources, exam practice, results, and profile management.
![]() Home |
![]() Exam Unlock |
![]() Checkout Add-on |
![]() Resources |
![]() Category List |
![]() Resource Details |
![]() Resource Payment |
![]() Exam Session |
![]() Exam Review |
![]() Results |
![]() Performance |
![]() Profile |
Get the latest Android build
Download Android APK
Recommended next step after previewing the product flow. Open the APK link to install and test the latest mobile build.
- Authentication, onboarding, OTP verification, password reset, and remember-me login
- Exam selection, unlock flows, subscription upsell, and Stripe-based payment handling
- Resource browsing with category pages, detail pages, and PDF-based content delivery
- Quiz sessions, review flow, score summary, and performance tracking
- Referral and shared-link flows through app links
- Persistent local session and installation identity handling
- Flutter and Dart
GetXfor app state and controllersGoRouterfor route handlinghttpfor API requestsshared_preferencesandflutter_secure_storagefor persistenceflutter_stripefor checkout flowsapp_linksfor deep-link handlingsyncfusion_flutter_pdfviewerfor in-app PDF viewing
lib/
├── controllers/ # GetX controllers and app state orchestration
├── models/ # API models and domain entities
├── routes/ # GoRouter route definitions
├── services/ # API, auth, storage, referral, ebook, and exam services
├── utils/ # Constants, theme, colors, navigation helpers
└── views/ # Screens and reusable UI widgets
- Auth: splash, onboarding, login, sign up, forgot password, OTP, reset password
- Practice: home, quiz settings, exam session, review, results, performance
- Resources: resource tab, category list, detail page, PDF viewer, purchase path
- Account: profile, edit profile, change password, subscription, referral
- Flutter SDK
- Dart SDK
- Android Studio or VS Code with Flutter tooling
- Android emulator, iOS simulator, or a physical device
flutter pub getflutter runflutter build apk --release
flutter build ios --releaseUpdate the main runtime constants in lib/utils/app_constants.dart.
Important values:
AppConstants.apiOriginAppConstants.baseUrlAppConstants.publicBaseUrlAppConstants.appLinkSchemeAppConstants.stripePublishableKey
Theme and styling live in:
- The screenshot assets in this README currently live under
docs/screenshorts/. - The project uses
GetX, not Riverpod. - The Stripe publishable key is currently defined in source; for production, it should move to a safer environment-based configuration.











