Skip to content

Conversation

@realaashil
Copy link
Contributor

@realaashil realaashil commented Mar 15, 2025

  • pub: Update the dependices
  • fix(android): Build Successfully now
  • feat: Update source code for latest dependencies

Closes #277

Fixes

The build completes successfully and boots on the Android emulator. However, I haven't had time to test all the features yet, so it's still a work in progress (WIP).

TODO:

  • Test all the features and report the bugs
  • Rewrite the tests

Summary by CodeRabbit

Summary by CodeRabbit

  • Refactor

    • Simplified the CVTypeAheadField widget structure.
    • Streamlined the IbInteractionBuilder and IbWebViewBuilder for better web view management.
    • Modified back navigation handling for improved user experience in various views.
    • Enhanced constructor handling across multiple components for better readability and maintainability.
    • Improved formatting and readability of various view models and API services.
    • Refactored test cases for better readability and consistency in formatting.
  • Chores

    • Upgraded build configurations and dependencies for improved performance and compatibility.
    • Updated sharing integrations for enhanced functionality.
    • Comprehensive update of project dependencies to ensure compatibility with newer versions.
    • Established platform-specific implementations for web views in tests.
    • Updated Java version in CI workflow for better compatibility.
    • Added trailing commas and improved formatting in mock data files for consistency.

So it can compile on flutter latest version
- Initial commit towards modernizing the app for the latest Flutter version and guidelines.

TODO:
- Reimplement Facebook OAuth integration.
- Fix broken tests.
- Verify each feature to ensure proper functionality.
@coderabbitai
Copy link

coderabbitai bot commented Mar 15, 2025

Walkthrough

This pull request updates several project configuration files and refactors various Flutter components. Changes include modifications to the ignore rules and metadata tracking, significant updates to the Android build configuration (plugins, SDK versions, Gradle wrapper, and manifest), and extensive UI and parser refactors within the lib directory. In addition, dependency versions have been upgraded in the pubspec file, and test builder syntaxes have been simplified.

Changes

File(s) Summary
.gitignore Added specific build directories and file patterns; commented out .vscode/; removed broad Flutter/Dart and platform-generated exclusions.
.metadata Updated revision hashes for root and web, removed migration fields for other platforms, and adjusted file management comments.
android/app/build.gradle, android/build.gradle, android/gradle/wrapper/gradle-wrapper.properties, android/settings.gradle, android/app/src/main/AndroidManifest.xml Revised Android build configuration: added plugins block & namespace, updated compileSdk/minSdk/Gradle version, removed the buildscript block, and introduced pluginManagement and repository declarations.
lib/ui/components/cv_typeahead_field.dart; lib/ui/views/ib/builders/ib_interaction_builder.dart; lib/ui/views/ib/builders/ib_webview_builder.dart; lib/ui/views/ib/ib_landing_view.dart; lib/ui/views/ib/ib_page_view.dart; lib/ui/views/projects/project_details_view.dart; lib/ui/views/simulator/simulator_view.dart; lib/viewmodels/profile/edit_profile_viewmodel.dart Refactored UI components and logic: replaced FutureBuilder/TypeAheadFormField with TypeAheadField, streamlined WebViewController usage, updated builder and markdown parsing syntax, revised share import, adjusted URL parsing, and removed crop style parameter.
pubspec.yaml Upgraded multiple dependency versions (e.g. flutter_inappwebview, flutter_keyboard_visibility, flutter_markdown, image_cropper, share → share_plus), added flutter_facebook_auth, and updated lints.
test/ui_tests/ib/ib_landing_view_test.dart, test/ui_tests/ib/ib_page_view_test.dart Simplified builder function syntax in ShowcaseWidget tests by using arrow functions.
lib/ui/views/profile/profile_view.dart Removed conditional profile component for "Subscribed to mails" based on user login status and profile type.

Assessment against linked issues

Objective Addressed Explanation
Upgrade project to Flutter 3 and update all dependencies (#277)

Tip

⚡🧪 Multi-step agentic review comment chat (experimental)
  • We're introducing multi-step agentic chat in review comments. This experimental feature enhances review discussions with the CodeRabbit agentic chat by enabling advanced interactions, including the ability to create pull requests directly from comments.
    - To enable this feature, set early_access to true under in the settings.

🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

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)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (3)
lib/ui/components/cv_typeahead_field.dart (1)

9-9: Fix typo in documentation comment

There's a typo in the documentation comment where "TextInputStreapis" should be "TextInputStream is" with a space between the words.

- /// When a [TextInputStreapis not specified, it defaults to [TextInputType.text]
+ /// When a [TextInputStream] is not specified, it defaults to [TextInputType.text]
lib/ui/views/ib/builders/ib_interaction_builder.dart (1)

29-43: WebView implementation has been modernized appropriately

The refactoring of the WebView implementation to use the newer WebView Flutter API pattern is good. The controller is now created and configured separately, which aligns with the recommended pattern in Flutter 3.29.2.

However, the variables _textContent and _streamController use underscore prefixes which typically denote private class members, but they are local variables. Consider removing the underscores for consistency.

- var _textContent = snapshot.data.toString();
- var _streamController = StreamController<double>();
+ var textContent = snapshot.data.toString();
+ var streamController = StreamController<double>();

And then update the references accordingly:

- ..loadHtmlString(_textContent);
+ ..loadHtmlString(textContent);

- _streamController.add(height);
+ streamController.add(height);

- stream: _streamController.stream,
+ stream: streamController.stream,
lib/ui/views/ib/builders/ib_webview_builder.dart (1)

14-35: Modernized WebView implementation with potential null safety issues

The refactoring to use Html with TagExtension and WebViewWidget is appropriate and aligns with modern Flutter practices. However, there are some concerns:

  1. Line 23 uses an underscore prefix (_controller) for a local variable, which is typically used for private class members
  2. Line 25 directly accesses element.attributes['src']! without null-checking, which could crash if the iframe doesn't have a src attribute
- final _controller = WebViewController();
+ final controller = WebViewController();

- _controller
+ controller

And add null safety:

- ..loadRequest(Uri.parse(element.attributes['src']!));
+ ..loadRequest(Uri.parse(element.attributes['src'] ?? 'about:blank'));
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between a88c13b and 4cbabbd.

