Skip to content

M3E card lists for the settings page - #420

Open
omeritzics wants to merge 13 commits into
mainfrom
M3E-settings
Open

M3E card lists for the settings page#420
omeritzics wants to merge 13 commits into
mainfrom
M3E-settings

Conversation

@omeritzics

@omeritzics omeritzics commented Jul 29, 2026

Copy link
Copy Markdown
Owner

Summary by CodeRabbit

  • Style
    • Refreshed the Settings screen with card-based sections for improved organization and visual consistency.
    • Grouped update, appearance, app view, miscellaneous, and category settings into clearer sections.
    • Improved spacing and separated conditional background-update and system-font controls.
    • Added a default-tab selection option under app-view settings.
    • Corrected the reverse page-transition label.
    • Preserved existing controls, conditional behavior, and permission flows.

@coderabbitai

coderabbitai Bot commented Jul 29, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 54e5dc9f-340f-4508-b7ba-491eaab47be8

📥 Commits

Reviewing files that changed from the base of the PR and between 77faede and f8019b0.

⛔ Files ignored due to path filters (1)
  • pubspec.lock is excluded by !**/*.lock
📒 Files selected for processing (3)
  • .github/workflows/nightly.yml
  • lib/pages/settings.dart
  • pubspec.yaml

Included review availability: Your plan provides up to 2 included reviews per hour; 1 remains after this review.


📝 Walkthrough

Walkthrough

The settings page adopts M3ECardColumn layouts, adds a default-tab control, preserves existing settings behavior, and adjusts spacing and labeling. The nightly workflow now skips builds when no new commits exist.

Changes

Settings layout

Layer / File(s) Summary
Card-column foundation
pubspec.yaml, lib/pages/settings.dart
Adds m3e_card_list and applies M3ECardColumn to source-specific settings.
Updates controls layout
lib/pages/settings.dart
Reorganizes update, permission, Shizuku, DNS, and conditional background-update controls without changing their existing conditions or persistence.
Appearance and secondary settings
lib/pages/settings.dart
Updates appearance, app-view, miscellaneous, category, and About layouts. Adds the default-tab dropdown, corrects the reverse-transition label, and adjusts spacing.

Nightly build gating

Layer / File(s) Summary
Conditional nightly build
.github/workflows/nightly.yml
The build job depends on check-changes and runs only when should_build=true.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Merge Risk: ⚪ Minimal · up to f8019

The settings page may show empty card segments from spacer or conditional widgets. This is a localized visual issue that should be cleaned up, but the change remains merge-ready after normal review.

Suggested reviewers: imranr98

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main change: introducing M3E card lists to structure the settings page.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0…
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Full details: Docstring Coverage

Explanation

No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0 files. (3 skipped: 3 unsupported.)

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch M3E-settings

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@qodo-code-review

Copy link
Copy Markdown

PR Summary by Qodo

Adopt M3E card list layout for the Settings page

✨ Enhancement ⚙️ Configuration changes 🕐 20-40 Minutes

Grey Divider

AI Description

• Wrap Settings sections in M3ECardColumn for consistent card-list spacing and grouping.
• Keep existing settings behavior while improving Settings page structure and readability.
• Add the m3e_card_list dependency to support the new Settings UI layout.
Diagram

graph TD
  A["SettingsPage (UI)"] --> B["Settings sections"] --> C["M3ECardColumn"] --> D["m3e_card_list pkg"]
  B --> E["SwitchListTile/
  GeneratedForm"]
  A --> F["SettingsProvider"]
  E --> F
  subgraph Legend
    direction LR
    _ui["UI widget"] ~~~ _state[("State/provider")] ~~~ _dep{{"External package"}}
  end
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Implement an in-tree CardSection/SettingsGroup widget
  • ➕ Avoids adding/maintaining another external dependency
  • ➕ Keeps styling and behavior fully controlled by this repo
  • ➕ Easier to tweak for app-specific needs without upstream constraints
  • ➖ More local UI code to maintain and keep consistent across screens
  • ➖ Risk of drifting from M3E component behavior if other screens standardize on it
2. Use Flutter Material primitives (Card + Column/ListView) directly
  • ➕ No new dependency
  • ➕ Very explicit layout and fewer abstractions
  • ➖ Harder to keep consistent spacing/visual rhythm across many sections
  • ➖ Likely more repetitive widget code in settings.dart

Recommendation: The current approach is reasonable if the project is standardizing on M3E-styled list/group components across screens. If this is the only usage, consider a small in-repo wrapper to reduce dependency footprint; otherwise, adopting m3e_card_list improves consistency and reduces repetition.

Files changed (3) +643 / -558

Enhancement (1) +634 / -558
settings.dartWrap Settings option groups with M3ECardColumn +634/-558

Wrap Settings option groups with M3ECardColumn

• Introduces M3ECardColumn wrappers around multiple Settings section contents to present options as M3E-styled card lists. The underlying setting controls and state mutations remain the same, but the widget structure is reorganized for consistent grouping and spacing.

lib/pages/settings.dart

Other (2) +9 / -0
pubspec.lockLock m3e_card_list dependency version +8/-0

Lock m3e_card_list dependency version

• Adds the hosted m3e_card_list package entry (v0.1.0) to the lockfile to ensure reproducible builds.

pubspec.lock

pubspec.yamlAdd m3e_card_list as a direct dependency +1/-0

Add m3e_card_list as a direct dependency

• Declares m3e_card_list ^0.1.0 in dependencies so Settings can use M3ECardColumn.

pubspec.yaml

@codacy-production

codacy-production Bot commented Jul 29, 2026

Copy link
Copy Markdown

Up to standards ✅

🟢 Issues 0 issues

Results:
0 new issues

View in Codacy

NEW Get contextual insights on your PRs based on Codacy's metrics, along with PR and Jira context, without leaving GitHub. Enable AI reviewer
TIP This summary will be updated as you push new changes.

@qodo-code-review

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (0) 📘 Rule violations (0) 📎 Requirement gaps (0)

Grey Divider

Great, no issues found!

Qodo reviewed your code and found no material issues that require review

Grey Divider

To customize comments, go to the Qodo configuration screen, or learn more in the docs.

Qodo Logo

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 3

🧹 Nitpick comments (1)
lib/pages/settings.dart (1)

723-734: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Dead empty Column left over in the "prevent uninstallation" row.

Flexible(child: Column(..., children: [])) has no children and renders nothing; combined with mainAxisAlignment: MainAxisAlignment.spaceBetween on the parent Row, this looks like leftover structure from removed content (compare to the safeMode Row above at lines 687-701, which has real Text children in the same position) rather than intentional layout.

🧹 Proposed cleanup
                                 if (settingsProvider.safeMode)
-                                  Row(
-                                    mainAxisAlignment:
-                                        MainAxisAlignment.spaceBetween,
-                                    children: [
-                                      Flexible(
-                                        child: Column(
-                                          crossAxisAlignment:
-                                              CrossAxisAlignment.start,
-                                          children: [],
-                                        ),
-                                      ),
-                                      SwitchListTile(
+                                  Row(
+                                    mainAxisAlignment:
+                                        MainAxisAlignment.spaceBetween,
+                                    children: [
+                                      SwitchListTile(
                                         title: Text(
                                           'preventUninstallation'.t(),
                                         ),
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@lib/pages/settings.dart` around lines 723 - 734, Remove the empty
Flexible/Column subtree from the safeMode “prevent uninstallation” Row, leaving
only the meaningful row children and preserving the existing layout behavior.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@lib/pages/settings.dart`:
- Around line 1197-1209: Update the second SwitchListTile’s title in the
settings UI to use the existing reversePageTransitions translation key, while
keeping its value and onChanged behavior tied to
settingsProvider.reversePageTransitions unchanged.
- Around line 566-1037: The M3ECardColumn children currently include standalone
gap16/gap8 spacers and a FutureBuilder that may return SizedBox.shrink(),
creating empty card segments. Update the settings section around M3ECardColumn
so spacing is incorporated into adjacent content padding, and wrap any
non-content widgets in a non-card spacer/list wrapper; preserve the existing
settings controls and conditional behavior.
- Around line 1074-1219: Update the settings card layout around M3ECardColumn so
its children contain only explicit card items such as GeneratedForm and switch
entries. Move gap8, gap16, conditional widgets, FutureBuilder, and other spacing
or shrink elements into separate rows in the parent card list, preserving their
existing order and visibility conditions.

---

Nitpick comments:
In `@lib/pages/settings.dart`:
- Around line 723-734: Remove the empty Flexible/Column subtree from the
safeMode “prevent uninstallation” Row, leaving only the meaningful row children
and preserving the existing layout behavior.
🪄 Autofix (Beta)

✅ Autofix completed


ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 4c84564b-6716-494e-add3-ab3a48c53bba

📥 Commits

Reviewing files that changed from the base of the PR and between 6777bf6 and 77faede.

⛔ Files ignored due to path filters (1)
  • pubspec.lock is excluded by !**/*.lock
