Case study

KBCL platform

Cross-platform student app for KBCL: courses, video lessons, quizzes, exams, and certificates—with BLoC, secure device checks, and EN/AR localization.

Technologies

AndroidAuto Size TextBLoCBloc ConcurrencyBuild RunnerCached Network ImageCairo (font)Country PickerCredential ManagerCupertino IconsDartzDevice Info PlusDioEasy LocalizationEquatableFlutterFlutter AnimateFlutter Gen RunnerFlutter Image CompressFlutter Launcher IconsFlutter LintsFlutter ScreenUtilFlutter Secure StorageFlutter Side MenuFlutter SVGFlutter ToastFlutterBlocFreezedGet ItGo RouterHTTPInjectableInjectable GeneratorIntlJSON SerializableJSON AnnotationLexend (font)LottieMaterial DesignOpen FilePath ProviderPermission HandlerPersistent Device IDPretty Dio LoggerReactive FormsRename AppSafe DeviceScreen ProtectorShare PlusShared PreferencesShimmer AnimationSkeletonizerText ScrollURL LauncherVector GraphicsVideo PlayerYouTube Player Flutter (fork)
1 / 9

About This Project

<p><span style="font-size: 36px; color: rgb(59, 130, 246);"><strong>K</strong></span><span style="font-size: 32px; color: rgb(59, 130, 246);"><strong>BCL Student Mobile</strong></span><span style="font-size: 32px;"> </span><br><strong>i</strong><span style="font-size: 16px;"><strong>s a production-oriented Flutter application for learners on the KBCL platform</strong>.</span><br><br>It delivers the full student journey: authentication (login, signup, password flows, OTP), <br><br>a home experience for discovering content, detailed course (“level”) screens with enrollment and activation, lesson playback with screen-protection for sensitive content, structured quizzes and final exams with results, and a certificates area for viewing and handling certification assets. <br><br>Legal and informational screens (privacy, terms, about), profile updates, and app settings—including <span><strong>light/dark theme</strong></span> and <span><strong>separate UI vs content language</strong></span>—support a polished, localized experience.<br></p><p>The app is built with <span><strong>feature-first Domain-Driven Design</strong></span>: each feature splits into <span><strong>domain</strong></span> (entities, repository contracts, use cases), <span><strong>data</strong></span> (repositories, Freezed models, remote sources behind a central <span><strong>Dio</strong></span> client), and <span><strong>presentation</strong></span> (<span><strong>flutter_bloc</strong></span>). <span><strong>go_router</strong></span> handles navigation; <span><strong>get_it</strong></span> / <span><strong>injectable</strong></span> wire dependencies. Networking is centralized; =<br>errors are mapped for consistent user-facing messages. <span><strong>easy_localization</strong></span> drives <span><strong>English and Arabic</strong></span>; typography uses <span><strong>Lexend</strong></span> and <span><strong>Cairo</strong></span>. Additional concerns include <span><strong>device safety checks</strong></span> (blocking flow on unsafe devices), <span><strong>device identity</strong></span> for API trust, <span><strong>secure storage</strong></span>, and a <span><strong>custom fork of youtube_player_flutter</strong></span> tailored for KBCL’s lesson player needs.</p><p>Technically, the stack emphasizes maintainability and testability: <span><strong>Freezed</strong></span> + <span><strong>json_serializable</strong></span>, <span><strong>Equatable</strong></span>, <span><strong>reactive_forms</strong></span>, and shared <span><strong>core</strong></span> modules for routing, theme (<span><strong>AppText</strong></span>, color extensions), and status/error helpers—suitable to showcase as a serious mobile engineering sample on a portfolio site.<br></p>