⛔ Files ignored due to path filters (1)
  • pubspec.lock is excluded by !**/*.lock
📒 Files selected for processing (23)
  • .gitignore (2 hunks)
  • .metadata (1 hunks)
  • android/app/build.gradle (3 hunks)
  • android/app/src/main/AndroidManifest.xml (1 hunks)
  • android/build.gradle (0 hunks)
  • android/gradle/wrapper/gradle-wrapper.properties (1 hunks)
  • android/settings.gradle (1 hunks)
  • lib/ui/components/cv_typeahead_field.dart (2 hunks)
  • lib/ui/views/authentication/components/auth_options_view.dart (0 hunks)
  • lib/ui/views/ib/builders/ib_interaction_builder.dart (1 hunks)
  • lib/ui/views/ib/builders/ib_webview_builder.dart (1 hunks)
  • lib/ui/views/ib/ib_landing_view.dart (1 hunks)
  • lib/ui/views/ib/ib_page_view.dart (1 hunks)
  • lib/ui/views/ib/syntaxes/ib_embed_syntax.dart (1 hunks)
  • lib/ui/views/ib/syntaxes/ib_liquid_syntax.dart (1 hunks)
  • lib/ui/views/ib/syntaxes/ib_md_tag_syntax.dart (2 hunks)
  • lib/ui/views/projects/project_details_view.dart (1 hunks)
  • lib/ui/views/simulator/simulator_view.dart (1 hunks)
  • lib/viewmodels/authentication/auth_options_viewmodel.dart (0 hunks)
  • lib/viewmodels/cv_landing_viewmodel.dart (0 hunks)
  • lib/viewmodels/profile/edit_profile_viewmodel.dart (0 hunks)
  • pubspec.yaml (1 hunks)
  • test/widget_test.dart (1 hunks)
💤 Files with no reviewable changes (5)
  • lib/viewmodels/cv_landing_viewmodel.dart
  • lib/ui/views/authentication/components/auth_options_view.dart
  • lib/viewmodels/profile/edit_profile_viewmodel.dart
  • lib/viewmodels/authentication/auth_options_viewmodel.dart
  • android/build.gradle
🔇 Additional comments (42)
.metadata (1)

4-20: LGTM! Flutter version update correctly reflected in metadata

The changes to the revision hash and structure of the migration section are consistent with upgrading to Flutter 3.29.2. These automatic updates are generated by the Flutter tool during the upgrade process.

.gitignore (1)

8-45: Updated .gitignore patterns align with Flutter 3.29.2 standards

The additions include important patterns for build artifacts, symbolication files, and platform-specific folders that should be excluded from version control. The commented-out .vscode/ entry will now allow sharing IDE configurations, which can be beneficial for team development.

android/app/src/main/AndroidManifest.xml (1)

1-1:

Details

✅ Verification successful

Package attribute removal follows modern Android practices

Removing the package attribute from the manifest is correct for newer Android Gradle Plugin versions. This attribute is now replaced by the 'namespace' property in build.gradle.


🏁 Script executed:

#!/bin/bash
# Verify that the namespace is properly defined in build.gradle
echo "Checking for namespace in android/app/build.gradle..."
grep -n "namespace" android/app/build.gradle || echo "WARNING: namespace not found in build.gradle!"

Length of output: 208


Verified Android Manifest Changes: Package Attribute Removal Correctly Replaced by Namespace

The android/app/build.gradle file properly defines the namespace property (line 59: namespace 'org.circuitverse.mobile_app'), confirming that removing the package attribute from AndroidManifest.xml is in line with current Android practices.

  • File: android/app/src/main/AndroidManifest.xml – The package attribute removal is correct.
  • File: android/app/build.gradle – The namespace is properly defined.
lib/ui/views/simulator/simulator_view.dart (1)

39-39: Updated WebView URL initialization for compatibility with flutter_inappwebview 6.1.5

The change from Uri.parse(model.url) to WebUri.uri(Uri.parse(model.url)) is necessary to maintain compatibility with the upgraded flutter_inappwebview package (6.1.5). This follows the package's new API requirements for URL handling.

lib/ui/views/ib/syntaxes/ib_liquid_syntax.dart (1)

9-9:

Details

✅ Verification successful

Accessing content property correctly addresses changes in markdown package API

The modification from parser.current to parser.current.content is appropriate and aligns with similar changes across other syntax files, suggesting adaptation to updated markdown parsing requirements in newer Flutter versions.

Let's verify the markdown package usage patterns:


🏁 Script executed:

#!/bin/bash
# Check the markdown package implementation across the codebase
rg -A 3 "pattern\.firstMatch\(parser\.current" --type dart

Length of output: 743


Verified: Consistent Markdown API Update

After running the verification script, the change to use parser.current.content is consistently applied in both ib_liquid_syntax.dart and ib_md_tag_syntax.dart. The modification aligns with the updated markdown package API in newer Flutter versions, and no further changes are needed.

lib/ui/views/projects/project_details_view.dart (1)

20-20:

Details

✅ Verification successful

Library upgrade from share to share_plus package

The update from share to share_plus aligns with dependency upgrades needed for Flutter 3.29.2 compatibility. However, verify that the code usage in lines 52-53 continues to work with share_plus.


🏁 Script executed:

#!/bin/bash
# Check if the Share class usage matches the share_plus API
grep -n "Share.share" lib/ui/views/projects/project_details_view.dart

# Check if there are any other Share usages in the file
grep -n "Share\." lib/ui/views/projects/project_details_view.dart

Length of output: 185


Verification Successful – Share API Usage is Compatible
The grep results confirm that the code at line 52 uses Share.share as expected with the share_plus package. Since the API call remains compatible following the dependency upgrade, no further changes are required.

test/widget_test.dart (1)

11-11:

Details

❓ Verification inconclusive

Verify MyApp class existence and constructor signature

The test imports and uses a MyApp class from main.dart. Ensure this class exists and has a constructor that matches the usage.


🏁 Script executed:

#!/bin/bash
# Check if MyApp exists in main.dart and has the expected constructor
grep -n "class MyApp" lib/main.dart

Length of output: 37


Ensure the MyApp class is properly defined in lib/main.dart

Our automated check did not find any instance of a MyApp class in lib/main.dart. Please verify manually that this class exists and its constructor signature matches its usage in test/widget_test.dart. If the class is missing or located in a different file, update either the class definition or the test accordingly.

lib/ui/views/ib/syntaxes/ib_embed_syntax.dart (1)

11-11: Updated return to use text.content property

This change properly accesses the content property of the text object, which is more appropriate for the iframe element construction. This aligns with how content is handled in similar syntax classes.

lib/ui/views/ib/ib_landing_view.dart (1)

330-330: Improved builder function syntax

The builder function has been refactored to use arrow function syntax, making the code more concise while maintaining the same functionality. This is a good syntax improvement for lambda expressions.

lib/ui/views/ib/syntaxes/ib_md_tag_syntax.dart (2)

10-10: Updated to use parser.current.content

This change appropriately uses the content property when matching patterns, which is more accurate for text processing in Markdown parsing. This ensures the match is derived from the actual content.


24-24: Updated return to use text.content property

This change correctly uses the content property when creating header elements, ensuring that the actual text content is used rather than the entire node object. This improves the accuracy of subtitle rendering.

lib/ui/views/ib/ib_page_view.dart (1)

195-214:

Details

✅ Verification successful

Updated MarkdownBody parameters

The MarkdownBody widget parameters have been updated to align with newer Flutter/markdown package versions. The blockBuilders parameter has been renamed to builders, and the imageBuilder parameter has been removed. This change adapts the code to the current Flutter 3.29.2 API.


🏁 Script executed:

#!/bin/bash
# Check documentation on the current MarkdownBody parameters

# Search for MarkdownBody constructor to verify parameter naming
fd -e dart | xargs grep -l "class MarkdownBody" | xargs grep -A 20 "MarkdownBody"

# Search for actual usage of MarkdownBody to see patterns
fd -e dart | xargs grep -l "MarkdownBody(" | head -n 5 | xargs grep -A 5 "MarkdownBody("

Length of output: 965


MarkdownBody parameter update confirmed

The changes to use the builders map instead of the old blockBuilders parameter—and the removal of the imageBuilder parameter—have been verified against the current Flutter 3.29.2 API specifications. The updated implementation in lib/ui/views/ib/ib_page_view.dart now aligns correctly with the newer Flutter/markdown package versions.

  • Confirmed that no instances of the obsolete blockBuilders or imageBuilder remain in the codebase.
  • The usage of builders with the provided mapping for heading keys and custom builders is correct.
lib/ui/components/cv_typeahead_field.dart (2)

53-75: Refactored TypeAhead implementation looks good

The refactoring from using FutureBuilder with TypeAheadFormField to directly using TypeAheadField simplifies the code and aligns with the updated flutter_typeahead package (5.2.0). The suggestion logic and error handling are preserved.


53-85:

Details

❓ Verification inconclusive

Verify the onSaved callback is properly utilized

The widget still accepts an onSaved parameter (line 37), but this callback doesn't appear to be used in the refactored implementation. The onSelected method now only updates the controller's text value.


🏁 Script executed:

#!/bin/bash
# Find where the onSaved callback might be used elsewhere in the codebase
rg "CVTypeAheadField\(.*onSaved:" --type dart

Length of output: 47


Action Required: Verify/Integrate the onSaved Callback in CVTypeAheadField

It appears that while the widget’s constructor still accepts an onSaved parameter (around line 37 in lib/ui/components/cv_typeahead_field.dart), the refactored implementation does not make any internal calls to this callback—instead, the onSelected callback solely updates the controller’s text. Our initial search using rg "CVTypeAheadField\(.*onSaved:" --type dart yielded no further references to its usage in the codebase.

  • File: lib/ui/components/cv_typeahead_field.dart
  • Issue: The onSaved callback is declared but not utilized in the widget’s implementation. Verify if this is intentional. If the onSaved callback is meant to be part of the widget’s functionality (for example, to trigger saving behavior when a selection is made or the form is submitted), then its invocation should be implemented. Otherwise, consider removing it from both the widget’s API and its related documentation to avoid confusion.

Please manually verify whether the onSaved callback should be either removed or integrated into the field’s event flow.

android/app/build.gradle (4)

1-5: Update to modern Gradle plugin configuration is appropriate

The migration to using the plugins DSL format is in line with current best practices and aligns with the Flutter 3.29.2 upgrade.


61-68: Java 17 and Kotlin JVM target update is appropriate

Setting Java compatibility and Kotlin JVM target to 17 is necessary for modern Android development and aligns with the Flutter 3.29.2 requirements.


80-80:

Details

✅ Verification successful

Note the increase in minimum Android version requirement

Increasing minSdkVersion from 21 to 23 drops support for Android 5.0 (Lollipop) and 5.1. This means the app will now only work on Android 6.0 (Marshmallow) and newer devices. Make sure this change is intentional and properly communicated to users.


🌐 Web query:

What percentage of Android devices still run on Android 5.x (API levels 21-22) in 2025?

💡 Result:

As of 2025, Android 5.x (Lollipop, API levels 21-22) accounts for less than 1% of active Android devices globally. Specific data points include:

  • 0.7% combined share for Android 5.0–5.1 (Lollipop) as of November 2024, according to AppBrain data[7].
  • Older distributions like Android 5.x are now classified as "legacy" and collectively represent under 1% of devices when combined with other pre-Android 10 versions[11].

This minimal adoption reflects the natural lifecycle of Android versions, where most users migrate to newer OS releases over time. Google Play now requires apps to target at least Android 14 (API level 34) for new submissions as of August 2024[6], further accelerating the deprecation of older platforms like Lollipop.

Citations:


Update on Minimum SDK Version Change Verification

The change in android/app/build.gradle (line 80) to minSdkVersion 23 removes support for Android 5.x (API levels 21–22). Recent data shows that Android 5.x devices represent less than 1% of the active market in 2025, making this a low-risk change. Please ensure this adjustment aligns with your release strategy and that the decision to drop legacy support is clearly communicated to users.

  • Verify that the limited impact on users is acceptable.
  • Confirm that release notes or any user documentation clearly state the removal of support for Android 5.x devices.

58-59:

Details

❓ Verification inconclusive

Verify Android 15 (SDK 35) compatibility

The compileSdkVersion has been increased to 35, which corresponds to Android 15. This is a very recent SDK version. Ensure that all testing is done thoroughly as mentioned in the PR objectives.


🌐 Web query:

What is the latest stable Android SDK version as of March 2025?

💡 Result:

The latest stable Android SDK version as of March 2025 is Android 16 (API level 36), codenamed Baklava. This version reached Platform Stability with Beta 3 in March 2025, marking the finalization of APIs and system behaviors for developers[4][7][13].

Key details:

  • Release Timeline:

    • Beta 3 (March 2025) introduced critical fixes for stability, connectivity, and performance, including resolving issues with Doze mode and unexpected reboots[7].
    • Platform Stability ensures no further changes to APIs or behaviors after this milestone, allowing developers to finalize app compatibility[13].
  • SDK Support:
    Android 16 requires Android 5 (API level 23) as the minimum supported OS for SDKs like Google Places[3]. Earlier SDK versions remain compatible with older OS versions but lack new features.

For context, Android 15 (API level 35) was released in 2024 and had a 1.34% adoption rate by March 2025, while Android 14 (API level 34) remained the most widely used version at 51.03%[11][14].

Citations:


Action: Reassess the Android SDK version configuration

  • The compileSdkVersion is currently set to 35 (Android 15), yet the latest stable SDK as of March 2025 is Android 16 (API level 36, codename Baklava).
  • Verify that targeting Android 15 is intentional. Please confirm that all app functionality and compatibility have been thoroughly tested on Android 15.
  • Additionally, consider evaluating the potential benefits and impacts of upgrading to Android 16 given its Platform Stability and finalized APIs.
lib/ui/views/ib/builders/ib_interaction_builder.dart (1)

51-53: WebViewWidget usage is correct

The update from WebView to WebViewWidget with the controller parameter is in line with the new WebView Flutter plugin API.

lib/ui/views/ib/builders/ib_webview_builder.dart (1)

30-32: WebViewWidget usage is correct

The update from WebView to WebViewWidget and passing the controller is in line with the new WebView Flutter API.

android/settings.gradle (5)

1-8: Review: Plugin Management Block

The new block effectively retrieves the Flutter SDK path from the local properties file and asserts its existence. This approach enforces that flutter.sdk is properly set before proceeding.


10-10: Review: Inclusion of Flutter Gradle Tools

Including the Flutter Gradle tools via the retrieved SDK path (includeBuild("$flutterSdkPath/packages/flutter_tools/gradle")) is clearly stated and helps guarantee that the build uses the correct Flutter tooling.


12-16: Review: Repository Configuration

Defining the repositories (google, mavenCentral, and gradlePluginPortal) explicitly ensures reliable dependency resolution. This change aligns with modern Gradle practices for managing plugins and external dependencies.


19-22: Review: Plugin Declarations

The explicit declaration of plugins with specified versions in this block increases clarity and control over the build process. Please verify that these versions (for example, Android Application plugin v8.2.1 and Kotlin Android plugin v2.1.10) are fully compatible with Flutter 3.29.2.


25-25: Review: Module Inclusion

Including the :app module explicitly at the end ensures that the main application module is incorporated in the build. This is standard practice and looks correct.

pubspec.yaml (17)

26-26: Dependency Update: flutter_inappwebview

The dependency is updated to ^6.1.5, which should bring the latest improvements and fixes. Please double-check for any breaking changes or API adjustments that might affect your in-app web view implementation.


29-29: Dependency Update: flutter_keyboard_visibility

Upgrading to ^6.0.0 may introduce some API changes or enhanced features. Ensure that all instances where keyboard visibility is managed are tested thoroughly to catch any regression.


32-32: Dependency Update: flutter_markdown

Transitioning to a versioned dependency (^0.7.6+2) from a Git-based source can improve stability. Confirm that Markdown rendering behavior remains intact with this update.


33-33: Dependency Update: flutter_math_fork

Upgrading to ^0.7.3 should provide improved functionality or bug fixes. It would be beneficial to verify that all mathematical rendering or computation aspects using this package perform as expected.


35-35: Dependency Update: flutter_svg

The update to ^2.0.17 suggests improvements in SVG handling and rendering. Please review any changes in the SVG API and test the affected UI components for compatibility.


36-36: Dependency Update: flutter_typeahead

Updating to ^5.2.0 may introduce enhancements and bug fixes in the typeahead functionality. Ensure that predictive text or suggestion features perform seamlessly post-upgrade.


39-39: Dependency Update: get_it

Upgrading get_it to ^8.0.3 supports improved dependency injection or service locator patterns. Confirm that object instantiation and dependency management are functioning correctly with this new version.


40-40: Dependency Update: google_sign_in

The package google_sign_in is now at ^6.3.0. Since authentication flows can be sensitive to API changes, it is advisable to test all Google sign-in related functionalities to ensure they work as expected.


45-45: Dependency Update: image_cropper

Upgrading to ^9.0.0 is a significant jump that could include breaking changes. It is critical to test image cropping workflows on all targeted devices to ensure that the updated API integrates smoothly.


47-47: Dependency Update: intl

Bumping the version to ^0.19.0 should enhance localization and internationalization capabilities. Verify that the formatting of dates, numbers, and currencies remains correct across different locales.


50-50: Dependency Update: permission_handler

The update to ^11.4.0 might bring changes in how permissions are requested and handled. Ensure that the app's permission flows (e.g., for camera, storage) are compliant with the latest practices.


51-51: Dependency Update: photo_view

Updating photo_view to ^0.15.0 should optimize image viewing and zoom interactions. Make sure to test the interactive gestures on various devices to confirm compatibility.


52-52: Dependency Update: oauth2_client

The upgrade to ^4.1.0 likely improves security and performance during OAuth flows. It is important to validate the authentication and token management processes with this new release.


55-55: Dependency Update: share_plus

Replacing the old share package with share_plus at version ^10.1.4 is a positive step toward better community support and enhanced sharing capabilities. Be sure to test that all sharing functionalities (e.g., file, text, URL sharing) work seamlessly.


57-57: Dependency Update: showcaseview

The update to ^4.0.1 may provide a more refined in-app user guidance experience via showcases. Confirm that all UI walkthroughs and help prompts display as intended.


58-58: Dependency Update: simple_chips_input

Upgrading to ^1.2.0 should address previous issues or add useful enhancements for chip inputs. Verify that UI components using this package behave correctly post-update.


66-66: Dev Dependency Update: flutter_lints

Updating flutter_lints to ^5.0.0 will help enforce more up-to-date lint rules aligned with recent Flutter best practices. Make sure that the project does not introduce new lint errors as a result of the updated rules.

zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-all.zip
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Gradle version update is appropriate for Flutter 3.29.2

This update from Gradle 7.0.2 to 8.5 aligns with the Flutter 3.29.2 upgrade objective. Flutter 3.29.x typically works better with Gradle 8.x for Android builds.


🌐 Web query:

What Gradle version is recommended for Flutter 3.29.2?

💡 Result:

The recommended Gradle version for Flutter 3.29.2 is 7.6.1, as specified in Flutter's official migration documentation[3]. This version ensures compatibility with Flutter's toolchain and Android build system.

For projects upgrading to Flutter 3.29.x:

  1. Update Gradle using the command:
    ./gradlew wrapper --gradle-version=7.6.1
  2. Confirm compatibility with Java 17 for Android builds[3][4].

Key considerations:

  • Gradle versions between 7.3 and 7.6.1 are officially supported[3][9].
  • Avoid newer versions like 8.x unless explicitly required, as they may introduce compatibility issues[6][7].
  • Use flutter doctor -v to verify your environment setup[3].

For platform-specific configurations, ensure your android/build.gradle aligns with Flutter 3.29's requirements, including updated Kotlin and Android Gradle Plugin versions[7][8].

Citations:


Action Required: Revert Gradle Version Update for Flutter 3.29.2 Compatibility

  • The current configuration in android/gradle/wrapper/gradle-wrapper.properties sets:
    distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-all.zip
    
  • According to Flutter's official migration documentation, the recommended Gradle version for Flutter 3.29.2 is 7.6.1. Gradle versions between 7.3 and 7.6.1 are officially supported, and using 8.x may introduce compatibility issues.
  • Please update the gradle wrapper configuration to:
    distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.1-all.zip
    
  • Ensure that any involved Gradle configurations (and related plugins) are consistent with Flutter 3.29’s requirements.

- Also removed the default test which got added by mistake
- Currently 6 tests are failing
@tachyons
Copy link
Member

@realaashil Could you run flutter format before pushing ?

@realaashil
Copy link
Contributor Author

@tachyons I have formatted the code according to the flutter docs, Is there anything I am missing? Let me know!

@tachyons
Copy link
Member

@realaashil Flutter analyze is still failing due to depredations

@hardik17771 Could you take a look

@hardik17771
Copy link
Member

Sure @tachyons , let me check once.

@realaashil
Copy link
Contributor Author

realaashil commented Mar 17, 2025

Flutter anaylze should pass now!
I followed libraries offical migration guide for most of the code.

@realaashil
Copy link
Contributor Author

I am not good at tests, but as far I understand we need to implement a fake / mock of WebViewPlatform to pass the failing tests.

…splay

- Use Android WebViewPlatform for unit testing.
- Update mailing list subscription status to display "Yes/No" instead of "true/false."
- Address Summernote's dependency on the old WebViewController implementation, ensuring it is initialized before being passed to the constructor.
@realaashil
Copy link
Contributor Author

@tachyons @hardik17771 Passed the tests, Please review the pr and let me know!.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
pubspec.yaml (1)

34-36: flutter_summernote Addition as Git Dependency
The dependency flutter_summernote has been added using a Git URL (https://github.com/realaashil/flutter_summernote). Consider specifying a commit hash or tag to lock the dependency to a known stable state. This can help avoid unexpected breaks if the remote repository is updated.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 949f401 and 5bad1ae.

⛔ Files ignored due to path filters (1)
  • pubspec.lock is excluded by !**/*.lock