📒 Files selected for processing (2)
  • lib/pages/settings.dart
  • pubspec.yaml

Comment thread lib/pages/settings.dart
Comment thread lib/pages/settings.dart
Comment thread lib/pages/settings.dart
@coderabbitai

coderabbitai Bot commented Jul 29, 2026

Copy link
Copy Markdown

Note

Autofix is a beta feature. Expect some limitations and changes as we gather feedback and continue to improve it.

Fixes Applied Successfully

Fixed 1 file(s) based on 3 unresolved review comments.

Files modified:

  • lib/pages/settings.dart

Commit: ddc2ab9c54dd61ac62731d7980febcf5a4cab78f

The changes have been pushed to the M3E-settings branch.

Time taken: 6m 22s

@omeritzics
omeritzics marked this pull request as draft July 29, 2026 20:23
coderabbitai Bot and others added 3 commits July 29, 2026 20:25
Fixed 1 file(s) based on 3 unresolved review comments.

Co-authored-by: CodeRabbit <noreply@coderabbit.ai>

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🚫 CI Build Failed

The automated build process failed. Please review the build logs and fix the issues before requesting another review.

Next steps:

  1. Check the build logs for specific errors
  2. Fix the identified issues
  3. Push your fixes to this branch
  4. The CI will automatically re-run

