-
Notifications
You must be signed in to change notification settings - Fork 17
Unify brand colors and consolidate color variants, phase 1 #407
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
WalkthroughThe PR centralizes and standardizes color usage: it updates the Changes
Sequence Diagram(s)(omitted — changes are styling/theme refactors without new multi-component control flow) Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Possibly related PRs
Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the 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. Comment |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
lib/features/order/screens/payment_confirmation_screen.dart (2)
26-26: Hardcoded user-facing strings should be localized.Per coding guidelines, screens under
lib/features/**/screens/should useS.of(context)!.yourKeyfor all user-facing strings. The following strings are hardcoded:
- Line 26:
'PAYMENT'- Line 78:
'received'- Line 99:
'CONTINUE'Also applies to: 78-78, 99-99
117-117: Typo: "Unkown" should be "Unknown".📝 Proposed fix
- 'Unkown Action: ${state.action}', + 'Unknown Action: ${state.action}',
🧹 Nitpick comments (1)
lib/features/order/widgets/payment_methods_section.dart (1)
148-148: Consider usingAppTheme.backgroundCardfor dialog background.The hardcoded
Color(0xFF1E2230)matchesAppTheme.backgroundCard. Using the theme constant would align with the PR's goal of centralizing colors.♻️ Suggested change
return AlertDialog( - backgroundColor: const Color(0xFF1E2230), + backgroundColor: AppTheme.backgroundCard,
📜 Review details
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (9)
lib/core/app_theme.dartlib/features/order/screens/add_order_screen.dartlib/features/order/screens/payment_confirmation_screen.dartlib/features/order/widgets/amount_section.dartlib/features/order/widgets/currency_section.dartlib/features/order/widgets/payment_methods_section.dartlib/features/settings/about_screen.dartlib/features/walkthrough/screens/walkthrough_screen.dartlib/shared/widgets/currency_selection_dialog.dart
🧰 Additional context used
📓 Path-based instructions (4)
**/*.{dart,flutter}
📄 CodeRabbit inference engine (CLAUDE.md)
**/*.{dart,flutter}: Runflutter analyzeafter any code change - Mandatory before commits to ensure zero linting issues
Runflutter testafter any code change - Mandatory before commits to ensure all unit tests pass
Files:
lib/features/order/widgets/currency_section.dartlib/features/walkthrough/screens/walkthrough_screen.dartlib/features/settings/about_screen.dartlib/shared/widgets/currency_selection_dialog.dartlib/features/order/screens/payment_confirmation_screen.dartlib/features/order/screens/add_order_screen.dartlib/features/order/widgets/amount_section.dartlib/core/app_theme.dartlib/features/order/widgets/payment_methods_section.dart
**/*.dart
📄 CodeRabbit inference engine (CLAUDE.md)
**/*.dart: Use Riverpod for all state management - encapsulate business logic in Notifiers and access data only through repository classes
All code comments must be in English - use clear, concise English for variable names, function names, and comments
Always checkmountedbefore using BuildContext after async operations to prevent errors on disposed widgets
Useconstconstructors where possible for better performance and immutability
Remove unused imports and dependencies to maintain code cleanliness and reduce build size
**/*.dart: Application code should be organized underlib/, grouped by domain withlib/features/<feature>/structure, shared utilities inlib/shared/, dependency wiring inlib/core/, and services inlib/services/
Persistence, APIs, and background jobs should live inlib/data/andlib/background/; generated localization output must be inlib/generated/and must stay untouched
Applyflutter format .to enforce canonical Dart formatting (two-space indentation, trailing commas) before committing
Resolve every analyzer warning in Dart code
Name Riverpod providers using the<Feature>Provideror<Feature>Notifierconvention
Localize all user-facing strings via ARB files and access them withS.of(context)rather than hard-coded literals
Files:
lib/features/order/widgets/currency_section.dartlib/features/walkthrough/screens/walkthrough_screen.dartlib/features/settings/about_screen.dartlib/shared/widgets/currency_selection_dialog.dartlib/features/order/screens/payment_confirmation_screen.dartlib/features/order/screens/add_order_screen.dartlib/features/order/widgets/amount_section.dartlib/core/app_theme.dartlib/features/order/widgets/payment_methods_section.dart
lib/features/**/screens/**/*.dart
📄 CodeRabbit inference engine (CLAUDE.md)
lib/features/**/screens/**/*.dart: Keep UI code declarative and side-effect free - use post-frame callbacks for side effects like SnackBars/dialogs
UseS.of(context)!.yourKeyfor all user-facing strings instead of hardcoded text
Files:
lib/features/walkthrough/screens/walkthrough_screen.dartlib/features/order/screens/payment_confirmation_screen.dartlib/features/order/screens/add_order_screen.dart
lib/shared/**/*.dart
📄 CodeRabbit inference engine (CLAUDE.md)
Follow existing feature patterns when adding new shared utilities - refer to order, chat, and auth features as implementation examples
Files:
lib/shared/widgets/currency_selection_dialog.dart
🧠 Learnings (21)
📓 Common learnings
Learnt from: Catrya
Repo: MostroP2P/mobile PR: 270
File: lib/shared/widgets/order_filter.dart:133-135
Timestamp: 2025-08-15T01:37:12.243Z
Learning: The MostroP2P/mobile project requires Flutter >=3.27.0 as specified in pubspec.yaml, which supports the Color.withValues() method, so usage of withValues() throughout the codebase is valid and should not be flagged as a compatibility issue.
Learnt from: Catrya
Repo: MostroP2P/mobile PR: 402
File: lib/features/chat/widgets/info_buttons.dart:49-49
Timestamp: 2026-01-09T20:38:51.941Z
Learning: In lib/features/chat/widgets/info_buttons.dart, the selected button background uses fully opaque AppTheme.mostroGreen (without alpha) for better visual appearance, as the translucent version looked bad.
📚 Learning: 2025-11-27T12:10:12.082Z
Learnt from: CR
Repo: MostroP2P/mobile PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-27T12:10:12.082Z
Learning: Applies to **/*.dart : Remove unused imports and dependencies to maintain code cleanliness and reduce build size
Applied to files:
lib/features/order/widgets/currency_section.dartlib/features/walkthrough/screens/walkthrough_screen.dart
📚 Learning: 2025-08-15T01:37:12.243Z
Learnt from: Catrya
Repo: MostroP2P/mobile PR: 270
File: lib/shared/widgets/order_filter.dart:133-135
Timestamp: 2025-08-15T01:37:12.243Z
Learning: The MostroP2P/mobile project requires Flutter >=3.27.0 as specified in pubspec.yaml, which supports the Color.withValues() method, so usage of withValues() throughout the codebase is valid and should not be flagged as a compatibility issue.
Applied to files:
lib/features/order/widgets/currency_section.dartlib/shared/widgets/currency_selection_dialog.dartlib/features/order/screens/payment_confirmation_screen.dartlib/features/order/screens/add_order_screen.dartlib/features/order/widgets/amount_section.dartlib/core/app_theme.dartlib/features/order/widgets/payment_methods_section.dart
📚 Learning: 2025-11-27T12:10:12.082Z
Learnt from: CR
Repo: MostroP2P/mobile PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-27T12:10:12.082Z
Learning: Applies to lib/shared/**/*.dart : Follow existing feature patterns when adding new shared utilities - refer to order, chat, and auth features as implementation examples
Applied to files:
lib/features/order/widgets/currency_section.dartlib/features/order/widgets/payment_methods_section.dart
📚 Learning: 2026-01-09T20:38:51.941Z
Learnt from: Catrya
Repo: MostroP2P/mobile PR: 402
File: lib/features/chat/widgets/info_buttons.dart:49-49
Timestamp: 2026-01-09T20:38:51.941Z
Learning: In lib/features/chat/widgets/info_buttons.dart, the selected button background uses fully opaque AppTheme.mostroGreen (without alpha) for better visual appearance, as the translucent version looked bad.
Applied to files:
lib/features/order/widgets/currency_section.dartlib/features/walkthrough/screens/walkthrough_screen.dartlib/features/settings/about_screen.dartlib/shared/widgets/currency_selection_dialog.dartlib/features/order/screens/payment_confirmation_screen.dartlib/features/order/screens/add_order_screen.dartlib/features/order/widgets/amount_section.dartlib/core/app_theme.dartlib/features/order/widgets/payment_methods_section.dart
📚 Learning: 2025-11-27T12:10:12.082Z
Learnt from: CR
Repo: MostroP2P/mobile PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-27T12:10:12.082Z
Learning: Applies to lib/shared/widgets/dynamic_countdown_widget.dart : Use exact `order_expires_at` timestamps from Mostro protocol for DynamicCountdownWidget precision and localize display with `S.of(context)!.timeLeftLabel()`
Applied to files:
lib/features/order/widgets/currency_section.dartlib/features/order/widgets/amount_section.dart
📚 Learning: 2025-11-27T12:10:26.407Z
Learnt from: CR
Repo: MostroP2P/mobile PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-11-27T12:10:26.407Z
Learning: Applies to **/*.dart : Localize all user-facing strings via ARB files and access them with `S.of(context)` rather than hard-coded literals
Applied to files:
lib/features/order/widgets/currency_section.dart
📚 Learning: 2025-11-27T12:10:12.082Z
Learnt from: CR
Repo: MostroP2P/mobile PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-27T12:10:12.082Z
Learning: Applies to **/*.dart : Use Riverpod for all state management - encapsulate business logic in Notifiers and access data only through repository classes
Applied to files:
lib/features/order/widgets/currency_section.dartlib/features/walkthrough/screens/walkthrough_screen.dartlib/shared/widgets/currency_selection_dialog.dartlib/features/order/screens/add_order_screen.dart
📚 Learning: 2025-05-06T15:49:26.443Z
Learnt from: chebizarro
Repo: MostroP2P/mobile PR: 74
File: lib/services/mostro_service.dart:70-76
Timestamp: 2025-05-06T15:49:26.443Z
Learning: In the Mostro Mobile codebase, Riverpod code generation is used with `Riverpod` annotations. Providers like `eventStorageProvider` are generated in `.g.dart` files from annotated functions in the main provider files. These providers are accessible by importing the main provider file (e.g., `mostro_service_provider.dart`), not by importing a separate provider file.
Applied to files:
lib/features/order/widgets/currency_section.dartlib/features/walkthrough/screens/walkthrough_screen.dartlib/shared/widgets/currency_selection_dialog.dartlib/features/order/screens/add_order_screen.dart
📚 Learning: 2025-11-27T12:10:26.407Z
Learnt from: CR
Repo: MostroP2P/mobile PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-11-27T12:10:26.407Z
Learning: Applies to **/*.dart : Name Riverpod providers using the `<Feature>Provider` or `<Feature>Notifier` convention
Applied to files:
lib/features/order/widgets/currency_section.dartlib/features/walkthrough/screens/walkthrough_screen.dartlib/shared/widgets/currency_selection_dialog.dartlib/features/order/screens/add_order_screen.dart
📚 Learning: 2025-11-27T12:10:12.082Z
Learnt from: CR
Repo: MostroP2P/mobile PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-27T12:10:12.082Z
Learning: Applies to lib/features/**/providers/**/*.dart : Organize Riverpod providers by feature in `features/{feature}/providers/` using Notifier pattern for complex state logic
Applied to files:
lib/features/order/widgets/currency_section.dartlib/features/walkthrough/screens/walkthrough_screen.dartlib/shared/widgets/currency_selection_dialog.dartlib/features/order/screens/add_order_screen.dart
📚 Learning: 2025-11-27T12:10:12.082Z
Learnt from: CR
Repo: MostroP2P/mobile PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-27T12:10:12.082Z
Learning: Applies to lib/core/mostro_fsm.dart : Use MostroFSM for managing order state transitions - all state changes must go through FSM state methods
Applied to files:
lib/features/order/widgets/currency_section.dartlib/features/order/screens/add_order_screen.dart
📚 Learning: 2025-05-06T15:49:26.443Z
Learnt from: chebizarro
Repo: MostroP2P/mobile PR: 74
File: lib/services/mostro_service.dart:70-76
Timestamp: 2025-05-06T15:49:26.443Z
Learning: In the Mostro Mobile codebase, `eventStorageProvider` is exported from `package:mostro_mobile/shared/providers/mostro_service_provider.dart` and not from a separate `event_storage_provider.dart` file.
Applied to files:
lib/features/order/widgets/currency_section.dartlib/shared/widgets/currency_selection_dialog.dartlib/features/order/screens/add_order_screen.dart
📚 Learning: 2025-10-21T21:47:03.451Z
Learnt from: Catrya
Repo: MostroP2P/mobile PR: 327
File: lib/features/order/notfiers/abstract_mostro_notifier.dart:157-182
Timestamp: 2025-10-21T21:47:03.451Z
Learning: In MostroP2P/mobile, for Action.canceled handling in abstract_mostro_notifier.dart (Riverpod StateNotifier), do not add mounted checks after async sessionNotifier.deleteSession(orderId) as they break order state synchronization during app restart. The Action.canceled flow contains critical business logic that must complete fully; Riverpod handles provider disposal automatically. Mounted checks should only protect UI operations, not business logic in StateNotifiers.
Applied to files:
lib/features/order/widgets/currency_section.dartlib/features/order/screens/add_order_screen.dart
📚 Learning: 2025-11-27T12:10:12.082Z
Learnt from: CR
Repo: MostroP2P/mobile PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-27T12:10:12.082Z
Learning: Applies to lib/features/**/screens/**/*.dart : Use `S.of(context)!.yourKey` for all user-facing strings instead of hardcoded text
Applied to files:
lib/features/walkthrough/screens/walkthrough_screen.dartlib/features/order/screens/payment_confirmation_screen.dartlib/features/order/screens/add_order_screen.dartlib/features/order/widgets/amount_section.dart
📚 Learning: 2025-11-27T12:10:12.082Z
Learnt from: CR
Repo: MostroP2P/mobile PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-27T12:10:12.082Z
Learning: Applies to lib/core/app_routes.dart : Use GoRouter for all navigation configuration instead of Navigator API - maintain all routes in app_routes.dart
Applied to files:
lib/features/walkthrough/screens/walkthrough_screen.dartlib/features/order/screens/add_order_screen.dart
📚 Learning: 2025-11-27T12:10:12.082Z
Learnt from: CR
Repo: MostroP2P/mobile PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-27T12:10:12.082Z
Learning: Applies to lib/main.dart : Configure timeago package locales in app initialization for proper relative time formatting (e.g., 'hace X horas' vs 'hours ago')
Applied to files:
lib/shared/widgets/currency_selection_dialog.dart
📚 Learning: 2025-10-14T21:12:06.887Z
Learnt from: Catrya
Repo: MostroP2P/mobile PR: 327
File: lib/features/order/notfiers/abstract_mostro_notifier.dart:141-154
Timestamp: 2025-10-14T21:12:06.887Z
Learning: In the MostroP2P mobile codebase, the notification system uses a two-layer localization pattern: providers/notifiers (without BuildContext access) call `showCustomMessage()` with string keys (e.g., 'orderTimeoutMaker', 'orderCanceled'), and the UI layer's `NotificationListenerWidget` has a switch statement that maps these keys to localized strings using `S.of(context)`. This architectural pattern properly separates concerns while maintaining full localization support for all user-facing messages.
Applied to files:
lib/shared/widgets/currency_selection_dialog.dart
📚 Learning: 2025-11-27T12:10:12.082Z
Learnt from: CR
Repo: MostroP2P/mobile PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-27T12:10:12.082Z
Learning: Applies to lib/features/**/screens/**/*.dart : Keep UI code declarative and side-effect free - use post-frame callbacks for side effects like SnackBars/dialogs
Applied to files:
lib/features/order/screens/payment_confirmation_screen.dartlib/features/order/screens/add_order_screen.dart
📚 Learning: 2025-11-27T12:10:12.082Z
Learnt from: CR
Repo: MostroP2P/mobile PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-27T12:10:12.082Z
Learning: All changes must pass `flutter analyze` with zero issues before committing to ensure code quality standards are maintained
Applied to files:
lib/features/order/screens/payment_confirmation_screen.dart
📚 Learning: 2025-11-27T12:10:12.082Z
Learnt from: CR
Repo: MostroP2P/mobile PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-27T12:10:12.082Z
Learning: Applies to lib/features/**/providers/**/*.dart : Use Notifier pattern instead of simple StateNotifier for complex state logic requiring business rule encapsulation
Applied to files:
lib/features/order/screens/add_order_screen.dart
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: build
🔇 Additional comments (9)
lib/features/order/widgets/currency_section.dart (1)
3-3: LGTM! Good consolidation of brand colors.The import and color reference change correctly centralizes the fiat code icon color to use
AppTheme.mostroGreen, aligning with the PR objective of unifying brand colors across the app.Also applies to: 27-27
lib/features/order/screens/add_order_screen.dart (1)
5-5: LGTM! Consistent theming for error dialog action button.The import and color update correctly centralizes the OK button styling in the error dialog to use
AppTheme.mostroGreen.Also applies to: 516-517
lib/shared/widgets/currency_selection_dialog.dart (1)
3-3: LGTM! Clean theming consolidation for currency dialog.Both the search box border color and the selected currency check icon now correctly reference
AppTheme.mostroGreen. The use ofwithValues(alpha: 0.3)for the border is valid for Flutter ≥3.27.0 per project requirements. Based on learnings, this usage is appropriate.Also applies to: 72-74, 152-155
lib/features/settings/about_screen.dart (1)
843-844: LGTM! License dialog button now uses centralized theme color.The close button background correctly references
AppTheme.mostroGreeninstead of the hardcoded hex value, maintaining consistency with the app's unified theming.lib/features/walkthrough/screens/walkthrough_screen.dart (1)
5-5: LGTM! Walkthrough highlight color unified with theme.The highlighted text styling now correctly uses
AppTheme.mostroGreen, ensuring the walkthrough's emphasized text matches the app's centralized brand color.Also applies to: 28-32
lib/core/app_theme.dart (1)
7-7: LGTM! Good consolidation of color constants.Centralizing
buyColor,activeColor,statusSuccess, andstatusActiveto referencemostroGreenimproves maintainability — future brand color updates only require changing one constant.Also applies to: 32-42
lib/features/order/screens/payment_confirmation_screen.dart (1)
60-60: LGTM! Theme color properly applied.Both the success icon container and the continue button now use the centralized
AppTheme.mostroGreen, aligning with the PR's goal of unifying brand colors.Also applies to: 87-87
lib/features/order/widgets/amount_section.dart (1)
110-110: LGTM! Consistent theme color usage.All color references properly updated to
AppTheme.mostroGreen:
- Range order badge background
- FormSection icon and icon background (with alpha via
withValues())- Tip text hint color
The
withValues(alpha: 0.3)usage is valid for Flutter >=3.27.0. Based on learnings, this is supported in the project.Also applies to: 183-184, 246-246
lib/features/order/widgets/payment_methods_section.dart (1)
45-46: LGTM! Theme colors properly applied throughout.All color references consistently updated to
AppTheme.mostroGreen:
- FormSection icon and background
- Focused border colors for text inputs (both inline and dialog)
- Checkbox active color in the payment methods dialog
Also applies to: 61-61, 163-163, 195-195
✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
lib/features/order/screens/payment_confirmation_screen.dart (1)
117-117: Typo: 'Unkown' should be 'Unknown'.🐛 Proposed fix
- 'Unkown Action: ${state.action}', + 'Unknown Action: ${state.action}',Note: This string should also be localized.
🤖 Fix all issues with AI agents
In `@docs/architecture/DESIGN_SYSTEM.md`:
- Around line 1121-1126: The changelog row under "## Changelog" is missing the
author in the last column; update the table entry for 2026-01-14 | 1.0.0 |
Initial document creation, Phase 1 complete to include the responsible author's
name or handle in the Author column (edit the table row under the "## Changelog"
header to append the correct author).
🧹 Nitpick comments (5)
lib/features/disputes/widgets/dispute_message_bubble.dart (1)
100-116: Hardcoded time format strings should be localized.The time formatting uses hardcoded English strings ('now', 'm ago', 'h ago', 'd ago'). As per coding guidelines, all user-facing strings should use
S.of(context)for localization support.♻️ Suggested approach
Consider using localized strings from your ARB files, or leverage the
timeagopackage which supports multiple locales:String _formatTime(DateTime dateTime) { final now = DateTime.now(); final difference = now.difference(dateTime); if (difference.inMinutes < 1) { - return 'now'; + return S.of(context)?.justNow ?? 'now'; } else if (difference.inMinutes < 60) { - return '${difference.inMinutes}m ago'; + return S.of(context)?.minutesAgo(difference.inMinutes) ?? '${difference.inMinutes}m ago'; } // ... similar for other caseslib/features/order/screens/payment_confirmation_screen.dart (1)
25-27: Hardcoded UI strings should be localized.Per coding guidelines for screen files, use
S.of(context)!.yourKeyfor all user-facing strings instead of hardcoded text:
- Line 26:
'PAYMENT'- Line 78:
'received'- Line 99:
'CONTINUE'Also applies to: 77-83, 99-99
lib/features/order/widgets/payment_methods_section.dart (1)
56-58: Consider addingconsttoBorderSideconstructors.Per coding guidelines, use
constconstructors where possible for better performance:♻️ Suggested fix
enabledBorder: UnderlineInputBorder( - borderSide: BorderSide(color: Colors.white24), + borderSide: const BorderSide(color: Colors.white24), ),Apply similarly to lines 191-192.
Also applies to: 191-192
docs/architecture/DESIGN_SYSTEM.md (2)
664-791: Well-documented decision-making process with clear rationale.Each decision includes alternatives considered, rationale, and impact. The choice of
#8CC63Fis well-justified by both developer usage patterns and brand alignment (line 683: "closest match to the color currently used in the Mostro logo").Consider adding a note about alpha/opacity usage: Based on learnings, the green color should be used at full opacity (without alpha) for better visual appearance on certain backgrounds. This guideline could be valuable in the Decision Log or Section 5.1 (Migration Guidelines).
46-1108: Consider optional markdown formatting improvements.The static analysis tools flagged several minor formatting issues throughout the document:
- Fenced code blocks missing language specifiers (e.g., lines 46, 83, 111, 144, 160, 255, 585)
- Tables should be surrounded by blank lines for better rendering
- Some sections use emphasis (
**text**) instead of proper headings (lines 584, 592, 777, 783, 789, 951, 966, 981)These don't affect the technical content but could improve consistency and markdown linter compliance if addressed.
Example fixes
For code blocks without language specs:
-``` +```text mostroGreen: ████ `#9CD651` (156, 214, 81) ← "Official" brand color buyColor: ████ `#9DD64F` (157, 214, 79) ← Almost identicalFor emphasis used as heading:
-**Step 1: Map Old → New** +#### Step 1: Map Old → New
📜 Review details
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (15)
docs/architecture/DESIGN_SYSTEM.mdlib/features/auth/screens/login_screen.dartlib/features/auth/screens/register_screen.dartlib/features/chat/widgets/info_buttons.dartlib/features/disputes/widgets/dispute_message_bubble.dartlib/features/home/screens/home_screen.dartlib/features/order/screens/add_order_screen.dartlib/features/order/screens/payment_confirmation_screen.dartlib/features/order/widgets/currency_section.dartlib/features/order/widgets/order_type_header.dartlib/features/order/widgets/payment_methods_section.dartlib/features/settings/about_screen.dartlib/features/walkthrough/screens/walkthrough_screen.dartlib/shared/widgets/currency_selection_dialog.dartlib/shared/widgets/exchange_rate_widget.dart
✅ Files skipped from review due to trivial changes (2)
- lib/shared/widgets/exchange_rate_widget.dart
- lib/features/home/screens/home_screen.dart
🚧 Files skipped from review as they are similar to previous changes (2)
- lib/features/settings/about_screen.dart
- lib/features/order/widgets/currency_section.dart
🧰 Additional context used
📓 Path-based instructions (4)
**/*.{dart,flutter}
📄 CodeRabbit inference engine (CLAUDE.md)
**/*.{dart,flutter}: Runflutter analyzeafter any code change - Mandatory before commits to ensure zero linting issues
Runflutter testafter any code change - Mandatory before commits to ensure all unit tests pass
Files:
lib/features/chat/widgets/info_buttons.dartlib/features/order/screens/payment_confirmation_screen.dartlib/features/order/screens/add_order_screen.dartlib/features/walkthrough/screens/walkthrough_screen.dartlib/features/disputes/widgets/dispute_message_bubble.dartlib/features/order/widgets/order_type_header.dartlib/shared/widgets/currency_selection_dialog.dartlib/features/auth/screens/register_screen.dartlib/features/auth/screens/login_screen.dartlib/features/order/widgets/payment_methods_section.dart
**/*.dart
📄 CodeRabbit inference engine (CLAUDE.md)
**/*.dart: Use Riverpod for all state management - encapsulate business logic in Notifiers and access data only through repository classes
All code comments must be in English - use clear, concise English for variable names, function names, and comments
Always checkmountedbefore using BuildContext after async operations to prevent errors on disposed widgets
Useconstconstructors where possible for better performance and immutability
Remove unused imports and dependencies to maintain code cleanliness and reduce build size
**/*.dart: Application code should be organized underlib/, grouped by domain withlib/features/<feature>/structure, shared utilities inlib/shared/, dependency wiring inlib/core/, and services inlib/services/
Persistence, APIs, and background jobs should live inlib/data/andlib/background/; generated localization output must be inlib/generated/and must stay untouched
Applyflutter format .to enforce canonical Dart formatting (two-space indentation, trailing commas) before committing
Resolve every analyzer warning in Dart code
Name Riverpod providers using the<Feature>Provideror<Feature>Notifierconvention
Localize all user-facing strings via ARB files and access them withS.of(context)rather than hard-coded literals
Files:
lib/features/chat/widgets/info_buttons.dartlib/features/order/screens/payment_confirmation_screen.dartlib/features/order/screens/add_order_screen.dartlib/features/walkthrough/screens/walkthrough_screen.dartlib/features/disputes/widgets/dispute_message_bubble.dartlib/features/order/widgets/order_type_header.dartlib/shared/widgets/currency_selection_dialog.dartlib/features/auth/screens/register_screen.dartlib/features/auth/screens/login_screen.dartlib/features/order/widgets/payment_methods_section.dart
lib/features/**/screens/**/*.dart
📄 CodeRabbit inference engine (CLAUDE.md)
lib/features/**/screens/**/*.dart: Keep UI code declarative and side-effect free - use post-frame callbacks for side effects like SnackBars/dialogs
UseS.of(context)!.yourKeyfor all user-facing strings instead of hardcoded text
Files:
lib/features/order/screens/payment_confirmation_screen.dartlib/features/order/screens/add_order_screen.dartlib/features/walkthrough/screens/walkthrough_screen.dartlib/features/auth/screens/register_screen.dartlib/features/auth/screens/login_screen.dart
lib/shared/**/*.dart
📄 CodeRabbit inference engine (CLAUDE.md)
Follow existing feature patterns when adding new shared utilities - refer to order, chat, and auth features as implementation examples
Files:
lib/shared/widgets/currency_selection_dialog.dart
🧠 Learnings (20)
📓 Common learnings
Learnt from: Catrya
Repo: MostroP2P/mobile PR: 402
File: lib/features/chat/widgets/info_buttons.dart:49-49
Timestamp: 2026-01-09T20:38:51.941Z
Learning: In lib/features/chat/widgets/info_buttons.dart, the selected button background uses fully opaque AppTheme.mostroGreen (without alpha) for better visual appearance, as the translucent version looked bad.
📚 Learning: 2026-01-09T20:38:51.941Z
Learnt from: Catrya
Repo: MostroP2P/mobile PR: 402
File: lib/features/chat/widgets/info_buttons.dart:49-49
Timestamp: 2026-01-09T20:38:51.941Z
Learning: In lib/features/chat/widgets/info_buttons.dart, the selected button background uses fully opaque AppTheme.mostroGreen (without alpha) for better visual appearance, as the translucent version looked bad.
Applied to files:
lib/features/chat/widgets/info_buttons.dartlib/features/order/screens/payment_confirmation_screen.dartlib/features/order/screens/add_order_screen.dartlib/features/walkthrough/screens/walkthrough_screen.dartlib/features/disputes/widgets/dispute_message_bubble.dartlib/features/order/widgets/order_type_header.dartlib/shared/widgets/currency_selection_dialog.dartlib/features/auth/screens/register_screen.dartlib/features/auth/screens/login_screen.dartlib/features/order/widgets/payment_methods_section.dart
📚 Learning: 2025-08-15T01:37:12.243Z
Learnt from: Catrya
Repo: MostroP2P/mobile PR: 270
File: lib/shared/widgets/order_filter.dart:133-135
Timestamp: 2025-08-15T01:37:12.243Z
Learning: The MostroP2P/mobile project requires Flutter >=3.27.0 as specified in pubspec.yaml, which supports the Color.withValues() method, so usage of withValues() throughout the codebase is valid and should not be flagged as a compatibility issue.
Applied to files:
lib/features/order/screens/payment_confirmation_screen.dartlib/features/order/screens/add_order_screen.dartlib/features/order/widgets/order_type_header.dartlib/shared/widgets/currency_selection_dialog.dartlib/features/order/widgets/payment_methods_section.dart
📚 Learning: 2025-11-27T12:10:12.082Z
Learnt from: CR
Repo: MostroP2P/mobile PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-27T12:10:12.082Z
Learning: Applies to lib/features/**/screens/**/*.dart : Use `S.of(context)!.yourKey` for all user-facing strings instead of hardcoded text
Applied to files:
lib/features/order/screens/payment_confirmation_screen.dartlib/features/order/screens/add_order_screen.dartlib/features/walkthrough/screens/walkthrough_screen.dartlib/features/order/widgets/order_type_header.dartlib/features/auth/screens/register_screen.dartlib/features/auth/screens/login_screen.dart
📚 Learning: 2025-11-27T12:10:12.082Z
Learnt from: CR
Repo: MostroP2P/mobile PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-27T12:10:12.082Z
Learning: Applies to lib/features/**/screens/**/*.dart : Keep UI code declarative and side-effect free - use post-frame callbacks for side effects like SnackBars/dialogs
Applied to files:
lib/features/order/screens/add_order_screen.dartlib/features/auth/screens/login_screen.dart
📚 Learning: 2025-11-27T12:10:12.082Z
Learnt from: CR
Repo: MostroP2P/mobile PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-27T12:10:12.082Z
Learning: Applies to lib/shared/**/*.dart : Follow existing feature patterns when adding new shared utilities - refer to order, chat, and auth features as implementation examples
Applied to files:
lib/features/order/screens/add_order_screen.dartlib/features/order/widgets/order_type_header.dartlib/features/order/widgets/payment_methods_section.dart
📚 Learning: 2025-11-27T12:10:12.082Z
Learnt from: CR
Repo: MostroP2P/mobile PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-27T12:10:12.082Z
Learning: Applies to **/*.dart : Remove unused imports and dependencies to maintain code cleanliness and reduce build size
Applied to files:
lib/features/order/screens/add_order_screen.dartlib/features/walkthrough/screens/walkthrough_screen.dartlib/features/order/widgets/order_type_header.dart
📚 Learning: 2025-11-27T12:10:12.082Z
Learnt from: CR
Repo: MostroP2P/mobile PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-27T12:10:12.082Z
Learning: Applies to **/*.dart : Use Riverpod for all state management - encapsulate business logic in Notifiers and access data only through repository classes
Applied to files:
lib/features/order/screens/add_order_screen.dartlib/features/walkthrough/screens/walkthrough_screen.dartlib/shared/widgets/currency_selection_dialog.dart
📚 Learning: 2025-11-27T12:10:12.082Z
Learnt from: CR
Repo: MostroP2P/mobile PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-27T12:10:12.082Z
Learning: Applies to lib/core/app_routes.dart : Use GoRouter for all navigation configuration instead of Navigator API - maintain all routes in app_routes.dart
Applied to files:
lib/features/order/screens/add_order_screen.dartlib/features/walkthrough/screens/walkthrough_screen.dart
📚 Learning: 2025-05-06T15:49:26.443Z
Learnt from: chebizarro
Repo: MostroP2P/mobile PR: 74
File: lib/services/mostro_service.dart:70-76
Timestamp: 2025-05-06T15:49:26.443Z
Learning: In the Mostro Mobile codebase, Riverpod code generation is used with `Riverpod` annotations. Providers like `eventStorageProvider` are generated in `.g.dart` files from annotated functions in the main provider files. These providers are accessible by importing the main provider file (e.g., `mostro_service_provider.dart`), not by importing a separate provider file.
Applied to files:
lib/features/order/screens/add_order_screen.dartlib/features/walkthrough/screens/walkthrough_screen.dartlib/features/order/widgets/order_type_header.dartlib/shared/widgets/currency_selection_dialog.dart
📚 Learning: 2025-11-27T12:10:12.082Z
Learnt from: CR
Repo: MostroP2P/mobile PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-27T12:10:12.082Z
Learning: Applies to lib/features/**/providers/**/*.dart : Organize Riverpod providers by feature in `features/{feature}/providers/` using Notifier pattern for complex state logic
Applied to files:
lib/features/order/screens/add_order_screen.dartlib/features/walkthrough/screens/walkthrough_screen.dartlib/shared/widgets/currency_selection_dialog.dart
📚 Learning: 2025-11-27T12:10:26.407Z
Learnt from: CR
Repo: MostroP2P/mobile PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-11-27T12:10:26.407Z
Learning: Applies to **/*.dart : Name Riverpod providers using the `<Feature>Provider` or `<Feature>Notifier` convention
Applied to files:
lib/features/order/screens/add_order_screen.dartlib/features/walkthrough/screens/walkthrough_screen.dartlib/shared/widgets/currency_selection_dialog.dart
📚 Learning: 2025-11-27T12:10:12.082Z
Learnt from: CR
Repo: MostroP2P/mobile PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-27T12:10:12.082Z
Learning: Applies to lib/features/**/providers/**/*.dart : Use Notifier pattern instead of simple StateNotifier for complex state logic requiring business rule encapsulation
Applied to files:
lib/features/order/screens/add_order_screen.dart
📚 Learning: 2025-10-21T21:47:03.451Z
Learnt from: Catrya
Repo: MostroP2P/mobile PR: 327
File: lib/features/order/notfiers/abstract_mostro_notifier.dart:157-182
Timestamp: 2025-10-21T21:47:03.451Z
Learning: In MostroP2P/mobile, for Action.canceled handling in abstract_mostro_notifier.dart (Riverpod StateNotifier), do not add mounted checks after async sessionNotifier.deleteSession(orderId) as they break order state synchronization during app restart. The Action.canceled flow contains critical business logic that must complete fully; Riverpod handles provider disposal automatically. Mounted checks should only protect UI operations, not business logic in StateNotifiers.
Applied to files:
lib/features/order/screens/add_order_screen.dart
📚 Learning: 2025-11-27T12:10:12.082Z
Learnt from: CR
Repo: MostroP2P/mobile PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-27T12:10:12.082Z
Learning: Applies to lib/core/mostro_fsm.dart : Use MostroFSM for managing order state transitions - all state changes must go through FSM state methods
Applied to files:
lib/features/order/screens/add_order_screen.dartlib/features/order/widgets/order_type_header.dart
📚 Learning: 2025-05-06T15:49:26.443Z
Learnt from: chebizarro
Repo: MostroP2P/mobile PR: 74
File: lib/services/mostro_service.dart:70-76
Timestamp: 2025-05-06T15:49:26.443Z
Learning: In the Mostro Mobile codebase, `eventStorageProvider` is exported from `package:mostro_mobile/shared/providers/mostro_service_provider.dart` and not from a separate `event_storage_provider.dart` file.
Applied to files:
lib/features/order/screens/add_order_screen.dartlib/features/order/widgets/order_type_header.dartlib/shared/widgets/currency_selection_dialog.dart
📚 Learning: 2025-11-27T12:10:26.407Z
Learnt from: CR
Repo: MostroP2P/mobile PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-11-27T12:10:26.407Z
Learning: Applies to **/*.dart : Localize all user-facing strings via ARB files and access them with `S.of(context)` rather than hard-coded literals
Applied to files:
lib/features/order/widgets/order_type_header.dartlib/shared/widgets/currency_selection_dialog.dart
📚 Learning: 2025-11-27T12:10:12.082Z
Learnt from: CR
Repo: MostroP2P/mobile PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-27T12:10:12.082Z
Learning: Applies to lib/shared/widgets/dynamic_countdown_widget.dart : Use exact `order_expires_at` timestamps from Mostro protocol for DynamicCountdownWidget precision and localize display with `S.of(context)!.timeLeftLabel()`
Applied to files:
lib/features/order/widgets/order_type_header.dart
📚 Learning: 2025-10-14T21:12:06.887Z
Learnt from: Catrya
Repo: MostroP2P/mobile PR: 327
File: lib/features/order/notfiers/abstract_mostro_notifier.dart:141-154
Timestamp: 2025-10-14T21:12:06.887Z
Learning: In the MostroP2P mobile codebase, the notification system uses a two-layer localization pattern: providers/notifiers (without BuildContext access) call `showCustomMessage()` with string keys (e.g., 'orderTimeoutMaker', 'orderCanceled'), and the UI layer's `NotificationListenerWidget` has a switch statement that maps these keys to localized strings using `S.of(context)`. This architectural pattern properly separates concerns while maintaining full localization support for all user-facing messages.
Applied to files:
lib/features/order/widgets/order_type_header.dartlib/shared/widgets/currency_selection_dialog.dart
📚 Learning: 2025-11-27T12:10:12.082Z
Learnt from: CR
Repo: MostroP2P/mobile PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-27T12:10:12.082Z
Learning: Applies to lib/main.dart : Configure timeago package locales in app initialization for proper relative time formatting (e.g., 'hace X horas' vs 'hours ago')
Applied to files:
lib/features/order/widgets/order_type_header.dartlib/shared/widgets/currency_selection_dialog.dart
🪛 LanguageTool
docs/architecture/DESIGN_SYSTEM.md
[uncategorized] ~124-~124: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ...mplexity Severity: MEDIUM PRIORITY (HIGH RISK due to visual impact) Impact: 7 dif...
(EN_COMPOUND_ADJECTIVE_INTERNAL)
🪛 markdownlint-cli2 (0.18.1)
docs/architecture/DESIGN_SYSTEM.md
37-37: Tables should be surrounded by blank lines
(MD058, blanks-around-tables)
46-46: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
76-76: Tables should be surrounded by blank lines
(MD058, blanks-around-tables)
83-83: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
105-105: Tables should be surrounded by blank lines
(MD058, blanks-around-tables)
111-111: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
133-133: Tables should be surrounded by blank lines
(MD058, blanks-around-tables)
144-144: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
160-160: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
186-186: Tables should be surrounded by blank lines
(MD058, blanks-around-tables)
212-212: Tables should be surrounded by blank lines
(MD058, blanks-around-tables)
255-255: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
584-584: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
585-585: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
592-592: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
677-677: Unordered list indentation
Expected: 0; Actual: 3
(MD007, ul-indent)
678-678: Unordered list indentation
Expected: 0; Actual: 3
(MD007, ul-indent)
679-679: Unordered list indentation
Expected: 0; Actual: 3
(MD007, ul-indent)
680-680: Unordered list indentation
Expected: 0; Actual: 3
(MD007, ul-indent)
777-777: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
783-783: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
789-789: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
951-951: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
966-966: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
981-981: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
1125-1125: Table column count
Expected: 4; Actual: 3; Too few cells, row will be missing data
(MD056, table-column-count)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: build
🔇 Additional comments (14)
lib/features/order/widgets/order_type_header.dart (1)
2-2: LGTM! Good color consolidation.The import addition and replacement of hard-coded
Color(0xFF1E2230)withAppTheme.backgroundCardaligns well with the PR's goal of centralizing color definitions.Also applies to: 16-17
lib/features/auth/screens/login_screen.dart (1)
36-36: LGTM! Background color consolidated to theme constant.Replacing the hard-coded
Color(0xFF1D212C)withAppTheme.dark1maintains visual consistency while centralizing the color definition.lib/features/auth/screens/register_screen.dart (1)
61-61: LGTM! Consistent with login screen theming.The background color change to
AppTheme.dark1ensures visual consistency between the login and register screens.lib/features/chat/widgets/info_buttons.dart (1)
48-51: LGTM! Simplified selected state foreground color.Changing from
Color(0xFF1A1A1A)(very dark gray) toColors.blackis a minor simplification. The pure black provides good contrast against theAppTheme.mostroGreenbackground. Based on learnings, the fully opaque green background is intentional for better visual appearance.lib/features/walkthrough/screens/walkthrough_screen.dart (2)
5-5: LGTM! Color consolidation with theme constants.Good use of
AppTheme.mostroGreenfor the highlight style - this correctly centralizes the brand color.Note that the default text color change from
Color(0xFF9aa1b6)(grayish-blue) toColors.white70(semi-transparent white) is a subtle visual shift, not just a consolidation. If the grayish-blue was intentional for this screen's aesthetic, consider defining it as a theme constant.Also applies to: 27-32
99-104: Consistent styling applied to page decoration.The
bodyTextStylecolor change toColors.white70matches thedefaultStyleupdate above, maintaining consistency within the walkthrough screen.lib/features/disputes/widgets/dispute_message_bubble.dart (1)
77-86: Good consolidation of admin message color.The replacement of hardcoded
0xFF1565C0withAppTheme.createdByYouChipaligns well with the PR's goal of centralizing colors. The HSV manipulation to create a subdued version is a reasonable approach.lib/features/order/screens/payment_confirmation_screen.dart (1)
21-21: Good theme color consolidation.The replacement of hardcoded colors with
AppTheme.dark1,AppTheme.dark2, andAppTheme.mostroGreenaligns with the PR's design system consolidation goals.Also applies to: 49-49, 60-60, 87-87
lib/shared/widgets/currency_selection_dialog.dart (1)
47-47: Consistent theme color adoption throughout the dialog.All color replacements properly reference
AppThemeconstants:
- Dialog and input backgrounds use
AppTheme.backgroundCardandAppTheme.backgroundInput- Border and icon colors use
AppTheme.mostroGreen- Usage of
.withValues(alpha: 0.3)is valid for Flutter >=3.27.0Also applies to: 53-53, 70-73, 154-154
lib/features/order/widgets/payment_methods_section.dart (1)
45-46: Consistent theme color usage across the payment methods widget.All color replacements properly use
AppThemeconstants for icons, borders, dialog backgrounds, and checkbox colors. The use of.withValues(alpha: 0.3)for the icon background provides appropriate visual hierarchy.Also applies to: 61-61, 148-148, 163-163, 195-195
lib/features/order/screens/add_order_screen.dart (1)
211-213: Well-executed theme color consolidation.All color replacements properly use
AppThemeconstants:
- Screen backgrounds use
AppTheme.backgroundDark- Fixed-price section uses
AppTheme.yellowwith appropriate alpha for icon background- Error dialog uses
AppTheme.backgroundCardandAppTheme.mostroGreenThe existing localization via
S.of(context)!is properly maintained throughout.Also applies to: 302-304, 508-508, 517-517
docs/architecture/DESIGN_SYSTEM.md (3)
1-246: Excellent problem analysis and documentation structure!The comprehensive color audit is thorough and well-organized. The clear distinction between "ORIGINAL STATE" (line 20) and resolved status helps readers understand what was fixed in Phase 1 versus what remains to be addressed. The visual comparisons with hex/RGB values and detailed file listings provide excellent context for the refactoring decisions.
249-336: Phase 1 documentation accurately reflects implementation.The detailed checklist and file-by-file accounting provides excellent traceability. The metrics (16 files modified, 5→1 greens, 22+ hardcoded instances removed) align with the actual code changes shown in the cross-file context. The testing approach (flutter analyze + visual testing) is appropriate for color-only changes.
1-1130: Outstanding design documentation for the color refactoring project!This document provides a comprehensive foundation for systematic color system improvement. Key strengths:
- Thorough analysis: Detailed color audit with hex/RGB values, visual comparisons, and impact assessment
- Clear roadmap: 4 phases with appropriate risk levels and success criteria
- Documented decisions: Each Phase 1 decision includes rationale and alternatives considered
- Actionable guidelines: Clear rules and patterns for maintaining color consistency going forward
- Traceability: Phase 1 completion aligns perfectly with actual code changes
The phased approach with risk assessment (🟢 Low → 🔴 High) demonstrates thoughtful planning. The decision to tackle green unification first (most visible, widely used) before high-risk background changes is sound.
✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.
grunch
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
* standardize brand green color across application * replace hardcoded background and utility colors with AppTheme constants * replace remaining harcoded colors * add doc with phases
…nce (phase 4) (#408) * feat: add notification settings screen with push notification preferences Add NotificationSettingsScreen with support for push notification configuration: - Add route for /notification_settings in app router - Implement UI for push notifications toggle with platform detection - Add notification preferences for sound and vibration settings - Display privacy information card explaining encrypted token approach - Add Settings model fields for pushNotificationsEnabled, notificationSoundEnabled, not * refactor: simplify Switch styling and update MockSettings with notification fields - Replace activeTrackColor and activeThumbColor with single activeColor property in Switch widgets - Add missing notification-related getters to MockSettings (isLoggingEnabled, pushNotificationsEnabled, notificationSoundEnabled, notificationVibrationEnabled) - Update MockSettings copyWith method to include new notification preference parameters * feat: integrate push notification service with session and settings management - Add setPushServices method to SettingsNotifier to connect with PushNotificationService and FCMService - Implement automatic token unregistration when user disables push notifications in settings - Add setPushNotificationService method to SessionNotifier for automatic token registration - Register push tokens automatically when new sessions are saved - Initialize push notification integration in main.dart with settings * Unify brand colors and consolidate color variants, phase 1 (#407) * standardize brand green color across application * replace hardcoded background and utility colors with AppTheme constants * replace remaining harcoded colors * add doc with phases * feat: update info event kind from 38383 to 38385 (#410) - Add infoEventKind constant for new Mostro info event kind - Update subscription filter to include kind 38385 - Change info event detection from z-tag to kind-based filtering * Bump to version 1.0.7 * Update changelog file * docs: update FCM implementation roadmap to reflect current progress and future encryption plans - Update phase descriptions to clarify current unencrypted implementation (Phase 3) vs future encrypted approach (Phase 5) - Mark Phase 4 (user settings and opt-out) as complete - Move encryption implementation details from Phase 3 to new Phase 5 (future work) - Add privacy note explaining current plaintext token registration over HTTPS - Update PushNotificationService to remove encryption code and use --------- Co-authored-by: Catrya <140891948+Catrya@users.noreply.github.com> Co-authored-by: grunch <fjcalderon@gmail.com>
Summary by CodeRabbit
✏️ Tip: You can customize this high-level summary in your review settings.