📒 Files selected for processing (5)
  • pubspec.yaml (1 hunks)
  • test/ui_tests/groups/add_assignment_view_test.dart (2 hunks)
  • test/ui_tests/groups/group_details_view_test.dart (2 hunks)
  • test/ui_tests/groups/update_assignment_view_test.dart (2 hunks)
  • test/ui_tests/profile/profile_view_test.dart (1 hunks)
🔇 Additional comments (24)
test/ui_tests/profile/profile_view_test.dart (1)

98-98: Appropriate test adjustment to handle UI changes.

The test has been updated to use a more flexible matching approach by checking if the text contains "Subscribed to mails" instead of requiring an exact text match. This change aligns with modifications in the actual implementation where subscription status display has been altered.

test/ui_tests/groups/update_assignment_view_test.dart (2)

17-19: Added necessary WebView Flutter imports for testing.

These imports are required to set up the WebView platform for testing in Flutter 3.29.2. The WebView Flutter packages provide the necessary interfaces and implementations to mock the WebView functionality during tests.


32-32: Properly initialized WebViewPlatform for tests.

Setting WebViewPlatform.instance to AndroidWebViewPlatform() ensures that the tests have a concrete implementation of the WebView platform. This is necessary for the Flutter 3.29.2 upgrade as the WebView implementation has changed and requires explicit platform initialization in tests.

test/ui_tests/groups/group_details_view_test.dart (2)

17-18: Added necessary WebView Flutter imports for testing.

These imports provide the required interfaces and implementations to mock WebView functionality during tests, which is necessary for compatibility with Flutter 3.29.2.


34-34: Properly initialized WebViewPlatform for tests.

Setting WebViewPlatform.instance to AndroidWebViewPlatform() ensures that the tests have a concrete implementation of the WebView platform. This matches the implementation in other test files and is consistent with the Flutter 3.29.2 migration requirements.

test/ui_tests/groups/add_assignment_view_test.dart (2)

16-17: Added necessary WebView Flutter imports for testing.

These imports are required for setting up the WebView platform mock in Flutter 3.29.2. They provide the interfaces and implementations needed for the WebView functionality to work correctly in the test environment.


29-29: Properly initialized WebViewPlatform for tests.

Setting WebViewPlatform.instance to AndroidWebViewPlatform() follows the correct pattern for initializing WebView in tests after the Flutter 3.29.2 upgrade. This initialization is consistent with the approach used in other test files.

pubspec.yaml (17)

17-19: SDK Version Constraint Updated
The Dart SDK constraint has been updated to ">=2.15.0 <3.0.0". This change enables usage of newer language features available from Dart 2.15 onward. Please ensure that the codebase and any dependent packages remain compatible with this SDK upgrade.


26-26: flutter_inappwebview Dependency Upgrade
The version for flutter_inappwebview has been upgraded to ^6.1.5. Verify that the new version's API and behavior are compatible with your existing implementation and that any breaking changes outlined in the migration guide have been addressed.


29-29: flutter_keyboard_visibility Dependency Upgrade
The flutter_keyboard_visibility package has been updated to ^6.0.0. Please review its migration notes to confirm that all API changes (if any) are properly integrated into your project.


32-32: flutter_markdown Dependency Shift
The dependency for flutter_markdown now uses the versioned release ^0.7.6+2 instead of a Git reference. This change should improve stability. Double-check that any API changes from this update do not affect markdown rendering in your application.


33-33: flutter_math_fork Dependency Upgrade
Updated to ^0.7.3. Ensure that the mathematical rendering and related features continue to work as expected following this dependency bump.


37-38: UI Dependency Updates for flutter_svg and flutter_typeahead
Both flutter_svg (updated to ^2.0.17) and flutter_typeahead (updated to ^5.2.0) have been upgraded. Please test any components that utilize these libraries to ensure that no API changes affect your UI rendering or behavior.


41-42: Dependency Upgrades: get_it and google_sign_in
The get_it package is now at ^8.0.3 and google_sign_in at ^6.3.0. Revisit parts of the code that depend on service location and Google authentication to verify that any breaking changes or updated configurations have been handled properly.


49-49: intl Dependency Upgrade
The intl package has been updated to ^0.19.0. Confirm that date, number, and localization formatting continue to perform as expected with this newer version.


52-52: permission_handler Upgrade
The dependency for permission_handler now stands at ^11.4.0. Ensure that any changes in the permission request flow or API modifications have been integrated into your permission management logic.


53-53: photo_view Dependency Upgrade
With the upgrade to ^0.15.0, test your image viewing functionalities to confirm that the new version maintains the required behavior and UI consistency.


54-54: oauth2_client Dependency Upgrade
The oauth2_client package has been updated to ^4.1.0. Please verify that OAuth flows function correctly and that any API changes do not affect authentication mechanisms in your application.


57-57: share_plus Now Replaces share Package
The dependency has been updated to share_plus: ^10.1.4, replacing the previously commented out share package. Confirm that sharing functionality integrates as expected and that the newer package meets your cross-platform sharing requirements.


59-59: showcaseview Dependency Upgrade
Upgraded to ^4.0.1. Validate that any in-app tutorial or showcase features provided by this library still operate smoothly following the update.


60-60: simple_chips_input Dependency Upgrade
Updated to ^1.2.0. Please test all chip input related functionalities to ensure there are no regressions or changes in behavior with the new version.


61-61: theme_provider Dependency Upgrade
The dependency theme_provider now uses version ^0.6.0. Verify that the updated theming and appearance settings continue to work as expected, especially if custom themes have been defined.


65-65: Addition of flutter_facebook_auth Dependency
flutter_facebook_auth has been added with version ^6.0.4, enabling Facebook authentication features. It is important to validate the integration flows and ensure appropriate permissions and configurations are set up.


69-69: flutter_lints Dev Dependency Upgrade
The linting rules have been updated with flutter_lints now at ^5.0.0. This ensures adherence to the latest Flutter coding standards. Make sure to address any new lint warnings or errors introduced by this upgrade.

html: ^0.15.0
html_unescape: ^2.0.0
image_cropper: ^2.0.3
image_cropper: ^9.0.0
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Major Version Upgrade for image_cropper
Upgraded to ^9.0.0, which is a major version bump. This update could include significant API changes. It is important to review the migration documentation and test any image cropping functionalities to ensure they continue to operate correctly.

@realaashil
Copy link
Contributor Author

@tachyons Do we need 3 platforms to test and compile flutter android build? Shouldn't macos build ios app and windows should be entirely removed.

@hardik17771
Copy link
Member

Hey @realaashil , we are currently in progress for setting a proper version setup and CI for all contributors. Will be done in a couple of days. Thanks for your contributions, we'll review the PR along with any doubts.

@tachyons
Copy link
Member

@realaashil No, we need them to make sure that it building properly in all platforms, because our contributors might be using any of these platforms

@realaashil
Copy link
Contributor Author

realaashil commented Mar 19, 2025

@tachyons Make sense, will wait for stable ci.

@hardik17771
Copy link
Member

Hey @realaashil, Your PR looks fine. Just keep the sdk environment as

environment:
  sdk: ">=3.7.2 <4.0.0"

You can use FVM to run the same if needed. I have pinged you on the slack with complete pubspec.yaml file for versions of different dependencies with your flutter version as well. LMK when this works and then I will share you with updated CI file so we can check if the test error for windows is solved or not. Once running, we'll merge this PR.

@realaashil
Copy link
Contributor Author

Hey @hardik17771 , I was thinking of progressively increasing the sdk version along the way, as for windows ci, tests got passed but it re uploaded apk to artifacts with the same name leading to failure. We can use a suffix apk name with a platform name to avoid this.

@hardik17771
Copy link
Member

Sure @realaashil , that's why we are updating the CI file so no duplicates are uploaded now.

name: CI

on:
  push:
    branches:
      - master
  pull_request:

jobs:
  build:
    strategy:
      matrix:
        platform: [ubuntu-latest, macos-latest, windows-latest]
    runs-on: ${{ matrix.platform }}
    timeout-minutes: 40
    steps:
      - name: Checkout Repository
        uses: actions/checkout@v3

      - name: Setup Java
        uses: actions/setup-java@v3
        with:
          distribution: "temurin"
          java-version: "17"

      - name: Setup Flutter
        uses: subosito/flutter-action@v2
        with:
          channel: "stable"

      - name: Clean and Get Dependencies
        run: |
          flutter clean
          flutter pub get

      - name: Build Runner (Generate Dart Files)
        run: flutter packages pub run build_runner build --delete-conflicting-outputs

      - name: Format Check
        run: dart format --set-exit-if-changed .

      - name: Analyze Code
        run: flutter analyze

      - name: Run Tests with Coverage
        run: flutter test --coverage

      - name: Upload Coverage to Coveralls
        uses: coverallsapp/github-action@v2
        with:
          github-token: ${{ secrets.GITHUB_TOKEN }}
          flag-name: run-${{ matrix.platform }}
          parallel: true

      - name: Build APK (Android)
        run: flutter build apk

      - name: Build iOS (MacOS Only)
        if: ${{ matrix.platform == 'macos-latest' }}
        run: |
          rm -f ios/Podfile.lock
          flutter build ios --release --no-codesign

      - name: Upload APK as Artifact
        uses: actions/upload-artifact@v4
        with:
          name: release-apk-${{ matrix.platform }}-${{ github.run_id }}
          path: build/app/outputs/apk/release/app-release.apk
          if-no-files-found: error

  finish:
    needs: build
    runs-on: ubuntu-latest
    steps:
      - name: Finalize Coveralls Reporting
        uses: coverallsapp/github-action@v2
        with:
          github-token: ${{ secrets.GITHUB_TOKEN }}
          parallel-finished: true

Update the CI file with this and we'll see if it runs now with your next commit.

@realaashil
Copy link
Contributor Author

Hey @hardik17771 , done check once and let me know with any issues!

@realaashil
Copy link
Contributor Author

Ah my bad again forgot to format the code oops, can you please rerun the workflow @hardik17771. Thanks

Copy link

@coderabbitai coderabbitai bot left a 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

🧹 Nitpick comments (8)
.github/workflows/ci.yml (3)

17-19: Action Version Check for Checkout Repository
The workflow uses actions/checkout@v3. However, static analysis indicates that the runner used may be outdated. Please verify against the latest available version or the action’s changelog to ensure optimal compatibility.

🧰 Tools
🪛 actionlint (1.7.4)

18-18: the runner of "actions/checkout@v3" action is too old to run on GitHub Actions. update the action's version to fix this issue

(action)


20-24: Action Version Check for Setup Java
The workflow now employs actions/setup-java@v3 with the specified temurin distribution and java-version: "17". Similar to the checkout action, static analysis flags a potential issue regarding action freshness. Confirm that this version is the best choice or consider upgrading if a newer version is available.

🧰 Tools
🪛 actionlint (1.7.4)

21-21: the runner of "actions/setup-java@v3" action is too old to run on GitHub Actions. update the action's version to fix this issue

(action)


75-79: Finalize Coveralls Reporting and File Formatting
The final step, "Finalize Coveralls Reporting," is well-integrated. However, YAMLlint has flagged trailing spaces on line 79 and a missing newline at the end of the file. Please remove the trailing spaces and add a newline at the end to ensure compliance with YAML formatting standards.

🧰 Tools
🪛 YAMLlint (1.35.1)

[error] 79-79: no new line character at the end of file

(new-line-at-end-of-file)


[error] 79-79: trailing spaces

(trailing-spaces)

pubspec.yaml (5)

34-35: Reference flutter_summernote via Git
The flutter_summernote dependency is now referenced directly from Git. For improved reproducibility, consider pinning to a specific commit or tag to avoid unexpected changes from upstream.


67-67: Add http Dependency without Version Constraint
The http package is added with an any version constraint. It is advisable to specify a version range to mitigate potential future breaking changes.


68-68: Add markdown Dependency without Version Constraint
Similar to the http dependency, consider pinning the markdown package to a specific version range instead of using any to maintain build consistency.


69-69: Add webview_flutter Dependency without Version Constraint
The dependency is currently set to any. Specifying a version constraint is recommended to ensure stability in web-view related functionalities.


77-79: Dev Dependencies Version Constraints
The following dev dependencies are now specified with any:

  • webview_flutter_platform_interface
  • webview_flutter_android
  • collection

For increased reproducibility and to avoid unexpected issues from upstream changes, consider pinning these dependencies to a version range.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between e3f0168 and 85d6628.