Once the build passes, this review will be dismissed automatically.

@omeritzics
omeritzics force-pushed the main branch 7 times, most recently from 491f71b to c8eb37a Compare August 5, 2026 03:47
@github-actions
github-actions Bot dismissed their stale review August 5, 2026 04:27

CI Build Passed - Automatically dismissing previous rejection as the build now succeeds.

@omeritzics
omeritzics force-pushed the main branch 2 times, most recently from 8c130f5 to 80d21ce Compare August 6, 2026 11:27

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🚫 CI Build Failed

The automated build process failed. Please review the build logs and fix the issues before requesting another review.

Next steps:

  1. Check the build logs for specific errors
  2. Fix the identified issues
  3. Push your fixes to this branch
  4. The CI will automatically re-run

Once the build passes, this review will be dismissed automatically.

@github-actions
github-actions Bot dismissed their stale review August 9, 2026 09:57

CI Build Passed - Automatically dismissing previous rejection as the build now succeeds.

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🚫 CI Build Failed

The automated build process failed. Please review the build logs and fix the issues before requesting another review.

Next steps:

  1. Check the build logs for specific errors
  2. Fix the identified issues
  3. Push your fixes to this branch
  4. The CI will automatically re-run

Once the build passes, this review will be dismissed automatically.

@github-actions
github-actions Bot dismissed their stale review August 26, 2026 20:40

CI Build Passed - Automatically dismissing previous rejection as the build now succeeds.

@omeritzics
omeritzics marked this pull request as ready for review August 27, 2026 16:39
@qodo-code-review

Copy link
Copy Markdown

ⓘ Qodo reviews are paused because the subscription is no longer active. Ask your workspace admin to reactivate the subscription to resume reviews. Manage billing

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants