-
Notifications
You must be signed in to change notification settings - Fork 1
Feat/add localization support #4
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
|
The latest updates on your projects. Learn more about Vercel for Git ↗︎
|
WalkthroughThis update removes a large number of generated build artifacts and configuration files related to Android and iOS native builds, including CMake, Ninja, and Gradle outputs for multiple ABIs. It also deletes platform-specific launcher icon assets and documentation files. In their place, new configuration files for localization ( Changes
Sequence Diagram(s)sequenceDiagram
participant User
participant ProgresApp
participant BlocProviders
participant CalendarControllerProvider
participant ThemeBloc
participant MaterialApp.router
participant GalleryLocalizations
User->>ProgresApp: Launch app
ProgresApp->>BlocProviders: Initialize all Blocs (theme, auth, etc.)
ProgresApp->>CalendarControllerProvider: Wrap child for calendar events
ProgresApp->>ThemeBloc: Listen for theme changes
ThemeBloc-->>ProgresApp: Provide current theme state
ProgresApp->>MaterialApp.router: Build app with router, theme, and localization
MaterialApp.router->>GalleryLocalizations: Load localization based on locale
User->>ProgresApp: Interact (e.g., change theme/locale)
ProgresApp->>BlocProviders: Update state as needed
BlocProviders-->>ProgresApp: Notify of state changes
ProgresApp->>MaterialApp.router: Rebuild with updated options
sequenceDiagram
participant Widget
participant ContinuousAssessment
participant GalleryLocalizations
Widget->>ContinuousAssessment: Request assessmentTypeLabel(context)
ContinuousAssessment->>GalleryLocalizations: Get localized label for type (e.g., PRJ, TD, TP)
GalleryLocalizations-->>ContinuousAssessment: Return localized string
ContinuousAssessment-->>Widget: Return localized label
Poem
📜 Recent review detailsConfiguration used: CodeRabbit UI 📒 Files selected for processing (1)
🚧 Files skipped from review as they are similar to previous changes (1)
🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 4
🧹 Nitpick comments (5)
l10n.yaml (1)
1-7: Naming convention may need reviewThe output class and file name "GalleryLocalizations" and "gallery_localizations.dart" suggest they might have been copied from another project (like Flutter Gallery). Consider renaming these to match your project (e.g., "ProgresLocalizations" and "progres_localizations.dart").
-output-localization-file: gallery_localizations.dart -output-class: GalleryLocalizations +output-localization-file: progres_localizations.dart +output-class: ProgresLocalizationslib/features/academics/data/models/continuous_assessment.dart (1)
72-82: Make localization access more null-safeThe non-null assertion on
GalleryLocalizations.of(context)!could cause runtime errors if the localizations aren't available. Consider adding a null check.String assessmentTypeLabel(BuildContext context) { switch (apCode) { case 'PRJ': - return GalleryLocalizations.of(context)!.project; + return GalleryLocalizations.of(context)?.project ?? apCode; case 'TD': - return GalleryLocalizations.of(context)!.tutorialWork; + return GalleryLocalizations.of(context)?.tutorialWork ?? apCode; case 'TP': - return GalleryLocalizations.of(context)!.practicalWork; + return GalleryLocalizations.of(context)?.practicalWork ?? apCode; default: return apCode; } }lib/config/options.dart (3)
16-18:systemLocaleOptionis unused and potentially misleading
Locale('system')is not a valid ISO language code and the constant is never referenced. Keeping dead code can confuse future maintainers.
Consider deleting it unless another file relies on it.-// Fake locale to represent the system Locale option. -const systemLocaleOption = Locale('system');
19-25: GlobaldeviceLocalesetter silently ignores subsequent updatesThe one‑shot assignment (
_deviceLocale ??= locale) means a change triggered by a user altering the device language while the app is alive will be ignored.If that’s intentional, add a comment. Otherwise, convert this into a mutable
ValueNotifier<Locale?>or push the value throughModelBindingso widgets can react to live locale changes.
173-178:MediaQuery.copyWithoverrides the existingtextScaleronlyOther fields (size, padding, accessibility settings) remain identical because the parent
MediaQueryis reused. That’s fine today, but adding moreAppOptions(e.g. bold text, high‑contrast) later will force another wrapper.Consider storing the computed
MediaQueryDatain a local variable and copying all relevant fields at once to keep this area maintainable.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (70)
android/app/.cxx/Debug/3k6y3ogb/arm64-v8a/CMakeFiles/3.22.1-g37088a8/CMakeDetermineCompilerABI_C.binis excluded by!**/*.binandroid/app/.cxx/Debug/3k6y3ogb/arm64-v8a/CMakeFiles/3.22.1-g37088a8/CMakeDetermineCompilerABI_CXX.binis excluded by!**/*.binandroid/app/.cxx/Debug/3k6y3ogb/arm64-v8a/CMakeFiles/3.22.1-g37088a8/CompilerIdC/CMakeCCompilerId.ois excluded by!**/*.oandroid/app/.cxx/Debug/3k6y3ogb/arm64-v8a/CMakeFiles/3.22.1-g37088a8/CompilerIdCXX/CMakeCXXCompilerId.ois excluded by!**/*.oandroid/app/.cxx/Debug/3k6y3ogb/arm64-v8a/configure_fingerprint.binis excluded by!**/*.binandroid/app/.cxx/Debug/3k6y3ogb/armeabi-v7a/CMakeFiles/3.22.1-g37088a8/CMakeDetermineCompilerABI_C.binis excluded by!**/*.binandroid/app/.cxx/Debug/3k6y3ogb/armeabi-v7a/CMakeFiles/3.22.1-g37088a8/CMakeDetermineCompilerABI_CXX.binis excluded by!**/*.binandroid/app/.cxx/Debug/3k6y3ogb/armeabi-v7a/CMakeFiles/3.22.1-g37088a8/CompilerIdC/CMakeCCompilerId.ois excluded by!**/*.oandroid/app/.cxx/Debug/3k6y3ogb/armeabi-v7a/CMakeFiles/3.22.1-g37088a8/CompilerIdCXX/CMakeCXXCompilerId.ois excluded by!**/*.oandroid/app/.cxx/Debug/3k6y3ogb/armeabi-v7a/configure_fingerprint.binis excluded by!**/*.binandroid/app/.cxx/Debug/3k6y3ogb/x86/CMakeFiles/3.22.1-g37088a8/CMakeDetermineCompilerABI_C.binis excluded by!**/*.binandroid/app/.cxx/Debug/3k6y3ogb/x86/CMakeFiles/3.22.1-g37088a8/CMakeDetermineCompilerABI_CXX.binis excluded by!**/*.binandroid/app/.cxx/Debug/3k6y3ogb/x86/CMakeFiles/3.22.1-g37088a8/CompilerIdC/CMakeCCompilerId.ois excluded by!**/*.oandroid/app/.cxx/Debug/3k6y3ogb/x86/CMakeFiles/3.22.1-g37088a8/CompilerIdCXX/CMakeCXXCompilerId.ois excluded by!**/*.oandroid/app/.cxx/Debug/3k6y3ogb/x86/configure_fingerprint.binis excluded by!**/*.binandroid/app/.cxx/Debug/3k6y3ogb/x86_64/CMakeFiles/3.22.1-g37088a8/CMakeDetermineCompilerABI_C.binis excluded by!**/*.binandroid/app/.cxx/Debug/3k6y3ogb/x86_64/CMakeFiles/3.22.1-g37088a8/CMakeDetermineCompilerABI_CXX.binis excluded by!**/*.binandroid/app/.cxx/Debug/3k6y3ogb/x86_64/CMakeFiles/3.22.1-g37088a8/CompilerIdC/CMakeCCompilerId.ois excluded by!**/*.oandroid/app/.cxx/Debug/3k6y3ogb/x86_64/CMakeFiles/3.22.1-g37088a8/CompilerIdCXX/CMakeCXXCompilerId.ois excluded by!**/*.oandroid/app/.cxx/Debug/3k6y3ogb/x86_64/configure_fingerprint.binis excluded by!**/*.binassets/images/logos/launcher/android/play_store_512.pngis excluded by!**/*.pngassets/images/logos/launcher/android/res/mipmap-hdpi/ic_launcher.pngis excluded by!**/*.pngassets/images/logos/launcher/android/res/mipmap-hdpi/ic_launcher_background.pngis excluded by!**/*.pngassets/images/logos/launcher/android/res/mipmap-hdpi/ic_launcher_foreground.pngis excluded by!**/*.pngassets/images/logos/launcher/android/res/mipmap-hdpi/ic_launcher_monochrome.pngis excluded by!**/*.pngassets/images/logos/launcher/android/res/mipmap-mdpi/ic_launcher.pngis excluded by!**/*.pngassets/images/logos/launcher/android/res/mipmap-mdpi/ic_launcher_background.pngis excluded by!**/*.pngassets/images/logos/launcher/android/res/mipmap-mdpi/ic_launcher_foreground.pngis excluded by!**/*.pngassets/images/logos/launcher/android/res/mipmap-mdpi/ic_launcher_monochrome.pngis excluded by!**/*.pngassets/images/logos/launcher/android/res/mipmap-xhdpi/ic_launcher.pngis excluded by!**/*.pngassets/images/logos/launcher/android/res/mipmap-xhdpi/ic_launcher_background.pngis excluded by!**/*.pngassets/images/logos/launcher/android/res/mipmap-xhdpi/ic_launcher_foreground.pngis excluded by!**/*.pngassets/images/logos/launcher/android/res/mipmap-xhdpi/ic_launcher_monochrome.pngis excluded by!**/*.pngassets/images/logos/launcher/android/res/mipmap-xxhdpi/ic_launcher.pngis excluded by!**/*.pngassets/images/logos/launcher/android/res/mipmap-xxhdpi/ic_launcher_background.pngis excluded by!**/*.pngassets/images/logos/launcher/android/res/mipmap-xxhdpi/ic_launcher_foreground.pngis excluded by!**/*.pngassets/images/logos/launcher/android/res/mipmap-xxhdpi/ic_launcher_monochrome.pngis excluded by!**/*.pngassets/images/logos/launcher/android/res/mipmap-xxxhdpi/ic_launcher.pngis excluded by!**/*.pngassets/images/logos/launcher/android/res/mipmap-xxxhdpi/ic_launcher_background.pngis excluded by!**/*.pngassets/images/logos/launcher/android/res/mipmap-xxxhdpi/ic_launcher_foreground.pngis excluded by!**/*.pngassets/images/logos/launcher/android/res/mipmap-xxxhdpi/ic_launcher_monochrome.pngis excluded by!**/*.pngassets/images/logos/launcher/ios/AppIcon-20@2x.pngis excluded by!**/*.pngassets/images/logos/launcher/ios/AppIcon-20@2x~ipad.pngis excluded by!**/*.pngassets/images/logos/launcher/ios/AppIcon-20@3x.pngis excluded by!**/*.pngassets/images/logos/launcher/ios/AppIcon-20~ipad.pngis excluded by!**/*.pngassets/images/logos/launcher/ios/AppIcon-29.pngis excluded by!**/*.pngassets/images/logos/launcher/ios/AppIcon-29@2x.pngis excluded by!**/*.pngassets/images/logos/launcher/ios/AppIcon-29@2x~ipad.pngis excluded by!**/*.pngassets/images/logos/launcher/ios/AppIcon-29@3x.pngis excluded by!**/*.pngassets/images/logos/launcher/ios/AppIcon-29~ipad.pngis excluded by!**/*.pngassets/images/logos/launcher/ios/AppIcon-40@2x.pngis excluded by!**/*.pngassets/images/logos/launcher/ios/AppIcon-40@2x~ipad.pngis excluded by!**/*.pngassets/images/logos/launcher/ios/AppIcon-40@3x.pngis excluded by!**/*.pngassets/images/logos/launcher/ios/AppIcon-40~ipad.pngis excluded by!**/*.pngassets/images/logos/launcher/ios/AppIcon-60@2x~car.pngis excluded by!**/*.pngassets/images/logos/launcher/ios/AppIcon-60@3x~car.pngis excluded by!**/*.pngassets/images/logos/launcher/ios/AppIcon-83.5@2x~ipad.pngis excluded by!**/*.pngassets/images/logos/launcher/ios/AppIcon@2x.pngis excluded by!**/*.pngassets/images/logos/launcher/ios/AppIcon@2x~ipad.pngis excluded by!**/*.pngassets/images/logos/launcher/ios/AppIcon@3x.pngis excluded by!**/*.pngassets/images/logos/launcher/ios/AppIcon~ios-marketing.pngis excluded by!**/*.pngassets/images/logos/launcher/ios/AppIcon~ipad.pngis excluded by!**/*.pngassets/images/logos/launcher/web/apple-touch-icon.pngis excluded by!**/*.pngassets/images/logos/launcher/web/favicon.icois excluded by!**/*.icoassets/images/logos/launcher/web/icon-192-maskable.pngis excluded by!**/*.pngassets/images/logos/launcher/web/icon-192.pngis excluded by!**/*.pngassets/images/logos/launcher/web/icon-512-maskable.pngis excluded by!**/*.pngassets/images/logos/launcher/web/icon-512.pngis excluded by!**/*.pngassets/images/logos/logo.pngis excluded by!**/*.pngpubspec.lockis excluded by!**/*.lock
📒 Files selected for processing (98)
.gitignore(1 hunks)android/app/.cxx/Debug/3k6y3ogb/arm64-v8a/.cmake/api/v1/reply/cache-v2-9bbeee065ec421cbec0a.json(0 hunks)android/app/.cxx/Debug/3k6y3ogb/arm64-v8a/.cmake/api/v1/reply/cmakeFiles-v1-f7995eb5b9df4b8f16e6.json(0 hunks)android/app/.cxx/Debug/3k6y3ogb/arm64-v8a/.cmake/api/v1/reply/codemodel-v2-64ba87948b29b581c173.json(0 hunks)android/app/.cxx/Debug/3k6y3ogb/arm64-v8a/.cmake/api/v1/reply/directory-.-Debug-f5ebdc15457944623624.json(0 hunks)android/app/.cxx/Debug/3k6y3ogb/arm64-v8a/.cmake/api/v1/reply/index-2025-04-14T23-31-21-0577.json(0 hunks)android/app/.cxx/Debug/3k6y3ogb/arm64-v8a/CMakeCache.txt(0 hunks)android/app/.cxx/Debug/3k6y3ogb/arm64-v8a/CMakeFiles/3.22.1-g37088a8/CMakeCCompiler.cmake(0 hunks)android/app/.cxx/Debug/3k6y3ogb/arm64-v8a/CMakeFiles/3.22.1-g37088a8/CMakeCXXCompiler.cmake(0 hunks)android/app/.cxx/Debug/3k6y3ogb/arm64-v8a/CMakeFiles/3.22.1-g37088a8/CMakeSystem.cmake(0 hunks)android/app/.cxx/Debug/3k6y3ogb/arm64-v8a/CMakeFiles/3.22.1-g37088a8/CompilerIdC/CMakeCCompilerId.c(0 hunks)android/app/.cxx/Debug/3k6y3ogb/arm64-v8a/CMakeFiles/3.22.1-g37088a8/CompilerIdCXX/CMakeCXXCompilerId.cpp(0 hunks)android/app/.cxx/Debug/3k6y3ogb/arm64-v8a/CMakeFiles/TargetDirectories.txt(0 hunks)android/app/.cxx/Debug/3k6y3ogb/arm64-v8a/CMakeFiles/cmake.check_cache(0 hunks)android/app/.cxx/Debug/3k6y3ogb/arm64-v8a/CMakeFiles/rules.ninja(0 hunks)android/app/.cxx/Debug/3k6y3ogb/arm64-v8a/android_gradle_build.json(0 hunks)android/app/.cxx/Debug/3k6y3ogb/arm64-v8a/android_gradle_build_mini.json(0 hunks)android/app/.cxx/Debug/3k6y3ogb/arm64-v8a/build.ninja(0 hunks)android/app/.cxx/Debug/3k6y3ogb/arm64-v8a/build_file_index.txt(0 hunks)android/app/.cxx/Debug/3k6y3ogb/arm64-v8a/cmake_install.cmake(0 hunks)android/app/.cxx/Debug/3k6y3ogb/arm64-v8a/metadata_generation_command.txt(0 hunks)android/app/.cxx/Debug/3k6y3ogb/arm64-v8a/prefab_config.json(0 hunks)android/app/.cxx/Debug/3k6y3ogb/arm64-v8a/symbol_folder_index.txt(0 hunks)android/app/.cxx/Debug/3k6y3ogb/armeabi-v7a/.cmake/api/v1/reply/cache-v2-5a902d46c90e479f8c18.json(0 hunks)android/app/.cxx/Debug/3k6y3ogb/armeabi-v7a/.cmake/api/v1/reply/cmakeFiles-v1-cdab346be2da7b533a3c.json(0 hunks)android/app/.cxx/Debug/3k6y3ogb/armeabi-v7a/.cmake/api/v1/reply/codemodel-v2-82967653a940b4306974.json(0 hunks)android/app/.cxx/Debug/3k6y3ogb/armeabi-v7a/.cmake/api/v1/reply/directory-.-Debug-f5ebdc15457944623624.json(0 hunks)android/app/.cxx/Debug/3k6y3ogb/armeabi-v7a/.cmake/api/v1/reply/index-2025-04-14T23-31-24-0137.json(0 hunks)android/app/.cxx/Debug/3k6y3ogb/armeabi-v7a/CMakeCache.txt(0 hunks)android/app/.cxx/Debug/3k6y3ogb/armeabi-v7a/CMakeFiles/3.22.1-g37088a8/CMakeCCompiler.cmake(0 hunks)android/app/.cxx/Debug/3k6y3ogb/armeabi-v7a/CMakeFiles/3.22.1-g37088a8/CMakeCXXCompiler.cmake(0 hunks)android/app/.cxx/Debug/3k6y3ogb/armeabi-v7a/CMakeFiles/3.22.1-g37088a8/CMakeSystem.cmake(0 hunks)android/app/.cxx/Debug/3k6y3ogb/armeabi-v7a/CMakeFiles/3.22.1-g37088a8/CompilerIdC/CMakeCCompilerId.c(0 hunks)android/app/.cxx/Debug/3k6y3ogb/armeabi-v7a/CMakeFiles/3.22.1-g37088a8/CompilerIdCXX/CMakeCXXCompilerId.cpp(0 hunks)android/app/.cxx/Debug/3k6y3ogb/armeabi-v7a/CMakeFiles/TargetDirectories.txt(0 hunks)android/app/.cxx/Debug/3k6y3ogb/armeabi-v7a/CMakeFiles/cmake.check_cache(0 hunks)android/app/.cxx/Debug/3k6y3ogb/armeabi-v7a/CMakeFiles/rules.ninja(0 hunks)android/app/.cxx/Debug/3k6y3ogb/armeabi-v7a/android_gradle_build.json(0 hunks)android/app/.cxx/Debug/3k6y3ogb/armeabi-v7a/android_gradle_build_mini.json(0 hunks)android/app/.cxx/Debug/3k6y3ogb/armeabi-v7a/build.ninja(0 hunks)android/app/.cxx/Debug/3k6y3ogb/armeabi-v7a/build_file_index.txt(0 hunks)android/app/.cxx/Debug/3k6y3ogb/armeabi-v7a/cmake_install.cmake(0 hunks)android/app/.cxx/Debug/3k6y3ogb/armeabi-v7a/metadata_generation_command.txt(0 hunks)android/app/.cxx/Debug/3k6y3ogb/armeabi-v7a/prefab_config.json(0 hunks)android/app/.cxx/Debug/3k6y3ogb/armeabi-v7a/symbol_folder_index.txt(0 hunks)android/app/.cxx/Debug/3k6y3ogb/hash_key.txt(0 hunks)android/app/.cxx/Debug/3k6y3ogb/x86/.cmake/api/v1/reply/cache-v2-a8596584e6557a5a686c.json(0 hunks)android/app/.cxx/Debug/3k6y3ogb/x86/.cmake/api/v1/reply/cmakeFiles-v1-73158fb141cd7f157384.json(0 hunks)android/app/.cxx/Debug/3k6y3ogb/x86/.cmake/api/v1/reply/codemodel-v2-6b6dd48728d273088054.json(0 hunks)android/app/.cxx/Debug/3k6y3ogb/x86/.cmake/api/v1/reply/directory-.-Debug-f5ebdc15457944623624.json(0 hunks)android/app/.cxx/Debug/3k6y3ogb/x86/.cmake/api/v1/reply/index-2025-04-14T23-31-24-0731.json(0 hunks)android/app/.cxx/Debug/3k6y3ogb/x86/CMakeCache.txt(0 hunks)android/app/.cxx/Debug/3k6y3ogb/x86/CMakeFiles/3.22.1-g37088a8/CMakeCCompiler.cmake(0 hunks)android/app/.cxx/Debug/3k6y3ogb/x86/CMakeFiles/3.22.1-g37088a8/CMakeCXXCompiler.cmake(0 hunks)android/app/.cxx/Debug/3k6y3ogb/x86/CMakeFiles/3.22.1-g37088a8/CMakeSystem.cmake(0 hunks)android/app/.cxx/Debug/3k6y3ogb/x86/CMakeFiles/3.22.1-g37088a8/CompilerIdC/CMakeCCompilerId.c(0 hunks)android/app/.cxx/Debug/3k6y3ogb/x86/CMakeFiles/3.22.1-g37088a8/CompilerIdCXX/CMakeCXXCompilerId.cpp(0 hunks)android/app/.cxx/Debug/3k6y3ogb/x86/CMakeFiles/TargetDirectories.txt(0 hunks)android/app/.cxx/Debug/3k6y3ogb/x86/CMakeFiles/cmake.check_cache(0 hunks)android/app/.cxx/Debug/3k6y3ogb/x86/CMakeFiles/rules.ninja(0 hunks)android/app/.cxx/Debug/3k6y3ogb/x86/android_gradle_build.json(0 hunks)android/app/.cxx/Debug/3k6y3ogb/x86/android_gradle_build_mini.json(0 hunks)android/app/.cxx/Debug/3k6y3ogb/x86/build.ninja(0 hunks)android/app/.cxx/Debug/3k6y3ogb/x86/build_file_index.txt(0 hunks)android/app/.cxx/Debug/3k6y3ogb/x86/cmake_install.cmake(0 hunks)android/app/.cxx/Debug/3k6y3ogb/x86/metadata_generation_command.txt(0 hunks)android/app/.cxx/Debug/3k6y3ogb/x86/prefab_config.json(0 hunks)android/app/.cxx/Debug/3k6y3ogb/x86/symbol_folder_index.txt(0 hunks)android/app/.cxx/Debug/3k6y3ogb/x86_64/.cmake/api/v1/reply/cache-v2-6fb7238d256b461aa179.json(0 hunks)android/app/.cxx/Debug/3k6y3ogb/x86_64/.cmake/api/v1/reply/cmakeFiles-v1-2be83021924f4d9cb89e.json(0 hunks)android/app/.cxx/Debug/3k6y3ogb/x86_64/.cmake/api/v1/reply/codemodel-v2-eadfef21755cb479053c.json(0 hunks)android/app/.cxx/Debug/3k6y3ogb/x86_64/.cmake/api/v1/reply/directory-.-Debug-f5ebdc15457944623624.json(0 hunks)android/app/.cxx/Debug/3k6y3ogb/x86_64/.cmake/api/v1/reply/index-2025-04-14T23-31-25-0217.json(0 hunks)android/app/.cxx/Debug/3k6y3ogb/x86_64/CMakeCache.txt(0 hunks)android/app/.cxx/Debug/3k6y3ogb/x86_64/CMakeFiles/3.22.1-g37088a8/CMakeCCompiler.cmake(0 hunks)android/app/.cxx/Debug/3k6y3ogb/x86_64/CMakeFiles/3.22.1-g37088a8/CMakeCXXCompiler.cmake(0 hunks)android/app/.cxx/Debug/3k6y3ogb/x86_64/CMakeFiles/3.22.1-g37088a8/CMakeSystem.cmake(0 hunks)android/app/.cxx/Debug/3k6y3ogb/x86_64/CMakeFiles/3.22.1-g37088a8/CompilerIdC/CMakeCCompilerId.c(0 hunks)android/app/.cxx/Debug/3k6y3ogb/x86_64/CMakeFiles/3.22.1-g37088a8/CompilerIdCXX/CMakeCXXCompilerId.cpp(0 hunks)android/app/.cxx/Debug/3k6y3ogb/x86_64/CMakeFiles/TargetDirectories.txt(0 hunks)android/app/.cxx/Debug/3k6y3ogb/x86_64/CMakeFiles/cmake.check_cache(0 hunks)android/app/.cxx/Debug/3k6y3ogb/x86_64/CMakeFiles/rules.ninja(0 hunks)android/app/.cxx/Debug/3k6y3ogb/x86_64/android_gradle_build.json(0 hunks)android/app/.cxx/Debug/3k6y3ogb/x86_64/android_gradle_build_mini.json(0 hunks)android/app/.cxx/Debug/3k6y3ogb/x86_64/build.ninja(0 hunks)android/app/.cxx/Debug/3k6y3ogb/x86_64/build_file_index.txt(0 hunks)android/app/.cxx/Debug/3k6y3ogb/x86_64/cmake_install.cmake(0 hunks)android/app/.cxx/Debug/3k6y3ogb/x86_64/metadata_generation_command.txt(0 hunks)android/app/.cxx/Debug/3k6y3ogb/x86_64/prefab_config.json(0 hunks)android/app/.cxx/Debug/3k6y3ogb/x86_64/symbol_folder_index.txt(0 hunks)assets/images/logos/launcher/android/res/mipmap-anydpi-v26/ic_launcher.xml(0 hunks)assets/images/logos/launcher/ios/Contents.json(0 hunks)assets/images/logos/launcher/web/README.txt(0 hunks)devtools_options.yaml(1 hunks)l10n.yaml(1 hunks)lib/app.dart(1 hunks)lib/config/options.dart(1 hunks)lib/features/academics/data/models/continuous_assessment.dart(2 hunks)
💤 Files with no reviewable changes (92)
- android/app/.cxx/Debug/3k6y3ogb/arm64-v8a/symbol_folder_index.txt
- android/app/.cxx/Debug/3k6y3ogb/x86_64/CMakeFiles/cmake.check_cache
- android/app/.cxx/Debug/3k6y3ogb/armeabi-v7a/CMakeFiles/cmake.check_cache
- android/app/.cxx/Debug/3k6y3ogb/x86_64/symbol_folder_index.txt
- android/app/.cxx/Debug/3k6y3ogb/arm64-v8a/prefab_config.json
- android/app/.cxx/Debug/3k6y3ogb/x86/CMakeFiles/cmake.check_cache
- android/app/.cxx/Debug/3k6y3ogb/x86/symbol_folder_index.txt
- android/app/.cxx/Debug/3k6y3ogb/armeabi-v7a/symbol_folder_index.txt
- android/app/.cxx/Debug/3k6y3ogb/arm64-v8a/CMakeFiles/cmake.check_cache
- assets/images/logos/launcher/android/res/mipmap-anydpi-v26/ic_launcher.xml
- android/app/.cxx/Debug/3k6y3ogb/x86/android_gradle_build.json
- android/app/.cxx/Debug/3k6y3ogb/armeabi-v7a/android_gradle_build_mini.json
- android/app/.cxx/Debug/3k6y3ogb/x86/.cmake/api/v1/reply/directory-.-Debug-f5ebdc15457944623624.json
- android/app/.cxx/Debug/3k6y3ogb/armeabi-v7a/prefab_config.json
- assets/images/logos/launcher/web/README.txt
- android/app/.cxx/Debug/3k6y3ogb/arm64-v8a/CMakeFiles/TargetDirectories.txt
- android/app/.cxx/Debug/3k6y3ogb/x86_64/build_file_index.txt
- android/app/.cxx/Debug/3k6y3ogb/x86/CMakeFiles/3.22.1-g37088a8/CMakeSystem.cmake
- android/app/.cxx/Debug/3k6y3ogb/arm64-v8a/metadata_generation_command.txt
- android/app/.cxx/Debug/3k6y3ogb/x86_64/metadata_generation_command.txt
- android/app/.cxx/Debug/3k6y3ogb/x86/CMakeFiles/TargetDirectories.txt
- android/app/.cxx/Debug/3k6y3ogb/x86_64/prefab_config.json
- android/app/.cxx/Debug/3k6y3ogb/x86/build_file_index.txt
- android/app/.cxx/Debug/3k6y3ogb/arm64-v8a/.cmake/api/v1/reply/index-2025-04-14T23-31-21-0577.json
- android/app/.cxx/Debug/3k6y3ogb/armeabi-v7a/android_gradle_build.json
- android/app/.cxx/Debug/3k6y3ogb/x86_64/CMakeFiles/TargetDirectories.txt
- android/app/.cxx/Debug/3k6y3ogb/x86_64/.cmake/api/v1/reply/directory-.-Debug-f5ebdc15457944623624.json
- android/app/.cxx/Debug/3k6y3ogb/armeabi-v7a/CMakeFiles/rules.ninja
- android/app/.cxx/Debug/3k6y3ogb/x86_64/android_gradle_build_mini.json
- android/app/.cxx/Debug/3k6y3ogb/x86/metadata_generation_command.txt
- android/app/.cxx/Debug/3k6y3ogb/x86/CMakeFiles/rules.ninja
- android/app/.cxx/Debug/3k6y3ogb/x86_64/CMakeFiles/rules.ninja
- android/app/.cxx/Debug/3k6y3ogb/x86/CMakeCache.txt
- android/app/.cxx/Debug/3k6y3ogb/armeabi-v7a/CMakeFiles/3.22.1-g37088a8/CMakeSystem.cmake
- android/app/.cxx/Debug/3k6y3ogb/armeabi-v7a/build_file_index.txt
- android/app/.cxx/Debug/3k6y3ogb/x86/.cmake/api/v1/reply/index-2025-04-14T23-31-24-0731.json
- android/app/.cxx/Debug/3k6y3ogb/x86/android_gradle_build_mini.json
- android/app/.cxx/Debug/3k6y3ogb/x86/.cmake/api/v1/reply/codemodel-v2-6b6dd48728d273088054.json
- android/app/.cxx/Debug/3k6y3ogb/x86_64/android_gradle_build.json
- android/app/.cxx/Debug/3k6y3ogb/x86/prefab_config.json
- android/app/.cxx/Debug/3k6y3ogb/armeabi-v7a/.cmake/api/v1/reply/directory-.-Debug-f5ebdc15457944623624.json
- android/app/.cxx/Debug/3k6y3ogb/armeabi-v7a/.cmake/api/v1/reply/codemodel-v2-82967653a940b4306974.json
- android/app/.cxx/Debug/3k6y3ogb/arm64-v8a/CMakeFiles/rules.ninja
- android/app/.cxx/Debug/3k6y3ogb/arm64-v8a/CMakeFiles/3.22.1-g37088a8/CMakeSystem.cmake
- android/app/.cxx/Debug/3k6y3ogb/x86/.cmake/api/v1/reply/cache-v2-a8596584e6557a5a686c.json
- android/app/.cxx/Debug/3k6y3ogb/x86_64/CMakeFiles/3.22.1-g37088a8/CMakeSystem.cmake
- android/app/.cxx/Debug/3k6y3ogb/arm64-v8a/.cmake/api/v1/reply/directory-.-Debug-f5ebdc15457944623624.json
- android/app/.cxx/Debug/3k6y3ogb/x86_64/.cmake/api/v1/reply/cache-v2-6fb7238d256b461aa179.json
- android/app/.cxx/Debug/3k6y3ogb/x86_64/.cmake/api/v1/reply/codemodel-v2-eadfef21755cb479053c.json
- android/app/.cxx/Debug/3k6y3ogb/arm64-v8a/android_gradle_build.json
- android/app/.cxx/Debug/3k6y3ogb/armeabi-v7a/.cmake/api/v1/reply/cmakeFiles-v1-cdab346be2da7b533a3c.json
- android/app/.cxx/Debug/3k6y3ogb/x86/.cmake/api/v1/reply/cmakeFiles-v1-73158fb141cd7f157384.json
- android/app/.cxx/Debug/3k6y3ogb/armeabi-v7a/cmake_install.cmake
- android/app/.cxx/Debug/3k6y3ogb/arm64-v8a/.cmake/api/v1/reply/cmakeFiles-v1-f7995eb5b9df4b8f16e6.json
- android/app/.cxx/Debug/3k6y3ogb/x86/CMakeFiles/3.22.1-g37088a8/CMakeCCompiler.cmake
- android/app/.cxx/Debug/3k6y3ogb/arm64-v8a/CMakeCache.txt
- android/app/.cxx/Debug/3k6y3ogb/x86_64/.cmake/api/v1/reply/cmakeFiles-v1-2be83021924f4d9cb89e.json
- android/app/.cxx/Debug/3k6y3ogb/hash_key.txt
- android/app/.cxx/Debug/3k6y3ogb/x86_64/CMakeFiles/3.22.1-g37088a8/CMakeCCompiler.cmake
- android/app/.cxx/Debug/3k6y3ogb/arm64-v8a/android_gradle_build_mini.json
- android/app/.cxx/Debug/3k6y3ogb/x86_64/.cmake/api/v1/reply/index-2025-04-14T23-31-25-0217.json
- android/app/.cxx/Debug/3k6y3ogb/armeabi-v7a/CMakeCache.txt
- android/app/.cxx/Debug/3k6y3ogb/arm64-v8a/CMakeFiles/3.22.1-g37088a8/CMakeCCompiler.cmake
- android/app/.cxx/Debug/3k6y3ogb/arm64-v8a/CMakeFiles/3.22.1-g37088a8/CMakeCXXCompiler.cmake
- android/app/.cxx/Debug/3k6y3ogb/x86_64/cmake_install.cmake
- android/app/.cxx/Debug/3k6y3ogb/arm64-v8a/.cmake/api/v1/reply/cache-v2-9bbeee065ec421cbec0a.json
- android/app/.cxx/Debug/3k6y3ogb/armeabi-v7a/metadata_generation_command.txt
- android/app/.cxx/Debug/3k6y3ogb/armeabi-v7a/.cmake/api/v1/reply/index-2025-04-14T23-31-24-0137.json
- android/app/.cxx/Debug/3k6y3ogb/arm64-v8a/cmake_install.cmake
- android/app/.cxx/Debug/3k6y3ogb/armeabi-v7a/CMakeFiles/3.22.1-g37088a8/CMakeCCompiler.cmake
- android/app/.cxx/Debug/3k6y3ogb/arm64-v8a/CMakeFiles/3.22.1-g37088a8/CompilerIdC/CMakeCCompilerId.c
- android/app/.cxx/Debug/3k6y3ogb/x86_64/CMakeFiles/3.22.1-g37088a8/CMakeCXXCompiler.cmake
- android/app/.cxx/Debug/3k6y3ogb/armeabi-v7a/CMakeFiles/3.22.1-g37088a8/CMakeCXXCompiler.cmake
- android/app/.cxx/Debug/3k6y3ogb/x86/build.ninja
- android/app/.cxx/Debug/3k6y3ogb/armeabi-v7a/build.ninja
- android/app/.cxx/Debug/3k6y3ogb/armeabi-v7a/.cmake/api/v1/reply/cache-v2-5a902d46c90e479f8c18.json
- android/app/.cxx/Debug/3k6y3ogb/x86_64/build.ninja
- android/app/.cxx/Debug/3k6y3ogb/x86_64/CMakeCache.txt
- android/app/.cxx/Debug/3k6y3ogb/arm64-v8a/.cmake/api/v1/reply/codemodel-v2-64ba87948b29b581c173.json
- android/app/.cxx/Debug/3k6y3ogb/armeabi-v7a/CMakeFiles/TargetDirectories.txt
- android/app/.cxx/Debug/3k6y3ogb/arm64-v8a/build.ninja
- android/app/.cxx/Debug/3k6y3ogb/x86_64/CMakeFiles/3.22.1-g37088a8/CompilerIdCXX/CMakeCXXCompilerId.cpp
- android/app/.cxx/Debug/3k6y3ogb/x86/CMakeFiles/3.22.1-g37088a8/CompilerIdCXX/CMakeCXXCompilerId.cpp
- android/app/.cxx/Debug/3k6y3ogb/arm64-v8a/CMakeFiles/3.22.1-g37088a8/CompilerIdCXX/CMakeCXXCompilerId.cpp
- android/app/.cxx/Debug/3k6y3ogb/armeabi-v7a/CMakeFiles/3.22.1-g37088a8/CompilerIdCXX/CMakeCXXCompilerId.cpp
- android/app/.cxx/Debug/3k6y3ogb/x86_64/CMakeFiles/3.22.1-g37088a8/CompilerIdC/CMakeCCompilerId.c
- android/app/.cxx/Debug/3k6y3ogb/arm64-v8a/build_file_index.txt
- android/app/.cxx/Debug/3k6y3ogb/x86/cmake_install.cmake
- android/app/.cxx/Debug/3k6y3ogb/x86/CMakeFiles/3.22.1-g37088a8/CMakeCXXCompiler.cmake
- android/app/.cxx/Debug/3k6y3ogb/armeabi-v7a/CMakeFiles/3.22.1-g37088a8/CompilerIdC/CMakeCCompilerId.c
- android/app/.cxx/Debug/3k6y3ogb/x86/CMakeFiles/3.22.1-g37088a8/CompilerIdC/CMakeCCompilerId.c
- assets/images/logos/launcher/ios/Contents.json
🔇 Additional comments (8)
.gitignore (1)
44-46: Appropriate Android build artifact ignores added.The new entries
/android/app/.cxx/,/android/.gradle/, and/android/local.propertiescorrectly prevent committing intermediate native build outputs and local SDK configuration files. This aligns with Flutter/Android best practices.devtools_options.yaml (1)
1-4: Good setup for DevTools configurationThis configuration file is properly structured with description and documentation link, setting up the framework for future DevTools extensions as needed.
l10n.yaml (2)
4-6: Correct locale configurationYour configuration properly includes both English and Arabic locales as requested in the PR objectives. This is the right setup for adding Arabic language support.
7-7: Good performance optimizationUsing deferred loading for localization resources is a good practice as it will load language resources only when needed, improving initial load time.
lib/features/academics/data/models/continuous_assessment.dart (1)
1-2: Appropriate imports for localizationThe imports for Material and the generated localizations file are correct and necessary for localization support.
lib/app.dart (3)
17-17: Update import path if you rename localization filesIf you rename the generated localization file as suggested in the l10n.yaml review, remember to update this import path accordingly.
48-49: Correct localization delegates setupThe localization delegates and supported locales are correctly configured using the generated GalleryLocalizations class.
19-61: Well-structured root application widgetThe ProgresApp widget is well-organized with proper BloC providers, theme configuration, and routing setup. This provides a good foundation for the application.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🔭 Outside diff range comments (2)
assets/fonts/notokufi/README.txt (1)
1-72: 💡 Verification agent🧩 Analysis chain
Verify Flutter asset registration.
Make sure both the variable and static font files listed here are declared underflutter/fontsin yourpubspec.yaml, so they get bundled at build time.
🏁 Script executed:
#!/bin/bash # Check for font family declarations in pubspec.yaml rg -C 2 "fonts:" -A 5 pubspec.yamlLength of output: 588
Include all Noto Kufi assets in pubspec.yaml
Thepubspec.yamlcurrently only registers Regular (400), Light (300), and Medium (500) for NotoKufiArabic. You need to bundle both the variable font and all static weights listed in your README so they’re available at runtime.Please update the
flutter/fontssection to include:
- Variable font
assets/fonts/notokufi/NotoKufiArabic-VariableFont_wght.ttf- Static fonts
assets/fonts/notokufi/static/NotoKufiArabic-Thin.ttf(100)assets/fonts/notokufi/static/NotoKufiArabic-ExtraLight.ttf(200)assets/fonts/notokufi/static/NotoKufiArabic-Light.ttf(300)assets/fonts/notokufi/static/NotoKufiArabic-Regular.ttf(400)assets/fonts/notokufi/static/NotoKufiArabic-Medium.ttf(500)assets/fonts/notokufi/static/NotoKufiArabic-SemiBold.ttf(600)assets/fonts/notokufi/static/NotoKufiArabic-Bold.ttf(700)assets/fonts/notokufi/static/NotoKufiArabic-ExtraBold.ttf(800)assets/fonts/notokufi/static/NotoKufiArabic-Black.ttf(900)Example snippet:
flutter: fonts: - family: NotoKufiArabic fonts: - asset: assets/fonts/notokufi/NotoKufiArabic-VariableFont_wght.ttf - asset: assets/fonts/notokufi/static/NotoKufiArabic-Thin.ttf weight: 100 # …and so on for 200, 300, 400, 500, 600, 700, 800, 900🧰 Tools
🪛 LanguageTool
[formatting] ~13-~13: Consider inserting a comma after an introductory phrase for better readability.
Context: ...ot all apps support variable fonts, and in those cases you can use the static font files for N...(IN_THAT_CASE_COMMA)
assets/fonts/Eczar/README.txt (1)
1-68: 💡 Verification agent🧩 Analysis chain
Verify Flutter asset registration.
Please confirm that Eczar font files are referenced underflutter/fontsinpubspec.yamlso they’re packaged with the app.
🏁 Script executed:
#!/bin/bash # Ensure Eczar fonts are registered in pubspec.yaml rg -C 2 "family: Eczar" -A 5 pubspec.yamlLength of output: 241
Include all Eczar font assets in pubspec.yaml
The current registration only covers Regular (400) and Medium (500). To fully support all weights (or the variable axis), please updatepubspec.yamlunderflutter/fonts:
- pubspec.yaml (around the existing Eczar entry):
Or, if you prefer the variable font:- family: Eczar fonts: - asset: assets/fonts/Eczar/static/Eczar-Regular.ttf weight: 400 - asset: assets/fonts/Eczar/static/Eczar-Medium.ttf weight: 500 - asset: assets/fonts/Eczar/static/Eczar-SemiBold.ttf weight: 600 - asset: assets/fonts/Eczar/static/Eczar-Bold.ttf weight: 700 - asset: assets/fonts/Eczar/static/Eczar-ExtraBold.ttf weight: 800- family: Eczar fonts: - asset: assets/fonts/Eczar/Eczar-VariableFont_wght.ttfPlease add the missing weights (or the variable font) so the app packages and exposes all styles.
🧰 Tools
🪛 LanguageTool
[formatting] ~13-~13: Consider inserting a comma after an introductory phrase for better readability.
Context: ...ot all apps support variable fonts, and in those cases you can use the static font files for E...(IN_THAT_CASE_COMMA)
🧹 Nitpick comments (2)
assets/fonts/notokufi/README.txt (1)
12-14: Improve readability with additional comma.
Consider adding a comma after "in those cases" for clarity:Not all apps support variable fonts, and in those cases, you can use the static font files for Noto Kufi Arabic:🧰 Tools
🪛 LanguageTool
[formatting] ~13-~13: Consider inserting a comma after an introductory phrase for better readability.
Context: ...ot all apps support variable fonts, and in those cases you can use the static font files for N...(IN_THAT_CASE_COMMA)
assets/fonts/Eczar/README.txt (1)
12-14: Improve readability with additional comma.
Insert a comma after "in those cases" to enhance flow:Not all apps support variable fonts, and in those cases, you can use the static font files for Eczar:🧰 Tools
🪛 LanguageTool
[formatting] ~13-~13: Consider inserting a comma after an introductory phrase for better readability.
Context: ...ot all apps support variable fonts, and in those cases you can use the static font files for E...(IN_THAT_CASE_COMMA)
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (16)
assets/fonts/Eczar/Eczar-VariableFont_wght.ttfis excluded by!**/*.ttfassets/fonts/Eczar/static/Eczar-Bold.ttfis excluded by!**/*.ttfassets/fonts/Eczar/static/Eczar-ExtraBold.ttfis excluded by!**/*.ttfassets/fonts/Eczar/static/Eczar-Medium.ttfis excluded by!**/*.ttfassets/fonts/Eczar/static/Eczar-Regular.ttfis excluded by!**/*.ttfassets/fonts/Eczar/static/Eczar-SemiBold.ttfis excluded by!**/*.ttfassets/fonts/notokufi/NotoKufiArabic-VariableFont_wght.ttfis excluded by!**/*.ttfassets/fonts/notokufi/static/NotoKufiArabic-Black.ttfis excluded by!**/*.ttfassets/fonts/notokufi/static/NotoKufiArabic-Bold.ttfis excluded by!**/*.ttfassets/fonts/notokufi/static/NotoKufiArabic-ExtraBold.ttfis excluded by!**/*.ttfassets/fonts/notokufi/static/NotoKufiArabic-ExtraLight.ttfis excluded by!**/*.ttfassets/fonts/notokufi/static/NotoKufiArabic-Light.ttfis excluded by!**/*.ttfassets/fonts/notokufi/static/NotoKufiArabic-Medium.ttfis excluded by!**/*.ttfassets/fonts/notokufi/static/NotoKufiArabic-Regular.ttfis excluded by!**/*.ttfassets/fonts/notokufi/static/NotoKufiArabic-SemiBold.ttfis excluded by!**/*.ttfassets/fonts/notokufi/static/NotoKufiArabic-Thin.ttfis excluded by!**/*.ttf
📒 Files selected for processing (4)
assets/fonts/Eczar/OFL.txt(1 hunks)assets/fonts/Eczar/README.txt(1 hunks)assets/fonts/notokufi/OFL.txt(1 hunks)assets/fonts/notokufi/README.txt(1 hunks)
🧰 Additional context used
🪛 LanguageTool
assets/fonts/Eczar/OFL.txt
[typographical] ~9-~9: If you want to indicate numerical ranges or time ranges, consider using an en dash.
Context: ...-----
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
----------------------...
(DASH_RULE)
assets/fonts/Eczar/README.txt
[formatting] ~13-~13: Consider inserting a comma after an introductory phrase for better readability.
Context: ...ot all apps support variable fonts, and in those cases you can use the static font files for E...
(IN_THAT_CASE_COMMA)
assets/fonts/notokufi/OFL.txt
[typographical] ~9-~9: If you want to indicate numerical ranges or time ranges, consider using an en dash.
Context: ...-----
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
----------------------...
(DASH_RULE)
assets/fonts/notokufi/README.txt
[formatting] ~13-~13: Consider inserting a comma after an introductory phrase for better readability.
Context: ...ot all apps support variable fonts, and in those cases you can use the static font files for N...
(IN_THAT_CASE_COMMA)
🔇 Additional comments (6)
assets/fonts/notokufi/OFL.txt (2)
1-10: Approve license file addition.
The SIL Open Font License Version 1.1 header and preamble are correctly included. Ensure this file is packaged alongside the font assets so end users can review the licensing terms.🧰 Tools
🪛 LanguageTool
[typographical] ~9-~9: If you want to indicate numerical ranges or time ranges, consider using an en dash.
Context: ...-----
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
----------------------...(DASH_RULE)
12-94: Skip review for standard license content.
The remainder is the unmodified OFL text, which is a standard legal document. No changes needed.assets/fonts/notokufi/README.txt (1)
1-3: Approve the font README addition.
The title and heading formatting are clear and consistent with other font documentation in the repo.assets/fonts/Eczar/README.txt (1)
1-3: Approve the font README addition.
Heading styles and structure mirror the repository’s conventions for font documentation.assets/fonts/Eczar/OFL.txt (2)
1-10: Approve license file addition.
The complete SIL Open Font License Version 1.1 text is present. Ensure it’s distributed with the font assets for compliance.🧰 Tools
🪛 LanguageTool
[typographical] ~9-~9: If you want to indicate numerical ranges or time ranges, consider using an en dash.
Context: ...-----
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
----------------------...(DASH_RULE)
12-94: Skip review for standard license content.
This section is the official OFL text. No edits required.
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Description
Add Arabic language support
Types of changes
Checklist
Further comments
Summary by CodeRabbit