⛔ Files ignored due to path filters (1)
  • pubspec.lock is excluded by !**/*.lock
📒 Files selected for processing (63)
  • .github/workflows/ci.yml (1 hunks)
  • lib/main.dart (1 hunks)
  • lib/models/ib/ib_content.dart (1 hunks)
  • lib/ui/components/cv_add_icon_button.dart (1 hunks)
  • lib/ui/components/cv_drawer.dart (1 hunks)
  • lib/ui/components/cv_drawer_tile.dart (1 hunks)
  • lib/ui/components/cv_header.dart (1 hunks)
  • lib/ui/components/cv_html_editor.dart (1 hunks)
  • lib/ui/components/cv_outline_button.dart (1 hunks)
  • lib/ui/components/cv_password_field.dart (1 hunks)
  • lib/ui/components/cv_primary_button.dart (1 hunks)
  • lib/ui/components/cv_social_card.dart (1 hunks)
  • lib/ui/components/cv_subheader.dart (1 hunks)
  • lib/ui/components/cv_tab_bar.dart (1 hunks)
  • lib/ui/components/cv_text_field.dart (1 hunks)
  • lib/ui/components/cv_typeahead_field.dart (3 hunks)
  • lib/ui/views/about/about_privacy_policy_view.dart (1 hunks)
  • lib/ui/views/about/about_tos_view.dart (1 hunks)
  • lib/ui/views/about/about_view.dart (1 hunks)
  • lib/ui/views/about/components/contributor_avatar.dart (1 hunks)
  • lib/ui/views/authentication/components/auth_options_view.dart (1 hunks)
  • lib/ui/views/authentication/forgot_password_view.dart (1 hunks)
  • lib/ui/views/authentication/login_view.dart (1 hunks)
  • lib/ui/views/authentication/signup_view.dart (1 hunks)
  • lib/ui/views/base_view.dart (1 hunks)
  • lib/ui/views/contributors/components/contributors_donate_card.dart (1 hunks)
  • lib/ui/views/contributors/components/contributors_support_card.dart (3 hunks)
  • lib/ui/views/contributors/contributors_view.dart (4 hunks)
  • lib/ui/views/cv_landing_view.dart (4 hunks)
  • lib/ui/views/groups/add_assignment_view.dart (1 hunks)
  • lib/ui/views/groups/assignment_details_view.dart (2 hunks)
  • lib/ui/views/groups/components/assignment_card.dart (1 hunks)
  • lib/ui/views/groups/components/group_card_button.dart (1 hunks)
  • lib/ui/views/groups/components/group_member_card.dart (1 hunks)
  • lib/ui/views/groups/components/group_mentor_card.dart (1 hunks)
  • lib/ui/views/groups/components/member_card.dart (1 hunks)
  • lib/ui/views/groups/edit_group_view.dart (1 hunks)
  • lib/ui/views/groups/group_details_view.dart (1 hunks)
  • lib/ui/views/groups/my_groups_view.dart (1 hunks)
  • lib/ui/views/groups/new_group_view.dart (1 hunks)
  • lib/ui/views/groups/update_assignment_view.dart (1 hunks)
  • lib/ui/views/home/components/feature_card.dart (1 hunks)
  • lib/ui/views/home/home_view.dart (1 hunks)
  • lib/ui/views/ib/components/ib_pop_quiz.dart (1 hunks)
  • lib/ui/views/ib/components/ib_pop_quiz_button.dart (1 hunks)
  • lib/ui/views/ib/ib_landing_view.dart (4 hunks)
  • lib/ui/views/ib/ib_page_view.dart (14 hunks)
  • lib/ui/views/notifications/notifications_view.dart (3 hunks)
  • lib/ui/views/profile/edit_profile_view.dart (1 hunks)
  • lib/ui/views/profile/profile_view.dart (2 hunks)
  • lib/ui/views/profile/user_favourites_view.dart (1 hunks)
  • lib/ui/views/profile/user_projects_view.dart (1 hunks)
  • lib/ui/views/projects/components/featured_project_card.dart (1 hunks)
  • lib/ui/views/projects/components/project_card.dart (1 hunks)
  • lib/ui/views/projects/edit_project_view.dart (1 hunks)
  • lib/ui/views/projects/featured_projects_view.dart (1 hunks)
  • lib/ui/views/projects/project_details_view.dart (2 hunks)
  • lib/ui/views/projects/project_preview_fullscreen_view.dart (1 hunks)
  • lib/ui/views/simulator/simulator_view.dart (2 hunks)
  • lib/ui/views/startup_view.dart (1 hunks)
  • lib/ui/views/teachers/components/teachers_card.dart (1 hunks)
  • lib/ui/views/teachers/teachers_view.dart (1 hunks)
  • pubspec.yaml (1 hunks)
✅ Files skipped from review due to trivial changes (42)
  • lib/ui/views/groups/components/group_member_card.dart
  • lib/ui/views/home/home_view.dart
  • lib/ui/components/cv_add_icon_button.dart
  • lib/ui/views/projects/project_preview_fullscreen_view.dart
  • lib/ui/views/projects/edit_project_view.dart
  • lib/ui/components/cv_drawer.dart
  • lib/ui/views/authentication/login_view.dart
  • lib/ui/views/base_view.dart
  • lib/ui/views/contributors/contributors_view.dart
  • lib/ui/views/groups/group_details_view.dart
  • lib/ui/views/profile/user_favourites_view.dart
  • lib/ui/views/about/about_privacy_policy_view.dart
  • lib/ui/views/projects/components/featured_project_card.dart
  • lib/ui/views/profile/edit_profile_view.dart
  • lib/ui/components/cv_html_editor.dart
  • lib/ui/views/projects/components/project_card.dart
  • lib/ui/views/groups/components/assignment_card.dart
  • lib/main.dart
  • lib/ui/views/teachers/teachers_view.dart
  • lib/ui/views/about/about_view.dart
  • lib/ui/views/groups/new_group_view.dart
  • lib/ui/views/startup_view.dart
  • lib/ui/views/authentication/forgot_password_view.dart
  • lib/ui/views/teachers/components/teachers_card.dart
  • lib/ui/views/groups/my_groups_view.dart
  • lib/ui/views/groups/components/member_card.dart
  • lib/ui/views/groups/components/group_card_button.dart
  • lib/ui/views/groups/add_assignment_view.dart
  • lib/ui/components/cv_drawer_tile.dart
  • lib/ui/components/cv_text_field.dart
  • lib/ui/views/groups/edit_group_view.dart
  • lib/ui/views/about/about_tos_view.dart
  • lib/ui/components/cv_password_field.dart
  • lib/ui/components/cv_outline_button.dart
  • lib/ui/views/groups/components/group_mentor_card.dart
  • lib/ui/views/authentication/signup_view.dart
  • lib/ui/views/profile/user_projects_view.dart
  • lib/ui/views/contributors/components/contributors_donate_card.dart
  • lib/ui/views/projects/featured_projects_view.dart
  • lib/ui/views/contributors/components/contributors_support_card.dart
  • lib/ui/views/groups/update_assignment_view.dart
  • lib/ui/components/cv_tab_bar.dart
🚧 Files skipped from review as they are similar to previous changes (9)
  • lib/ui/views/groups/assignment_details_view.dart
  • lib/ui/views/ib/ib_landing_view.dart
  • lib/ui/components/cv_typeahead_field.dart
  • lib/ui/views/simulator/simulator_view.dart
  • lib/ui/views/profile/profile_view.dart
  • lib/ui/views/projects/project_details_view.dart
  • lib/ui/views/cv_landing_view.dart
  • lib/ui/views/notifications/notifications_view.dart
  • lib/ui/views/ib/ib_page_view.dart
🧰 Additional context used
🪛 actionlint (1.7.4)
.github/workflows/ci.yml

18-18: the runner of "actions/checkout@v3" action is too old to run on GitHub Actions. update the action's version to fix this issue

(action)


21-21: the runner of "actions/setup-java@v3" action is too old to run on GitHub Actions. update the action's version to fix this issue

(action)

🪛 YAMLlint (1.35.1)
.github/workflows/ci.yml

[error] 79-79: no new line character at the end of file

(new-line-at-end-of-file)


[error] 79-79: trailing spaces

(trailing-spaces)

⏰ Context from checks skipped due to timeout of 90000ms (1)
  • GitHub Check: build (macos-latest)
🔇 Additional comments (39)
lib/ui/views/about/components/contributor_avatar.dart (1)

8-11: Good use of super initializer parameters!

This change correctly modernizes the constructor by using the super initializer parameters feature introduced in Dart 2.17. Using super.key instead of explicitly declaring Key? key makes the code more concise while maintaining the same functionality. This is a recommended pattern in modern Flutter development and aligns well with the Flutter 3.29.2 upgrade.

lib/models/ib/ib_content.dart (2)

7-11: Improved constructor syntax with super-initializer parameters

The constructor now uses Dart's super-initializer parameters syntax, which simplifies the code by directly initializing the parent class field. This is part of the Flutter 3.29.2 upgrade and represents a more modern and concise approach to constructor inheritance.


18-18: Simplified constructor with super-initializer parameter

The IbMd constructor has been refactored to use the more concise super-initializer parameter syntax, which directly initializes the parent class's content field. This is a good modernization that aligns with Flutter 3.29.2's Dart language features.

lib/ui/components/cv_header.dart (1)

5-10: Constructor updated to use modern Flutter syntax.

The constructor has been updated to use super.key instead of explicitly declaring Key? key as a parameter. This is part of the Flutter 3.29.2 upgrade and follows current best practices for constructor definitions in Flutter.

lib/ui/components/cv_social_card.dart (1)

6-12: Constructor updated to use modern Flutter syntax.

The constructor has been updated to use super.key instead of explicitly declaring Key? key as a parameter. This change is in line with the Flutter 3.29.2 upgrade and follows current Flutter best practices for constructor definitions.

lib/ui/views/authentication/components/auth_options_view.dart (1)

10-10: Constructor updated to use modern Flutter syntax.

The constructor has been updated to use super.key instead of explicitly declaring Key? key as a parameter. This change aligns with the Flutter 3.29.2 upgrade and reflects modern constructor syntax in Flutter.

lib/ui/views/home/components/feature_card.dart (1)

4-9: Constructor updated to use modern Flutter syntax.

The constructor has been updated to use super.key instead of explicitly declaring Key? key as a parameter. This change is consistent with the Flutter 3.29.2 upgrade and follows current best practices for constructor parameter handling in Flutter.

lib/ui/components/cv_primary_button.dart (1)

5-12: Good use of super.key syntax

The updated constructor now uses the super.key syntax, which is a more concise way to pass the key parameter to the superclass. This change aligns with modern Flutter best practices and is part of the Flutter 3.29.2 upgrade.

lib/ui/components/cv_subheader.dart (1)

5-9: Properly updated constructor with super.key

The constructor has been correctly updated to use the super.key syntax instead of the explicit Key? key parameter. This change follows Flutter's recommended patterns and improves code readability while maintaining the same functionality.

lib/ui/views/ib/components/ib_pop_quiz_button.dart (1)

4-8: Constructor correctly updated with super.key syntax

The constructor signature has been properly modernized using the super.key syntax. This is consistent with Flutter's current best practices and improves code readability.

lib/ui/views/ib/components/ib_pop_quiz.dart (1)

8-12: Constructor properly updated with super.key

The IbPopQuiz constructor has been correctly updated to use the super.key syntax. This change is consistent with the Flutter 3.29.2 upgrade and follows modern Flutter conventions for constructor parameters.

.github/workflows/ci.yml (9)

26-30: Setup Flutter Action Review
The subosito/flutter-action@v2 is properly configured to set up the Flutter environment using the stable channel. This step is clear and correctly implemented.


31-35: Clean and Get Dependencies Step Clarity
Combining flutter clean and flutter pub get under the "Clean and Get Dependencies" step enhances the workflow’s efficiency and readability. No issues noted here.


36-38: Build Runner Step Evaluation
The "Build Runner (Generate Dart Files)" step is well-defined, using the command with --delete-conflicting-outputs to appropriately manage generated files. The naming and implementation are clear.


39-44: Code Analysis and Format Check Steps
The steps "Format Check" and "Analyze Code" ensure that code formatting and static analysis are enforced early in the CI process. These steps align well with best practices.


45-47: Test Execution with Coverage
The "Run Tests with Coverage" step is configured correctly to execute tests and collect coverage data. Make sure to monitor test results closely to catch any regressions early on.


48-54: Coveralls Integration Update
The updated step for uploading coverage to Coveralls via coverallsapp/github-action@v2 is a solid improvement. The use of a dynamic flag name based on the platform enhances the clarity and traceability of the build reports.


55-57: Build APK (Android) Step
The "Build APK (Android)" step, which triggers the flutter build apk command, is straightforward. Ensure this command runs as expected across all target Android configurations.


58-63: Build iOS (MacOS Only) Step Verification
The iOS build step efficiently conditions the build for macOS by using an if clause and force-removes ios/Podfile.lock via rm -f before executing the release build. This is acceptable; just double-check that forcefully removing the Podfile lock does not negatively impact subsequent incremental builds.


64-70: APK Artifact Upload Configuration
The "Upload APK as Artifact" step employs dynamic naming for the artifact, which improves traceability in CI. The if-no-files-found: error parameter is a good safeguard to catch build issues early.

pubspec.yaml (19)

17-19: Dart SDK Version Upgrade
The environment SDK has been updated to ">=3.7.2 <4.0.0" to align with Flutter 3.29.2. Please ensure that all parts of the project are compatible with Dart 3 and that no legacy code remains dependent on older Dart versions.


26-26: Upgrade flutter_inappwebview Dependency
The version has been updated to ^6.1.5. Verify that any modifications in the API or breaking changes introduced in this major update are properly handled in your app’s web integration.


29-29: Upgrade flutter_keyboard_visibility Dependency
The dependency is now set to ^6.0.0. Please check that the changes do not disrupt the UI behavior related to keyboard events.


32-33: Upgrade flutter_markdown and flutter_math_fork
The dependencies have been updated to ^0.7.6+2 and ^0.7.3, respectively. Ensure that the updated APIs (if any) are correctly integrated into the text rendering and math-related functionalities.


37-37: Upgrade flutter_svg Dependency
The package has been updated to ^2.0.17. Confirm that vector graphics and any custom SVG manipulations render correctly after this change.


38-38: Upgrade flutter_typeahead Dependency
With the update to ^5.2.0, please validate that auto-complete and suggestion functionalities work seamlessly with the new version.


41-41: Upgrade get_it Dependency
The dependency is now upgraded to ^8.0.3. Verify that your dependency injection patterns (such as singleton registrations) are still functioning as expected.


42-42: Upgrade google_sign_in Dependency
The package has been updated to ^6.3.0. It is important to double-check that authentication flows and any platform-specific configurations remain intact after this upgrade.


47-47: Upgrade image_cropper Dependency
The dependency now uses ^9.0.0, which is a major upgrade. Please review and test the migration guide for any breaking changes in image cropping functionalities.


49-49: Upgrade intl Dependency
Updated to ^0.19.0, this change could impact locale formatting and date/time representations. Ensure that all internationalization and localization features are thoroughly tested.


52-52: Upgrade permission_handler Dependency
Now at ^11.4.0, confirm that permission requests and dialog handling continue to operate correctly on all supported platforms.


53-53: Upgrade photo_view Dependency
The update to ^0.15.0 should be verified to ensure that image viewing and zoom functionalities perform as expected after the change.


54-54: Upgrade oauth2_client Dependency
With the dependency updated to ^4.1.0, please test all OAuth2 flows to confirm they remain robust and secure.


57-57: Switch to share_plus Dependency
The dependency now uses share_plus at ^10.1.4, replacing the older share package. Verify that sharing functionality and any related UI integrations are unaffected by this change.


59-59: Upgrade showcaseview Dependency
Upgraded to ^4.0.1, this change should be tested to ensure that guided tours, feature showcases, or any onboarding experiences operate correctly without regressions.


60-60: Upgrade simple_chips_input Dependency
Now updated to ^1.2.0, please confirm that UI components utilizing chips inputs continue to display and function as expected.


61-61: Upgrade theme_provider Dependency
The dependency is bumped to ^0.6.0. Ensure that theme management across the application works reliably and that no unintended visual regressions appear.


65-65: Add flutter_facebook_auth Dependency
Added with version ^6.0.4, this dependency supports Facebook login functionality. Please validate that the authentication flow, along with permissions and callback handling, works correctly.


72-72: Upgrade flutter_lints
Upgraded to ^5.0.0, this update enforces more comprehensive linting rules. Confirm that the changes align with your project's style guidelines and coding standards.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
lib/ui/components/cv_typeahead_field.dart (1)

8-8: Fix the documentation typo.

There's a typo in the documentation comment. "TextInputStream" should be "TextInputType".

- /// When a [TextInputStream not specified, it defaults to [TextInputType.text]
+ /// When a [TextInputType] not specified, it defaults to [TextInputType.text]
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 85d6628 and 2458c09.

📒 Files selected for processing (191)
  • lib/cv_theme.dart (1 hunks)
  • lib/data/restriction_elements.dart (5 hunks)
  • lib/ib_theme.dart (1 hunks)
  • lib/locator.dart (2 hunks)
  • lib/main.dart (3 hunks)
  • lib/models/assignments.dart (1 hunks)
  • lib/models/collaborators.dart (2 hunks)
  • lib/models/cv_contributors.dart (2 hunks)
  • lib/models/dialog_models.dart (1 hunks)
  • lib/models/grade.dart (2 hunks)
  • lib/models/group_members.dart (1 hunks)
  • lib/models/groups.dart (1 hunks)
  • lib/models/ib/ib_content.dart (1 hunks)
  • lib/models/ib/ib_raw_page_data.dart (1 hunks)
  • lib/models/links.dart (1 hunks)
  • lib/models/notification.dart (3 hunks)
  • lib/models/projects.dart (2 hunks)
  • lib/models/user.dart (2 hunks)
  • lib/services/API/assignments_api.dart (4 hunks)
  • lib/services/API/collaborators_api.dart (4 hunks)
  • lib/services/API/country_institute_api.dart (1 hunks)
  • lib/services/API/fcm_api.dart (1 hunks)
  • lib/services/API/grades_api.dart (4 hunks)
  • lib/services/API/group_members_api.dart (5 hunks)
  • lib/services/API/groups_api.dart (5 hunks)
  • lib/services/API/ib_api.dart (1 hunks)
  • lib/services/API/projects_api.dart (10 hunks)
  • lib/services/API/users_api.dart (8 hunks)
  • lib/services/database_service.dart (3 hunks)
  • lib/services/dialog_service.dart (7 hunks)
  • lib/services/ib_engine_service.dart (12 hunks)
  • lib/services/local_storage_service.dart (1 hunks)
  • lib/ui/components/cv_add_icon_button.dart (1 hunks)
  • lib/ui/components/cv_drawer.dart (4 hunks)
  • lib/ui/components/cv_drawer_tile.dart (2 hunks)
  • lib/ui/components/cv_flat_button.dart (1 hunks)
  • lib/ui/components/cv_header.dart (2 hunks)
  • lib/ui/components/cv_html_editor.dart (2 hunks)
  • lib/ui/components/cv_outline_button.dart (2 hunks)
  • lib/ui/components/cv_password_field.dart (3 hunks)
  • lib/ui/components/cv_primary_button.dart (2 hunks)
  • lib/ui/components/cv_social_card.dart (4 hunks)
  • lib/ui/components/cv_subheader.dart (2 hunks)
  • lib/ui/components/cv_tab_bar.dart (2 hunks)
  • lib/ui/components/cv_text_field.dart (2 hunks)
  • lib/ui/components/cv_typeahead_field.dart (3 hunks)
  • lib/ui/views/about/about_privacy_policy_view.dart (7 hunks)
  • lib/ui/views/about/about_tos_view.dart (6 hunks)
  • lib/ui/views/about/about_view.dart (2 hunks)
  • lib/ui/views/about/components/contributor_avatar.dart (1 hunks)
  • lib/ui/views/authentication/components/auth_options_view.dart (2 hunks)
  • lib/ui/views/authentication/forgot_password_view.dart (6 hunks)
  • lib/ui/views/authentication/login_view.dart (6 hunks)
  • lib/ui/views/authentication/signup_view.dart (6 hunks)
  • lib/ui/views/base_view.dart (2 hunks)
  • lib/ui/views/contributors/components/contributors_donate_card.dart (2 hunks)
  • lib/ui/views/groups/add_assignment_view.dart (10 hunks)
  • lib/ui/views/groups/assignment_details_view.dart (12 hunks)
  • lib/ui/views/groups/components/assignment_card.dart (6 hunks)
  • lib/ui/views/groups/components/group_card_button.dart (2 hunks)
  • lib/ui/views/groups/components/group_member_card.dart (4 hunks)
  • lib/ui/views/groups/components/group_mentor_card.dart (4 hunks)
  • lib/ui/views/groups/components/member_card.dart (3 hunks)
  • lib/ui/views/groups/edit_group_view.dart (2 hunks)
  • lib/ui/views/groups/group_details_view.dart (9 hunks)
  • lib/ui/views/groups/my_groups_view.dart (4 hunks)
  • lib/ui/views/groups/new_group_view.dart (2 hunks)
  • lib/ui/views/groups/update_assignment_view.dart (10 hunks)
  • lib/ui/views/home/home_view.dart (3 hunks)
  • lib/ui/views/ib/builders/ib_headings_builder.dart (1 hunks)
  • lib/ui/views/ib/builders/ib_highlight_builder.dart (2 hunks)
  • lib/ui/views/ib/builders/ib_interaction_builder.dart (1 hunks)
  • lib/ui/views/ib/builders/ib_pop_quiz_builder.dart (1 hunks)
  • lib/ui/views/ib/builders/ib_webview_builder.dart (1 hunks)
  • lib/ui/views/ib/components/ib_pop_quiz.dart (2 hunks)
  • lib/ui/views/ib/components/ib_pop_quiz_button.dart (2 hunks)
  • lib/ui/views/ib/ib_landing_view.dart (9 hunks)
  • lib/ui/views/ib/syntaxes/ib_liquid_syntax.dart (2 hunks)
  • lib/ui/views/notifications/notifications_view.dart (5 hunks)
  • lib/ui/views/profile/edit_profile_view.dart (8 hunks)
  • lib/ui/views/profile/profile_view.dart (12 hunks)
  • lib/ui/views/profile/user_favourites_view.dart (3 hunks)
  • lib/ui/views/profile/user_projects_view.dart (3 hunks)
  • lib/ui/views/projects/components/featured_project_card.dart (5 hunks)
  • lib/ui/views/projects/components/project_card.dart (6 hunks)
  • lib/ui/views/projects/edit_project_view.dart (5 hunks)
  • lib/ui/views/projects/featured_projects_view.dart (5 hunks)
  • lib/ui/views/projects/project_details_view.dart (13 hunks)
  • lib/ui/views/projects/project_preview_fullscreen_view.dart (1 hunks)
  • lib/ui/views/simulator/simulator_view.dart (2 hunks)
  • lib/ui/views/startup_view.dart (1 hunks)
  • lib/utils/api_utils.dart (5 hunks)
  • lib/utils/app_exceptions.dart (2 hunks)
  • lib/utils/router.dart (1 hunks)
  • lib/utils/snackbar_utils.dart (1 hunks)
  • lib/utils/styles.dart (2 hunks)
  • lib/utils/unicode_map.dart (1 hunks)
  • lib/utils/validators.dart (1 hunks)
  • lib/viewmodels/authentication/forgot_password_viewmodel.dart (1 hunks)
  • lib/viewmodels/groups/group_details_viewmodel.dart (4 hunks)
  • lib/viewmodels/groups/my_groups_viewmodel.dart (2 hunks)
  • lib/viewmodels/ib/ib_landing_viewmodel.dart (2 hunks)
  • lib/viewmodels/profile/edit_profile_viewmodel.dart (1 hunks)
  • lib/viewmodels/profile/user_favourites_viewmodel.dart (2 hunks)
  • lib/viewmodels/profile/user_projects_viewmodel.dart (2 hunks)
  • lib/viewmodels/projects/featured_projects_viewmodel.dart (2 hunks)
  • lib/viewmodels/projects/project_details_viewmodel.dart (4 hunks)
  • test/model_tests/add_collaborator_response_test.dart (1 hunks)
  • test/model_tests/add_group_members_response_test.dart (1 hunks)
  • test/model_tests/assignments_test.dart (1 hunks)
  • test/model_tests/collaborators_test.dart (1 hunks)
  • test/model_tests/cv_contributors_test.dart (2 hunks)
  • test/model_tests/grade_test.dart (1 hunks)
  • test/model_tests/group_members_test.dart (1 hunks)
  • test/model_tests/groups_test.dart (1 hunks)
  • test/model_tests/ib/ib_raw_page_data_test.dart (1 hunks)
  • test/model_tests/projects_test.dart (2 hunks)
  • test/model_tests/user_test.dart (1 hunks)
  • test/service_tests/assignments_api_test.dart (4 hunks)
  • test/service_tests/collaborators_api_test.dart (2 hunks)
  • test/service_tests/contributors_api_test.dart (1 hunks)
  • test/service_tests/country_institute_api_test.dart (4 hunks)
  • test/service_tests/database_service_test.dart (1 hunks)
  • test/service_tests/fcm_api_test.dart (2 hunks)
  • test/service_tests/grades_api_test.dart (1 hunks)
  • test/service_tests/group_members_api_test.dart (2 hunks)
  • test/service_tests/groups_api_test.dart (2 hunks)
  • test/service_tests/ib_api_test.dart (2 hunks)
  • test/service_tests/ib_engine_test.dart (8 hunks)
  • test/service_tests/projects_api_test.dart (3 hunks)
  • test/service_tests/users_api_test.dart (9 hunks)
  • test/setup/test_data/mock_add_collaborators_response.dart (1 hunks)
  • test/setup/test_data/mock_add_group_members_response.dart (1 hunks)
  • test/setup/test_data/mock_assignments.dart (5 hunks)
  • test/setup/test_data/mock_collaborators.dart (1 hunks)
  • test/setup/test_data/mock_contributors.dart (3 hunks)
  • test/setup/test_data/mock_country_data.dart (3 hunks)
  • test/setup/test_data/mock_grade.dart (1 hunks)
  • test/setup/test_data/mock_group_members.dart (2 hunks)
  • test/setup/test_data/mock_groups.dart (6 hunks)
  • test/setup/test_data/mock_ib_raw_page.dart (3 hunks)
  • test/setup/test_data/mock_ib_raw_page_data.dart (1 hunks)
  • test/setup/test_data/mock_institutes_data.dart (1 hunks)
  • test/setup/test_data/mock_links.dart (1 hunks)
  • test/setup/test_data/mock_projects.dart (2 hunks)
  • test/setup/test_data/mock_user.dart (1 hunks)
  • test/setup/test_helpers.dart (1 hunks)
  • test/ui_tests/about/about_privacy_policy_view_test.dart (1 hunks)
  • test/ui_tests/about/about_tos_view_test.dart (1 hunks)
  • test/ui_tests/about/about_view_test.dart (3 hunks)
  • test/ui_tests/authentication/forgot_password_view_test.dart (1 hunks)
  • test/ui_tests/authentication/login_view_test.dart (2 hunks)
  • test/ui_tests/authentication/signup_view_test.dart (1 hunks)
  • test/ui_tests/groups/add_assignment_view_test.dart (5 hunks)
  • test/ui_tests/groups/assignment_details_view_test.dart (3 hunks)
  • test/ui_tests/groups/edit_group_view_test.dart (3 hunks)
  • test/ui_tests/groups/group_details_view_test.dart (7 hunks)
  • test/ui_tests/groups/my_groups_view_test.dart (4 hunks)
  • test/ui_tests/groups/new_group_view_test.dart (3 hunks)
  • test/ui_tests/groups/update_assignment_view_test.dart (4 hunks)
  • test/ui_tests/home/home_view_test.dart (1 hunks)
  • test/ui_tests/ib/ib_landing_view_test.dart (2 hunks)
  • test/ui_tests/ib/ib_page_view_test.dart (2 hunks)
  • test/ui_tests/profile/edit_profile_view_test.dart (4 hunks)
  • test/ui_tests/profile/profile_view_test.dart (3 hunks)
  • test/ui_tests/profile/user_favourites_view_test.dart (3 hunks)
  • test/ui_tests/profile/user_projects_view_test.dart (3 hunks)
  • test/ui_tests/projects/featured_projects_view_test.dart (3 hunks)
  • test/ui_tests/startup/startup_view_test.dart (1 hunks)
  • test/utils_tests/api_utils_test.dart (2 hunks)
  • test/utils_tests/image_test_utils.dart (1 hunks)
  • test/viewmodel_tests/about/about_viewmodel_test.dart (1 hunks)
  • test/viewmodel_tests/authentication/forgot_password_viewmodel_test.dart (1 hunks)
  • test/viewmodel_tests/authentication/login_viewmodel_test.dart (2 hunks)
  • test/viewmodel_tests/authentication/signup_viewmodel_test.dart (2 hunks)
  • test/viewmodel_tests/groups/add_assignment_viewmodel_test.dart (3 hunks)
  • test/viewmodel_tests/groups/assignment_details_viewmodel_test.dart (6 hunks)
  • test/viewmodel_tests/groups/edit_group_viewmodel_test.dart (2 hunks)
  • test/viewmodel_tests/groups/group_details_viewmodel_test.dart (8 hunks)
  • test/viewmodel_tests/groups/my_groups_viewmodel_test.dart (2 hunks)
  • test/viewmodel_tests/groups/new_group_viewmodel_test.dart (2 hunks)
  • test/viewmodel_tests/groups/update_assignment_viewmodel_test.dart (3 hunks)
  • test/viewmodel_tests/ib/ib_landing_viewmodel_test.dart (2 hunks)
  • test/viewmodel_tests/ib/ib_page_viewmodel_test.dart (5 hunks)
  • test/viewmodel_tests/profile/edit_profile_viewmodel_test.dart (2 hunks)
  • test/viewmodel_tests/profile/profile_viewmodel_test.dart (2 hunks)
  • test/viewmodel_tests/profile/user_favourites_viewmodel_test.dart (1 hunks)
  • test/viewmodel_tests/profile/user_projects_viewmodel_test.dart (1 hunks)
  • test/viewmodel_tests/projects/edit_project_viewmodel_test.dart (2 hunks)
  • test/viewmodel_tests/projects/featured_projects_viewmodel_test.dart (1 hunks)
  • test/viewmodel_tests/projects/project_details_viewmodel_test.dart (7 hunks)
✅ Files skipped from review due to trivial changes (116)
  • test/service_tests/database_service_test.dart
  • test/setup/test_data/mock_add_collaborators_response.dart
  • lib/data/restriction_elements.dart
  • test/setup/test_data/mock_links.dart
  • lib/models/group_members.dart
  • lib/services/API/country_institute_api.dart
  • lib/ui/views/ib/builders/ib_pop_quiz_builder.dart
  • test/setup/test_data/mock_add_group_members_response.dart
  • lib/models/groups.dart
  • lib/services/API/groups_api.dart
  • test/setup/test_data/mock_user.dart
  • test/service_tests/grades_api_test.dart
  • lib/models/links.dart
  • test/setup/test_data/mock_institutes_data.dart
  • lib/services/API/ib_api.dart
  • lib/utils/app_exceptions.dart
  • test/model_tests/group_members_test.dart
  • lib/models/dialog_models.dart
  • lib/viewmodels/authentication/forgot_password_viewmodel.dart
  • test/setup/test_data/mock_country_data.dart
  • lib/models/assignments.dart
  • test/model_tests/grade_test.dart
  • lib/utils/router.dart
  • test/model_tests/collaborators_test.dart
  • lib/utils/unicode_map.dart
  • lib/cv_theme.dart
  • lib/services/API/assignments_api.dart
  • lib/services/local_storage_service.dart
  • lib/ib_theme.dart
  • lib/viewmodels/profile/user_favourites_viewmodel.dart
  • lib/models/cv_contributors.dart
  • lib/services/API/grades_api.dart
  • test/model_tests/add_group_members_response_test.dart
  • test/setup/test_data/mock_ib_raw_page_data.dart
  • lib/viewmodels/profile/user_projects_viewmodel.dart
  • lib/services/API/fcm_api.dart
  • lib/viewmodels/groups/my_groups_viewmodel.dart
  • test/viewmodel_tests/projects/edit_project_viewmodel_test.dart
  • lib/locator.dart
  • test/model_tests/user_test.dart
  • test/viewmodel_tests/profile/edit_profile_viewmodel_test.dart
  • test/viewmodel_tests/ib/ib_landing_viewmodel_test.dart
  • lib/ui/views/ib/builders/ib_highlight_builder.dart
  • test/model_tests/projects_test.dart
  • test/viewmodel_tests/about/about_viewmodel_test.dart
  • test/service_tests/projects_api_test.dart
  • lib/utils/validators.dart
  • test/setup/test_data/mock_contributors.dart
  • lib/ui/views/ib/builders/ib_headings_builder.dart
  • test/model_tests/assignments_test.dart
  • lib/models/ib/ib_raw_page_data.dart
  • test/ui_tests/home/home_view_test.dart
  • test/ui_tests/authentication/login_view_test.dart
  • lib/services/dialog_service.dart
  • test/viewmodel_tests/ib/ib_page_viewmodel_test.dart
  • lib/viewmodels/projects/featured_projects_viewmodel.dart
  • test/viewmodel_tests/profile/user_projects_viewmodel_test.dart
  • test/model_tests/ib/ib_raw_page_data_test.dart
  • test/viewmodel_tests/groups/assignment_details_viewmodel_test.dart
  • test/ui_tests/profile/edit_profile_view_test.dart
  • test/viewmodel_tests/groups/update_assignment_viewmodel_test.dart
  • test/ui_tests/about/about_view_test.dart
  • lib/models/collaborators.dart
  • test/viewmodel_tests/groups/add_assignment_viewmodel_test.dart
  • test/service_tests/groups_api_test.dart
  • test/ui_tests/groups/edit_group_view_test.dart
  • test/service_tests/ib_api_test.dart
  • test/model_tests/add_collaborator_response_test.dart
  • test/viewmodel_tests/authentication/forgot_password_viewmodel_test.dart
  • test/setup/test_data/mock_collaborators.dart
  • test/setup/test_data/mock_assignments.dart
  • test/ui_tests/startup/startup_view_test.dart
  • test/model_tests/cv_contributors_test.dart
  • test/service_tests/users_api_test.dart
  • test/ui_tests/groups/my_groups_view_test.dart
  • test/ui_tests/authentication/forgot_password_view_test.dart
  • test/viewmodel_tests/authentication/login_viewmodel_test.dart
  • lib/models/grade.dart
  • test/ui_tests/about/about_tos_view_test.dart
  • test/ui_tests/groups/new_group_view_test.dart
  • test/ui_tests/projects/featured_projects_view_test.dart
  • test/ui_tests/profile/user_favourites_view_test.dart
  • test/viewmodel_tests/projects/featured_projects_viewmodel_test.dart
  • test/model_tests/groups_test.dart
  • test/utils_tests/api_utils_test.dart
  • test/service_tests/assignments_api_test.dart
  • lib/viewmodels/groups/group_details_viewmodel.dart
  • test/setup/test_data/mock_projects.dart
  • test/viewmodel_tests/authentication/signup_viewmodel_test.dart
  • test/setup/test_data/mock_group_members.dart
  • test/setup/test_data/mock_groups.dart
  • test/setup/test_data/mock_grade.dart
  • test/ui_tests/groups/assignment_details_view_test.dart
  • test/ui_tests/authentication/signup_view_test.dart
  • lib/viewmodels/projects/project_details_viewmodel.dart
  • test/service_tests/country_institute_api_test.dart
  • test/viewmodel_tests/groups/edit_group_viewmodel_test.dart
  • test/viewmodel_tests/groups/group_details_viewmodel_test.dart
  • test/service_tests/contributors_api_test.dart
  • test/viewmodel_tests/groups/my_groups_viewmodel_test.dart
  • lib/models/notification.dart
  • test/viewmodel_tests/profile/profile_viewmodel_test.dart
  • lib/utils/api_utils.dart
  • lib/services/API/collaborators_api.dart
  • test/service_tests/fcm_api_test.dart
  • test/viewmodel_tests/projects/project_details_viewmodel_test.dart
  • test/viewmodel_tests/groups/new_group_viewmodel_test.dart
  • lib/services/API/projects_api.dart
  • test/service_tests/collaborators_api_test.dart
  • test/ui_tests/about/about_privacy_policy_view_test.dart
  • lib/models/user.dart
  • test/setup/test_helpers.dart
  • test/setup/test_data/mock_ib_raw_page.dart
  • test/ui_tests/profile/user_projects_view_test.dart
  • lib/models/projects.dart
  • test/service_tests/group_members_api_test.dart
🚧 Files skipped from review as they are similar to previous changes (69)
  • lib/ui/views/base_view.dart
  • lib/ui/components/cv_flat_button.dart
  • lib/ui/components/cv_drawer.dart
  • lib/utils/snackbar_utils.dart
  • lib/ui/views/profile/edit_profile_view.dart
  • lib/viewmodels/profile/edit_profile_viewmodel.dart
  • lib/ui/views/startup_view.dart
  • test/service_tests/ib_engine_test.dart
  • lib/ui/views/about/components/contributor_avatar.dart
  • lib/ui/views/ib/syntaxes/ib_liquid_syntax.dart
  • lib/ui/views/groups/edit_group_view.dart
  • lib/main.dart
  • lib/ui/components/cv_header.dart
  • test/ui_tests/ib/ib_landing_view_test.dart
  • lib/ui/views/about/about_privacy_policy_view.dart
  • lib/ui/components/cv_password_field.dart
  • lib/ui/views/profile/user_projects_view.dart
  • lib/ui/components/cv_drawer_tile.dart
  • lib/ui/components/cv_tab_bar.dart
  • lib/ui/views/groups/new_group_view.dart
  • lib/ui/views/projects/components/project_card.dart
  • test/ui_tests/profile/profile_view_test.dart
  • test/ui_tests/ib/ib_page_view_test.dart
  • lib/ui/views/projects/project_preview_fullscreen_view.dart
  • lib/ui/views/projects/featured_projects_view.dart
  • test/ui_tests/groups/group_details_view_test.dart
  • lib/ui/views/ib/builders/ib_interaction_builder.dart
  • lib/ui/views/ib/ib_landing_view.dart
  • lib/ui/views/notifications/notifications_view.dart
  • lib/ui/components/cv_add_icon_button.dart
  • lib/ui/views/groups/components/group_mentor_card.dart
  • lib/ui/views/authentication/login_view.dart
  • lib/ui/views/projects/components/featured_project_card.dart
  • lib/ui/views/simulator/simulator_view.dart
  • lib/ui/views/projects/edit_project_view.dart
  • test/ui_tests/groups/update_assignment_view_test.dart
  • lib/ui/views/groups/assignment_details_view.dart
  • lib/ui/views/ib/builders/ib_webview_builder.dart
  • lib/ui/components/cv_outline_button.dart
  • lib/ui/views/about/about_view.dart
  • lib/ui/components/cv_html_editor.dart
  • lib/ui/views/home/home_view.dart
  • lib/ui/views/profile/profile_view.dart
  • lib/ui/views/authentication/signup_view.dart
  • lib/ui/components/cv_primary_button.dart
  • lib/ui/views/groups/add_assignment_view.dart
  • lib/ui/views/profile/user_favourites_view.dart
  • lib/ui/views/groups/components/group_card_button.dart
  • lib/ui/components/cv_social_card.dart
  • lib/ui/views/groups/group_details_view.dart
  • lib/ui/components/cv_subheader.dart
  • lib/ui/views/groups/components/member_card.dart
  • lib/ui/views/contributors/components/contributors_donate_card.dart
  • lib/ui/views/groups/my_groups_view.dart
  • lib/utils/styles.dart
  • lib/ui/views/authentication/components/auth_options_view.dart
  • lib/models/ib/ib_content.dart
  • lib/ui/views/groups/update_assignment_view.dart
  • lib/ui/views/projects/project_details_view.dart
  • lib/ui/views/authentication/forgot_password_view.dart
  • lib/services/database_service.dart
  • lib/ui/views/groups/components/group_member_card.dart
  • lib/ui/views/about/about_tos_view.dart
  • lib/services/ib_engine_service.dart
  • lib/ui/views/groups/components/assignment_card.dart
  • lib/ui/views/ib/components/ib_pop_quiz_button.dart
  • lib/ui/views/ib/components/ib_pop_quiz.dart
  • test/utils_tests/image_test_utils.dart
  • lib/ui/components/cv_text_field.dart
⏰ Context from checks skipped due to timeout of 90000ms (3)
  • GitHub Check: build (windows-latest)
  • GitHub Check: build (macos-latest)
  • GitHub Check: build (ubuntu-latest)
🔇 Additional comments (27)
lib/services/API/group_members_api.dart (6)

12-16: Clean method signature formatting.

The method signature reformatting with parameters on separate lines and a trailing comma follows Dart's style guide, improving readability and making future parameter additions cleaner with minimal diff changes.


33-33: Simplified API call formatting.

The API call has been simplified to a single line, which is appropriate for this case as the parameters are minimal and the line length remains reasonable.


45-49: Consistent method implementation formatting.

The implementation matches the abstract class declaration formatting, maintaining consistency throughout the codebase. The trailing comma is a good practice that reduces merge conflicts when parameters are added later.


56-56: Simplified post request formatting.

The post request has been formatted on a single line for better readability as the parameters fit well within a reasonable line length.


73-73: JSON object declaration formatting update.

The JSON object declaration has been updated to follow standard Dart formatting conventions, which is in line with the Flutter 3.29.2 upgrade requirements.


95-95: Simplified delete request formatting.

The delete request has been formatted on a single line, consistent with the other API call formatting changes in this file.

test/viewmodel_tests/profile/user_favourites_viewmodel_test.dart (6)

28-33: Code formatting looks good.

The formatting improvement for this expect statement enhances readability by properly breaking down the chain of method calls across multiple lines.


38-57: Test formatting follows Flutter best practices.

The reformatted test uses proper indentation and line breaks, improving readability while maintaining the same test logic. This follows the Flutter style guide recommendations for formatting test blocks.


59-79: Well-structured test format.

This test block's formatting is consistent with the previous test and follows good practices with clear separation between setup, execution, and verification steps.


81-105: Improved test case formatting.

The reformatting of this test case with proper line breaks and indentation makes the code much more readable, especially for the conditional checks and verification steps.


109-111: Mock setup formatting looks good.

The when statement formatting is consistent with other mock setups in the file.


118-121: Consistent expect statement formatting.

This formatting change maintains consistency with other expect statements in the file and improves readability.

lib/viewmodels/ib/ib_landing_viewmodel.dart (2)

36-39: LGTM! Improved code formatting.

The keyMap getter has been reformatted to be more concise while maintaining the same functionality. This change aligns with modern Dart style guidelines and improves readability.


101-113: LGTM! Appropriate parameter structuring for Isolate.

The restructuring of parameters in Isolate.spawn simplifies how data is organized and passed to the isolate. The code now uses a cleaner list structure that properly isolates the sendPort, chapter data, and engine service. This change aligns with Flutter 3.29.2's best practices for isolate communication.

lib/services/API/users_api.dart (9)

53-55: Formatting changes in login method

The JSON object and API call have been consolidated to single lines as part of the Flutter formatting standards. This improves code consistency without changing functionality.


73-75: Formatting changes in signup method

Similar to the login method, the JSON object and API call have been reformatted to follow Flutter style guidelines. The functionality remains unchanged.


93-96: Formatting changes in oauthLogin method

The JSON object declaration and API call have been consolidated into single lines, aligning with the Flutter formatting standards applied throughout the file.


114-117: Formatting changes in oauthSignup method

The JSON object declaration and API call have been reformatted to single lines, matching the pattern applied across the file.


134-134: Formatting changes in fetchUser method

The API GET call has been consolidated to a single line following Flutter formatting standards.


151-151: Formatting changes in fetchCurrentUser method

The API GET call has been reformatted to a single line, consistent with other similar changes in the file.


185-185: Formatting changes in updateProfile method

The MultipartFile.fromPath call has been reformatted to align with Flutter style guidelines.


211-211: Formatting changes in sendResetPasswordInstructions method

The API POST call has been consolidated to a single line, maintaining consistency with other API calls in the file.


1-221: Overall assessment of users_api.dart formatting changes

All changes in this file are formatting-related and align with the PR objective of upgrading to Flutter 3.29.2. The modifications follow Flutter's style guidelines, making the code more consistent without altering functionality.

These changes appear to be the result of running flutter format as suggested in the PR comments.

test/ui_tests/groups/add_assignment_view_test.dart (3)

16-17: Good addition of WebView platform interface imports.

These imports are necessary to support the WebView platform setup in the tests. This aligns with the Flutter 3.29.2 upgrade requirements.


39-40: Code formatting follows Flutter style guidelines.

The formatting changes throughout the test file align with standard Flutter/Dart code style, making the code more consistent and readable. This addresses the PR comment suggestion to "run flutter format".

Also applies to: 48-50, 55-72, 78-81, 84-86, 91-93, 98-100, 102-107, 117-121, 129-131


29-29:

Details

✅ Verification successful

WebView platform setup is essential for tests to pass.

Setting up the Android WebView platform is crucial for tests involving the HTML editor. This follows the Flutter migration guide recommendations.

If your app supports multiple platforms (iOS, web), consider adding platform-specific conditionals for comprehensive testing:


🏁 Script executed:

#!/bin/bash
# Check if there are similar WebView platform setups in other test files
rg "WebViewPlatform.instance" --type dart

Length of output: 373


Ensure consistent WebView platform setup across tests—and consider conditional handling for multi-platform support.

The initialization line

WebViewPlatform.instance = AndroidWebViewPlatform();

is consistently present in:

  • test/ui_tests/groups/add_assignment_view_test.dart
  • test/ui_tests/groups/group_details_view_test.dart
  • test/ui_tests/groups/update_assignment_view_test.dart

This setup is crucial for tests involving the HTML editor and follows the Flutter migration guide recommendations. If your app supports additional platforms (such as iOS or web), please consider adding platform-specific conditionals in these tests to ensure comprehensive coverage.

lib/ui/components/cv_typeahead_field.dart (1)

18-18: Constructor updated to modern Flutter syntax.

The constructor has been updated to use the recommended super.key parameter syntax, which aligns with Flutter 3.29.2's best practices.

Also applies to: 24-25

Comment on lines +47 to 71
child: TypeAheadField(
suggestionsCallback: (pattern) async {
try {
if (toggle == COUNTRY) {
return await countryInstituteObject.getCountries(pattern);
}
if (toggle == EDUCATIONAL_INSTITUTE) {
return await countryInstituteObject.getInstitutes(pattern);
}
//// If there is need of some other API Fetch add another if condition
return [if (pattern == '') 'No suggestions found' else pattern];
} catch (e) {
return [if (pattern == '') 'No suggestions found' else pattern];
}
},
itemBuilder: (context, suggestion) {
return ListTile(title: Text(suggestion as String));
},
onSelected: (value) {
if (value != '') {
controller?.text = value as String;
}
return TypeAheadFormField(
textFieldConfiguration: TextFieldConfiguration(
decoration: CVTheme.textFieldDecoration.copyWith(
labelText: label,
labelStyle: TextStyle(
color: CVTheme.textColor(context),
),
),
controller: controller,
textInputAction: action,
focusNode: focusNode,
style: TextStyle(
color: CVTheme.textColor(context),
),
maxLines: maxLines,
keyboardType: type,
autofocus: true,
),
suggestionsCallback: (pattern) async {
try {
if (toggle == COUNTRY) {
return await countryInstituteObject.getCountries(
pattern,
);
}
if (toggle == EDUCATIONAL_INSTITUTE) {
return await countryInstituteObject.getInstitutes(
pattern,
);
}
//// If there is need of some other API Fetch add another if condition
return [
if (pattern == '') 'No suggestions found' else pattern,
];
} catch (e) {
return [
if (pattern == '') 'No suggestions found' else pattern,
];
}
},
transitionBuilder: (context, suggestionsBox, controller) {
return suggestionsBox;
},
itemBuilder: (context, suggestion) {
return ListTile(
title: Text(suggestion as String),
);
},
onSuggestionSelected: (value) {
if (value != '') {
controller?.text = value as String;
}
},
onSaved: (value) {
onSaved!(
(value == '') ? (text ?? 'N.A') : value,
);
},
);
},
),
);
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Widget implementation refactored for Flutter 3.29.2 compatibility.

The implementation has been refactored from using a combination of FutureBuilder and TypeAheadFormField to a more streamlined TypeAheadField. This change aligns with the updated Flutter dependencies and simplifies the code, while maintaining the same functionality.

However, there are a few items to note:

  1. The onSaved parameter is still defined in the constructor but never used in the widget
  2. Error handling is simplified but could be improved to provide more specific error messages

Consider addressing the unused onSaved parameter and improving error handling:

catch (e) {
-  return [if (pattern == '') 'No suggestions found' else pattern];
+  return [if (pattern == '') 'Error loading suggestions: ${e.toString()}' else pattern];
}

🏁 Script executed:

#!/bin/bash
# Check if onSaved is used elsewhere in the codebase
grep -r "onSaved:" --include="*.dart" lib/

Length of output: 2034


Action: Remove unused onSaved parameter and provide more descriptive error feedback in cv_typeahead_field.dart

The refactoring to use a streamlined TypeAheadField for Flutter 3.29.2 is on track; however, please note the following:

  • The constructor’s onSaved parameter is defined but not utilized within this widget. Please either remove it or integrate it if it’s intended to be used.

  • The error handling in the suggestionsCallback catch block is too generic. It is recommended to return a more detailed error message to aid debugging. For instance, change:

    catch (e) {
    -  return [if (pattern == '') 'No suggestions found' else pattern];
    +  return [if (pattern == '') 'Error loading suggestions: ${e.toString()}' else pattern];
    }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
child: TypeAheadField(
suggestionsCallback: (pattern) async {
try {
if (toggle == COUNTRY) {
return await countryInstituteObject.getCountries(pattern);
}
if (toggle == EDUCATIONAL_INSTITUTE) {
return await countryInstituteObject.getInstitutes(pattern);
}
//// If there is need of some other API Fetch add another if condition
return [if (pattern == '') 'No suggestions found' else pattern];
} catch (e) {
return [if (pattern == '') 'No suggestions found' else pattern];
}
},
itemBuilder: (context, suggestion) {
return ListTile(title: Text(suggestion as String));
},
onSelected: (value) {
if (value != '') {
controller?.text = value as String;
}
return TypeAheadFormField(
textFieldConfiguration: TextFieldConfiguration(
decoration: CVTheme.textFieldDecoration.copyWith(
labelText: label,
labelStyle: TextStyle(
color: CVTheme.textColor(context),
),
),
controller: controller,
textInputAction: action,
focusNode: focusNode,
style: TextStyle(
color: CVTheme.textColor(context),
),
maxLines: maxLines,
keyboardType: type,
autofocus: true,
),
suggestionsCallback: (pattern) async {
try {
if (toggle == COUNTRY) {
return await countryInstituteObject.getCountries(
pattern,
);
}
if (toggle == EDUCATIONAL_INSTITUTE) {
return await countryInstituteObject.getInstitutes(
pattern,
);
}
//// If there is need of some other API Fetch add another if condition
return [
if (pattern == '') 'No suggestions found' else pattern,
];
} catch (e) {
return [
if (pattern == '') 'No suggestions found' else pattern,
];
}
},
transitionBuilder: (context, suggestionsBox, controller) {
return suggestionsBox;
},
itemBuilder: (context, suggestion) {
return ListTile(
title: Text(suggestion as String),
);
},
onSuggestionSelected: (value) {
if (value != '') {
controller?.text = value as String;
}
},
onSaved: (value) {
onSaved!(
(value == '') ? (text ?? 'N.A') : value,
);
},
);
},
),
);
child: TypeAheadField(
suggestionsCallback: (pattern) async {
try {
if (toggle == COUNTRY) {
return await countryInstituteObject.getCountries(pattern);
}
if (toggle == EDUCATIONAL_INSTITUTE) {
return await countryInstituteObject.getInstitutes(pattern);
}
//// If there is need of some other API Fetch add another if condition
return [if (pattern == '') 'No suggestions found' else pattern];
} catch (e) {
return [if (pattern == '') 'Error loading suggestions: ${e.toString()}' else pattern];
}
},
itemBuilder: (context, suggestion) {
return ListTile(title: Text(suggestion as String));
},
onSelected: (value) {
if (value != '') {
controller?.text = value as String;
}
},
),
);

@hardik17771
Copy link
Member

@realaashil , there's still some format error, LMK when this is resolved.

@realaashil
Copy link
Contributor Author

realaashil commented Mar 19, 2025

@hardik17771 .mocks files are generated during build time, either we can run those build scripts after dart format or exclude .mocks files

Copy link

@coderabbitai coderabbitai bot left a 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

🧹 Nitpick comments (6)
pubspec.yaml (3)

34-36: Git-Sourced flutter_summernote Dependency.
This dependency is sourced directly from GitHub (https://github.com/realaashil/flutter_summernote). While this is acceptable for rapid iteration, consider version pinning or using a published package to avoid future instability.


67-69: Addition of New Dependencies with Unpinned Versions.
The dependencies http, markdown, and webview_flutter are added with an "any" version constraint. While this supports flexibility during development, consider pinning versions to avoid potential breaking changes in the future.


77-79: Addition of New Dev Dependencies.
The inclusion of webview_flutter_platform_interface, webview_flutter_android, and collection (all with "any" version constraints) is noted. For improved stability and reproducibility of builds, consider specifying version constraints.

.github/workflows/ci.yml (3)

17-19: Review Checkout Repository Step
The workflow uses actions/checkout@v3, which is currently a stable release. However, static analysis flagged potential outdated usage. Please verify if a newer minor version is available or needed.

🧰 Tools
🪛 actionlint (1.7.4)

18-18: the runner of "actions/checkout@v3" action is too old to run on GitHub Actions. update the action's version to fix this issue

(action)


20-24: Confirm Setup Java Version
The step uses actions/setup-java@v3 with distribution: "temurin" and java-version: "17". Static analysis indicates that this runner might be outdated. Verify against the latest recommendations for GitHub Actions and update if necessary.

🧰 Tools
🪛 actionlint (1.7.4)

21-21: the runner of "actions/setup-java@v3" action is too old to run on GitHub Actions. update the action's version to fix this issue

(action)


75-79: Finalize Coveralls Reporting & File Formatting
The finalization step for Coveralls reporting is correctly set up. However, YAMLlint has flagged trailing spaces and a missing newline at the end of the file (line 79). Please update the file to include a final newline and remove any trailing spaces. A diff for the fix might look like this:

-          parallel-finished: true 
+          parallel-finished: true

Ensure a newline is present at the end of the file.

🧰 Tools
🪛 YAMLlint (1.35.1)

[error] 79-79: no new line character at the end of file

(new-line-at-end-of-file)


[error] 79-79: trailing spaces

(trailing-spaces)

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 2458c09 and f4e9fc0.

📒 Files selected for processing (2)
  • .github/workflows/ci.yml (1 hunks)
  • pubspec.yaml (1 hunks)
🧰 Additional context used
🪛 actionlint (1.7.4)
.github/workflows/ci.yml

18-18: the runner of "actions/checkout@v3" action is too old to run on GitHub Actions. update the action's version to fix this issue

(action)


21-21: the runner of "actions/setup-java@v3" action is too old to run on GitHub Actions. update the action's version to fix this issue

(action)

🪛 YAMLlint (1.35.1)
.github/workflows/ci.yml

[error] 79-79: no new line character at the end of file

(new-line-at-end-of-file)


[error] 79-79: trailing spaces

(trailing-spaces)

⏰ Context from checks skipped due to timeout of 90000ms (3)
  • GitHub Check: build (ubuntu-latest)
  • GitHub Check: build (windows-latest)
  • GitHub Check: build (macos-latest)
🔇 Additional comments (31)
pubspec.yaml (21)

17-18: Updated Dart SDK Version Requirement.
The SDK constraint has been raised to ">=3.7.2 <4.0.0", which is necessary for Flutter 3.29.2. Please verify that every dependency in the project supports this newer Dart version.


26-26: Upgrade of flutter_inappwebview Dependency.
The dependency has been updated to ^6.1.5. Ensure that all webview functionalities remain stable under this new version and review the migration notes if available.


29-29: Upgrade of flutter_keyboard_visibility Dependency.
The update to ^6.0.0 should align with the upgraded Flutter framework. Please verify that keyboard detection behaves correctly across all supported devices.


32-32: Migration of flutter_markdown Dependency.
Switching from a Git-based source to ^0.7.6+2 simplifies dependency management and improves stability. Ensure markdown rendering remains consistent.


33-33: Upgrade of flutter_math_fork Dependency.
The version bump to ^0.7.3 appears appropriate. Please verify that any UI or parsing functionalities relying on this package work as expected post-upgrade.


37-37: Upgrade of flutter_svg Dependency.
The update to ^2.0.17 should improve SVG rendering and compatibility with the upgraded framework. A quick test with various SVG assets is recommended.


38-38: Upgrade of flutter_typeahead Dependency.
The dependency update to ^5.2.0 can provide improvements in typeahead functionality. Please ensure that all autocomplete interactions are tested thoroughly.


41-41: Upgrade of get_it Dependency.
The change to ^8.0.3 is in line with modern dependency injection practices. Confirm that service locator patterns in your app remain effective.


42-42: Upgrade of google_sign_in Dependency.
Upgrading to ^6.3.0 should enhance sign-in reliability and compliance with OAuth standards. Ensure that authentication flows are validated on all target platforms.


47-47: Major Version Upgrade for image_cropper Dependency.
The new version ^9.0.0 is a significant update. Please review the migration documentation to ensure that any API changes are properly handled.


49-49: Upgrade of intl Dependency.
The version update to ^0.19.0 should provide enhanced internationalization features. Make sure to test locale-specific behaviors within the app.


50-50: Upgrade of mockito Dependency.
Bumping to ^5.4.5 can enhance testing capabilities. Ensure that unit and widget tests involving mocks pass under the new version.


52-52: Upgrade of permission_handler Dependency.
The update to ^11.4.0 is essential for handling runtime permissions effectively. Verify on both Android and iOS that permissions are requested and managed correctly.


53-53: Upgrade of photo_view Dependency.
Updating to ^0.15.0 should refine image viewing interactions. Testing with various image resolutions and formats is advised.


54-54: Upgrade of oauth2_client Dependency.
The new version ^4.1.0 should enhance the OAuth flow. Validate the authentication process and any related network transactions.


57-57: Replacement of share with share_plus and Version Upgrade.
Switching to share_plus at ^10.1.4 is a forward-looking change. Please ensure that file or content sharing functionalities are retained without issues.


59-59: Upgrade of showcaseview Dependency.
The update to ^4.0.1 should improve the user guidance features. Confirm that interactive demonstrations within the app remain smooth and error-free.


60-60: Upgrade of simple_chips_input Dependency.
The new version ^1.2.0 should bolster the handling of chip inputs. A round of tests on input fields is recommended.


61-61: Upgrade of theme_provider Dependency.
The update to ^0.6.0 promises better theme management. Verify that switching between light and dark themes functions as intended.


65-65: Addition/Upgrade of flutter_facebook_auth Dependency.
The dependency is added (or uncommented) and updated to ^6.0.4. Please test Facebook login flows on all intended platforms to ensure compatibility.


72-72: Upgrade of flutter_lints in Dev Dependencies.
Updating flutter_lints to ^5.0.0 enhances adherence to the latest style and quality guidelines set by Flutter.

.github/workflows/ci.yml (10)

26-30: Validate Flutter Setup Action Compatibility
The action subosito/flutter-action@v2 is used with the stable channel. Confirm that it is fully compatible with Flutter 3.29.2 and meets your project's needs.


31-35: Consolidate Clean and Dependency Fetch
Combining flutter clean and flutter pub get into one step improves efficiency. Ensure that this consolidated step fully supports any new caching or dependency retrieval behavior in Flutter 3.29.2.


36-38: Verify Build Runner Command
The command to run build_runner is standard for generating Dart files with the --delete-conflicting-outputs flag. Confirm that it generates all required files correctly under Flutter 3.29.2.


39-41: Format Check Command Review
The format check command correctly excludes .mocks.dart files. Make sure this exclusion covers all unwanted files and that the command adheres to the latest dart format behavior.


42-44: Code Analysis Step
Running flutter analyze is a good measure to ensure code quality. Confirm that any new linting rules introduced in Flutter 3.29.2 are addressed if necessary.


45-47: Test Execution with Coverage
The step using flutter test --coverage is appropriate. Since the PR notes that testing is still in progress, ensure that additional tests and coverage measures are added before merging.


48-54: Upload Coverage Step Configuration
The configuration for uploading coverage with coverallsapp/github-action@v2 is well defined, including dynamic flag names and parallel processing. Please verify that the version and parameters meet current Coveralls requirements.


55-57: Build APK Step
The command flutter build apk is standard for building the Android app. Confirm that the output path and build configuration reflect any changes introduced with Flutter 3.29.2 and your updated Android settings.


58-63: iOS Build Step Review
The conditional iOS build step for macOS uses a clean approach by force-removing ios/Podfile.lock before building. Verify that using --no-codesign aligns with your distribution process and that the command works as expected on the latest tools.


64-70: APK Artifact Upload Step
The artifact upload configuration dynamically names the APK based on the platform and run ID, which is effective for CI pipelines. Double-check that the specified path build/app/outputs/apk/release/app-release.apk is correct.

@realaashil
Copy link
Contributor Author

@hardik17771 please approve the workflow, it got timed out due to 40 minute limit, 60 should be fine

Copy link

@coderabbitai coderabbitai bot left a 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

🧹 Nitpick comments (3)
.github/workflows/ci.yml (3)

17-18: Update Checkout Action Version

Static analysis indicates that using actions/checkout@v3 may be flagged as outdated. Consider updating to the latest stable version (e.g. actions/checkout@v4) to benefit from recent improvements and bug fixes.

-        uses: actions/checkout@v3
+        uses: actions/checkout@v4
🧰 Tools
🪛 actionlint (1.7.4)

18-18: the runner of "actions/checkout@v3" action is too old to run on GitHub Actions. update the action's version to fix this issue

(action)


20-24: Update Setup Java Action Version

The Java setup step currently uses actions/setup-java@v3, but static analysis suggests this version might be outdated. Upgrading to a newer version (for example, actions/setup-java@v4 if available) could improve compatibility and performance.

-        uses: actions/setup-java@v3
+        uses: actions/setup-java@v4
🧰 Tools
🪛 actionlint (1.7.4)

21-21: the runner of "actions/setup-java@v3" action is too old to run on GitHub Actions. update the action's version to fix this issue

(action)


71-79: Finalize Coveralls Reporting and File Formatting Cleanup

The final step to complete Coveralls reporting is correctly configured. However, a trailing space exists at the end of line 79, and the file is missing a newline at the end. Please remove the trailing space and ensure the file ends with a newline.

-          parallel-finished: true 
+          parallel-finished: true
🧰 Tools
🪛 YAMLlint (1.35.1)

[error] 79-79: no new line character at the end of file

(new-line-at-end-of-file)


[error] 79-79: trailing spaces

(trailing-spaces)

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between f4e9fc0 and d864c5d.

📒 Files selected for processing (1)
  • .github/workflows/ci.yml (1 hunks)
🧰 Additional context used
🪛 actionlint (1.7.4)
.github/workflows/ci.yml

18-18: the runner of "actions/checkout@v3" action is too old to run on GitHub Actions. update the action's version to fix this issue

(action)


21-21: the runner of "actions/setup-java@v3" action is too old to run on GitHub Actions. update the action's version to fix this issue

(action)

🪛 YAMLlint (1.35.1)
.github/workflows/ci.yml

[error] 79-79: no new line character at the end of file

(new-line-at-end-of-file)


[error] 79-79: trailing spaces

(trailing-spaces)

⏰ Context from checks skipped due to timeout of 90000ms (3)
  • GitHub Check: build (macos-latest)
  • GitHub Check: build (windows-latest)
  • GitHub Check: build (ubuntu-latest)
🔇 Additional comments (11)
.github/workflows/ci.yml (11)

15-15: Build Timeout Increase Verification

The timeout for the build job has been increased to 60 minutes. This provides additional time for potentially slower builds (especially on Android), but please verify if this increased timeout is necessary across all platforms or if it might mask underlying performance issues.


26-27: Setup Flutter Action Configuration

The Flutter setup step using subosito/flutter-action@v2 is correctly configured and aligns with the stable channel. No issues detected here.


31-34: Consolidated Clean and Get Dependencies Step

The combination of cleaning the build and fetching dependencies in one step enhances clarity and efficiency. This approach is well implemented.


36-37: Build Runner Command Check

The build runner step to generate Dart files using flutter packages pub run build_runner build --delete-conflicting-outputs is well incorporated. Ensure that any generated files are correctly tracked by your version control strategy.


39-40: Dart Formatting Check Enhancement

The format check command excludes .mocks.dart files, which is a useful refinement. Confirm that the command git ls-files '*.dart' ':!:*.mocks.dart' produces the intended file list on all platforms.


42-43: Analyze Code Step Verification

The step running flutter analyze is straightforward and correctly positioned in the workflow.


45-46: Test Coverage Execution

Running tests with coverage using flutter test --coverage is well integrated into the pipeline.


48-53: Coveralls Coverage Upload

The configuration for uploading coverage to Coveralls is set up properly with parallel processing and dynamic flag naming based on the platform.


55-56: Android APK Build Step

The step for building the APK is correctly implemented using flutter build apk. Verify that this command produces the expected release artifact in your CI environment.


58-63: Conditional iOS Build Step

The iOS build step correctly conditions execution on macos-latest and force-removes Podfile.lock with rm -f, ensuring a clean build. This approach aligns well with traditional iOS build requirements on CI.


64-70: APK Artifact Upload Configuration

Uploading the APK as an artifact with a dynamically generated name and strict error handling (if-no-files-found: error) is a robust approach and well configured.

@realaashil
Copy link
Contributor Author

@hardik17771 passed!

@tachyons tachyons merged commit 6666e4c into CircuitVerse:master Mar 20, 2025
5 checks passed
@tachyons
Copy link
Member

Great job @realaashil

@hardik17771
Copy link
Member

Good job @realaashil !
Also, @tachyons With this PR, our CI file is also updated and corrected along with the versions I informed Aashil about.

@github-actions
Copy link
Contributor

🎉 This PR is included in version 1.0.0 🎉

The release is available on:

Your semantic-release bot 📦🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Update to latest version of flutter

3 participants