Conversation
✅ Deploy Preview for cv-mobile-app-web ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
WalkthroughTop-level metadata revision changed and channel set to "stable"; Windows platform block removed and an Android platform block added. Android: compileSdk/targetSdk bumped to 36, minSdk switched to flutter.minSdkVersion, Gradle wrapper updated to 8.14, and AGP/Kotlin plugin versions bumped. Added devtools_options.yaml. Drawer and landing view UI refactored (new header, theme toggle, expansion tiles); CVDrawerTile added Possibly related PRs
🚥 Pre-merge checks | ✅ 2 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Pull request overview
This PR updates the app’s Drawer UI (CircuitVerse + Interactive Book) to improve alignment/sizing and introduce active-tab highlighting, while also including several platform/tooling changes (Flutter/Dart SDK constraints, Android Gradle upgrades, and a new Windows plugin registration).
Changes:
- Redesign Drawer layout: new header styling, icon updates, and active item highlighting (including child items in expansion sections).
- Extend
CVDrawerTileAPI to supportisActive/isChildstyling for consistent navigation appearance. - Update platform/tooling config (Android Gradle/Kotlin/Gradle wrapper changes, Flutter/Dart SDK constraint bump, Windows plugin registration update).
Reviewed changes
Copilot reviewed 13 out of 15 changed files in this pull request and generated 7 comments.
Show a summary per file
| File | Description |
|---|---|
| windows/flutter/generated_plugins.cmake | Adds quill_native_bridge_windows to Windows plugin list. |
| windows/flutter/generated_plugin_registrant.cc | Registers Windows plugins (now includes quill native bridge, but currently with mismatched header/symbol names). |
| pubspec.lock | Updates dependency resolutions and bumps Dart/Flutter SDK constraints. |
| lib/ui/views/ib/ib_landing_view.dart | Updates Interactive Book drawer UI and passes active-state into tiles. |
| lib/ui/components/cv_drawer.dart | Refactors main drawer UI: header, icons, expansion tiles, active highlighting. |
| lib/ui/components/cv_drawer_tile.dart | Adds active/child styling support and updates tile layout. |
| devtools_options.yaml | Adds DevTools extension configuration file. |
| android/settings.gradle.kts | Adds Kotlin DSL settings file (duplicates existing Groovy settings). |
| android/settings.gradle | Updates AGP/Kotlin plugin versions. |
| android/gradle/wrapper/gradle-wrapper.properties | Bumps Gradle wrapper distribution version. |
| android/build/reports/problems/problems-report.html | Adds a Gradle-generated problems report (build artifact). |
| android/build.gradle.kts | Adds Kotlin DSL root build file (duplicates existing Groovy build.gradle). |
| android/app/build.gradle.kts | Adds Kotlin DSL app build file (duplicates existing Groovy app/build.gradle). |
| android/app/build.gradle | Updates compile/target SDK values and keeps Flutter integration. |
| .metadata | Updates Flutter tool/channel metadata (likely from Flutter SDK upgrade). |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
Actionable comments posted: 9
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
android/app/build.gradle (1)
1-126:⚠️ Potential issue | 🔴 CriticalCritical: Remove duplicate Gradle build configuration file.
Both
android/app/build.gradle(Groovy DSL) andandroid/app/build.gradle.kts(Kotlin DSL) exist in the same directory. Gradle does not allow both files to coexist and will fail the build.The Groovy file must be deleted to resolve this blocker. Ensure the Kotlin DSL configuration includes all necessary settings from the Groovy file, including signing configurations, minification settings, lint configuration, and dependencies before deletion.
android/settings.gradle (1)
1-25:⚠️ Potential issue | 🔴 CriticalCritical: Remove this file — duplicate Gradle settings configuration.
Both
android/settings.gradle(Groovy) andandroid/settings.gradle.kts(Kotlin DSL) exist. Gradle does not support both files coexisting and will exhibit undefined behavior or fail to build.Since the PR is migrating to Kotlin DSL, delete the Groovy settings file.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: b20ac770-d4fa-45eb-a69a-d25201335674
⛔ Files ignored due to path filters (1)
pubspec.lockis excluded by!**/*.lock
📒 Files selected for processing (14)
.metadataandroid/app/build.gradleandroid/app/build.gradle.ktsandroid/build.gradle.ktsandroid/build/reports/problems/problems-report.htmlandroid/gradle/wrapper/gradle-wrapper.propertiesandroid/settings.gradleandroid/settings.gradle.ktsdevtools_options.yamllib/ui/components/cv_drawer.dartlib/ui/components/cv_drawer_tile.dartlib/ui/views/ib/ib_landing_view.dartwindows/flutter/generated_plugin_registrant.ccwindows/flutter/generated_plugins.cmake
There was a problem hiding this comment.
♻️ Duplicate comments (1)
lib/ui/components/cv_drawer_tile.dart (1)
28-101:⚠️ Potential issue | 🟠 MajorExpose active and pending states to accessibility services.
At Line 36 and Line 84, these states are visual-only right now. Please add semantics so TalkBack/VoiceOver can announce selected/unread state.
Suggested fix
- return Container( + return Semantics( + selected: isActive, + child: Container( margin: const EdgeInsetsDirectional.only( start: 8, end: 8, top: 2, bottom: 2, ), decoration: BoxDecoration( color: isActive ? CVTheme.primaryColor.withOpacity(0.12) : null, borderRadius: BorderRadius.circular(10), ), child: Theme( data: CVTheme.themeData(context), child: ListTile( + selected: isActive, contentPadding: EdgeInsetsDirectional.only( start: isChild ? 56 : 16, end: 16, top: 0, bottom: 0, ), @@ - trailing: pending - ? Container( + trailing: pending + ? Semantics( + label: 'Pending updates', + child: ExcludeSemantics( + child: Container( height: 10, width: 10, decoration: BoxDecoration( shape: BoxShape.circle, color: CVTheme.red, boxShadow: [ BoxShadow( color: CVTheme.red.withOpacity(0.5), blurRadius: 4, spreadRadius: 1, ), ], ), - ) + ), + ), + ) : null, ), ), - ); + ), + );
🧹 Nitpick comments (1)
lib/ui/components/cv_drawer_tile.dart (1)
70-80: Keep drawer row height uniform for long localized titles.At Line 70, title text can wrap to multiple lines and break uniform sizing. Consider constraining to a single line with ellipsis.
Suggested fix
Expanded( child: Text( title, + maxLines: 1, + overflow: TextOverflow.ellipsis, + softWrap: false, style: Theme.of(context).textTheme.titleLarge?.copyWith( fontFamily: 'Poppins', fontSize: isChild ? 15 : 16,
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 0661f675-49c5-413e-a83f-b108419b6a29
📒 Files selected for processing (1)
lib/ui/components/cv_drawer_tile.dart
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (1)
lib/ui/components/cv_drawer.dart (1)
83-86: ConsiderSelectorif drawer rebuilds become a performance concern.Using
context.watch<CVLandingViewModel>()subscribes to allnotifyListeners()calls from the ViewModel, includingselectedIndex,currentUser,hasPendingNotif, and logout state. Since the drawer legitimately uses all these values, this is functionally correct, but if profiling shows excessive rebuilds, consider wrapping specific sections withSelectorto scope reactivity.Also, the underscore prefix on
_modelis unconventional for local variables in Dart (typically reserved for private class members).
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: a047e739-cec2-4ea7-a626-2df69fe36d05
📒 Files selected for processing (3)
.gitignorelib/ui/components/cv_drawer.dartlib/ui/views/ib/ib_landing_view.dart
✅ Files skipped from review due to trivial changes (1)
- .gitignore
🚧 Files skipped from review as they are similar to previous changes (1)
- lib/ui/views/ib/ib_landing_view.dart
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (2)
lib/ui/components/cv_drawer_tile.dart (2)
24-26: Use theactiveColorvariable consistently.Line 24 defines
activeColor = CVTheme.primaryColor, but line 39 accessesCVTheme.primaryColordirectly. Use the variable to avoid redundancy and ensure consistency if the source changes.Suggested fix
decoration: BoxDecoration( - color: isActive ? CVTheme.primaryColor.withOpacity(0.12) : null, + color: isActive ? activeColor.withOpacity(0.12) : null, borderRadius: BorderRadius.circular(10), ),Also applies to: 38-40
75-82: Consider extracting the hardcoded font family to a constant.The
'Poppins'font family is hardcoded here. If this font is used elsewhere in the app's theme, consider referencing a shared constant or the app'sTextThemeto ensure consistency and easier maintenance.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: c4e3b819-4501-410c-a714-7740e8d6003b
📒 Files selected for processing (1)
lib/ui/components/cv_drawer_tile.dart
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
This PR adds an improved UI for the Drawer of the App.
Changes:
Screenshot of Final Look:
Demo:
Improved.Drawer.webm
Summary by CodeRabbit
New Features
Improvements
Chores