Skip to content

Conversation

@Catrya
Copy link
Member

@Catrya Catrya commented Jan 14, 2026

Summary by CodeRabbit

  • Style
    • Updated the primary green tone and replaced many hard-coded colors with centralized theme values, unifying buttons, icons, dialogs, backgrounds, and highlights for consistent visuals.
  • Documentation
    • Added a Design System document outlining the color consolidation, migration roadmap, and future theming phases.

✏️ Tip: You can customize this high-level summary in your review settings.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 14, 2026

Walkthrough

The PR centralizes and standardizes color usage: it updates the mostroGreen value, removes an unused green constant, and replaces many hard-coded color literals across screens and widgets to reference AppTheme theme constants; it also adds a design-system doc describing the refactor plan.

Changes

Cohort / File(s) Summary
Theme definition
lib/core/app_theme.dart
Changed mostroGreen from 0xFF9CD6510xFF8CC63F; removed green2; re-bound buyColor, activeColor, statusSuccess, statusActive to mostroGreen
Order screens & widgets
lib/features/order/screens/add_order_screen.dart, lib/features/order/screens/payment_confirmation_screen.dart, lib/features/order/widgets/amount_section.dart, lib/features/order/widgets/currency_section.dart, lib/features/order/widgets/payment_methods_section.dart
Replaced hard-coded greens and several background colors with AppTheme constants (e.g., mostroGreen, backgroundCard, dark1, dark2, yellow, purpleAccent) — styling-only changes
Auth / Home / Walkthrough / Misc screens
lib/features/auth/screens/login_screen.dart, lib/features/auth/screens/register_screen.dart, lib/features/home/screens/home_screen.dart, lib/features/walkthrough/screens/walkthrough_screen.dart
Replaced scaffold/background and highlight text colors with AppTheme constants (e.g., dark1, mostroGreen) and switched some text colors to Colors.white70 — no logic changes
Shared widgets & components
lib/shared/widgets/currency_selection_dialog.dart, lib/shared/widgets/exchange_rate_widget.dart, lib/features/order/widgets/order_type_header.dart, lib/features/chat/widgets/info_buttons.dart, lib/features/disputes/widgets/dispute_message_bubble.dart, lib/features/settings/about_screen.dart, lib/features/order/screens/payment_confirmation_screen.dart
Switched dialog/background/border/icon colors to AppTheme values (e.g., backgroundCard, backgroundInput, mostroGreen, createdByYouChip) and minor button color tweak — visual changes only
Documentation
docs/architecture/DESIGN_SYSTEM.md
Added a comprehensive design-system document describing a 4-phase color consolidation roadmap, migration guidelines, and a decision log (Phase 1 marked complete)

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

  • chebizarro
  • grunch

Poem

🐇 I hopped through hex and theme tonight,
Gathered greens into one bright light,
Replaced hard codes with tidy cheer,
Now AppTheme sings across the sphere —
A little rabbit, palette polite.

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately describes the main objective of the pull request: unifying brand colors (consolidating multiple green shades into a single mostroGreen) and removing color variants (removing green2), with phase 1 indicating this is the first stage of a multi-phase effort.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ 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.

❤️ Share

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

@Catrya Catrya marked this pull request as draft January 14, 2026 19:10
Copy link
Contributor

@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

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 use S.of(context)!.yourKey for 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 using AppTheme.backgroundCard for dialog background.

The hardcoded Color(0xFF1E2230) matches AppTheme.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

📥 Commits

Reviewing files that changed from the base of the PR and between 39bab8f and 0e3bc5e.

📒 Files selected for processing (9)
  • lib/core/app_theme.dart
  • lib/features/order/screens/add_order_screen.dart
  • lib/features/order/screens/payment_confirmation_screen.dart
  • lib/features/order/widgets/amount_section.dart
  • lib/features/order/widgets/currency_section.dart
  • lib/features/order/widgets/payment_methods_section.dart
  • lib/features/settings/about_screen.dart
  • lib/features/walkthrough/screens/walkthrough_screen.dart
  • lib/shared/widgets/currency_selection_dialog.dart
🧰 Additional context used
📓 Path-based instructions (4)
**/*.{dart,flutter}

📄 CodeRabbit inference engine (CLAUDE.md)

**/*.{dart,flutter}: Run flutter analyze after any code change - Mandatory before commits to ensure zero linting issues
Run flutter test after any code change - Mandatory before commits to ensure all unit tests pass

Files:

  • lib/features/order/widgets/currency_section.dart
  • lib/features/walkthrough/screens/walkthrough_screen.dart
  • lib/features/settings/about_screen.dart
  • lib/shared/widgets/currency_selection_dialog.dart
  • lib/features/order/screens/payment_confirmation_screen.dart
  • lib/features/order/screens/add_order_screen.dart
  • lib/features/order/widgets/amount_section.dart
  • lib/core/app_theme.dart
  • lib/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 check mounted before using BuildContext after async operations to prevent errors on disposed widgets
Use const constructors 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 under lib/, grouped by domain with lib/features/<feature>/ structure, shared utilities in lib/shared/, dependency wiring in lib/core/, and services in lib/services/
Persistence, APIs, and background jobs should live in lib/data/ and lib/background/; generated localization output must be in lib/generated/ and must stay untouched
Apply flutter 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>Provider or <Feature>Notifier convention
Localize all user-facing strings via ARB files and access them with S.of(context) rather than hard-coded literals

Files:

  • lib/features/order/widgets/currency_section.dart
  • lib/features/walkthrough/screens/walkthrough_screen.dart
  • lib/features/settings/about_screen.dart
  • lib/shared/widgets/currency_selection_dialog.dart
  • lib/features/order/screens/payment_confirmation_screen.dart
  • lib/features/order/screens/add_order_screen.dart
  • lib/features/order/widgets/amount_section.dart
  • lib/core/app_theme.dart
  • lib/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
Use S.of(context)!.yourKey for all user-facing strings instead of hardcoded text

Files:

  • lib/features/walkthrough/screens/walkthrough_screen.dart
  • lib/features/order/screens/payment_confirmation_screen.dart
  • lib/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.dart
  • lib/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.dart
  • lib/shared/widgets/currency_selection_dialog.dart
  • lib/features/order/screens/payment_confirmation_screen.dart
  • lib/features/order/screens/add_order_screen.dart
  • lib/features/order/widgets/amount_section.dart
  • lib/core/app_theme.dart
  • lib/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.dart
  • lib/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.dart
  • lib/features/walkthrough/screens/walkthrough_screen.dart
  • lib/features/settings/about_screen.dart
  • lib/shared/widgets/currency_selection_dialog.dart
  • lib/features/order/screens/payment_confirmation_screen.dart
  • lib/features/order/screens/add_order_screen.dart
  • lib/features/order/widgets/amount_section.dart
  • lib/core/app_theme.dart
  • lib/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.dart
  • lib/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.dart
  • lib/features/walkthrough/screens/walkthrough_screen.dart
  • lib/shared/widgets/currency_selection_dialog.dart
  • lib/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.dart
  • lib/features/walkthrough/screens/walkthrough_screen.dart
  • lib/shared/widgets/currency_selection_dialog.dart
  • lib/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.dart
  • lib/features/walkthrough/screens/walkthrough_screen.dart
  • lib/shared/widgets/currency_selection_dialog.dart
  • 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/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.dart
  • lib/features/walkthrough/screens/walkthrough_screen.dart
  • lib/shared/widgets/currency_selection_dialog.dart
  • 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/widgets/currency_section.dart
  • lib/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.dart
  • lib/shared/widgets/currency_selection_dialog.dart
  • 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/widgets/currency_section.dart
  • 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/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.dart
  • lib/features/order/screens/payment_confirmation_screen.dart
  • lib/features/order/screens/add_order_screen.dart
  • lib/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.dart
  • 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/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.dart
  • 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: 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 of withValues(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.mostroGreen instead 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, and statusActive to reference mostroGreen improves 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.

@Catrya Catrya marked this pull request as ready for review January 15, 2026 03:41
@Catrya Catrya changed the title Unify brand colors and consolidate color variants Unify brand colors and consolidate color variants, phase 1 Jan 15, 2026
Copy link
Contributor

@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

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 timeago package 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 cases
lib/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)!.yourKey for 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 adding const to BorderSide constructors.

Per coding guidelines, use const constructors 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 #8CC63F is 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 identical

For 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

📥 Commits

Reviewing files that changed from the base of the PR and between 0e3bc5e and e613f65.

📒 Files selected for processing (15)
  • docs/architecture/DESIGN_SYSTEM.md
  • lib/features/auth/screens/login_screen.dart
  • lib/features/auth/screens/register_screen.dart
  • lib/features/chat/widgets/info_buttons.dart
  • lib/features/disputes/widgets/dispute_message_bubble.dart
  • lib/features/home/screens/home_screen.dart
  • lib/features/order/screens/add_order_screen.dart
  • lib/features/order/screens/payment_confirmation_screen.dart
  • lib/features/order/widgets/currency_section.dart
  • lib/features/order/widgets/order_type_header.dart
  • lib/features/order/widgets/payment_methods_section.dart
  • lib/features/settings/about_screen.dart
  • lib/features/walkthrough/screens/walkthrough_screen.dart
  • lib/shared/widgets/currency_selection_dialog.dart
  • lib/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}: Run flutter analyze after any code change - Mandatory before commits to ensure zero linting issues
Run flutter test after any code change - Mandatory before commits to ensure all unit tests pass

Files:

  • lib/features/chat/widgets/info_buttons.dart
  • lib/features/order/screens/payment_confirmation_screen.dart
  • lib/features/order/screens/add_order_screen.dart
  • lib/features/walkthrough/screens/walkthrough_screen.dart
  • lib/features/disputes/widgets/dispute_message_bubble.dart
  • lib/features/order/widgets/order_type_header.dart
  • lib/shared/widgets/currency_selection_dialog.dart
  • lib/features/auth/screens/register_screen.dart
  • lib/features/auth/screens/login_screen.dart
  • lib/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 check mounted before using BuildContext after async operations to prevent errors on disposed widgets
Use const constructors 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 under lib/, grouped by domain with lib/features/<feature>/ structure, shared utilities in lib/shared/, dependency wiring in lib/core/, and services in lib/services/
Persistence, APIs, and background jobs should live in lib/data/ and lib/background/; generated localization output must be in lib/generated/ and must stay untouched
Apply flutter 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>Provider or <Feature>Notifier convention
Localize all user-facing strings via ARB files and access them with S.of(context) rather than hard-coded literals

Files:

  • lib/features/chat/widgets/info_buttons.dart
  • lib/features/order/screens/payment_confirmation_screen.dart
  • lib/features/order/screens/add_order_screen.dart
  • lib/features/walkthrough/screens/walkthrough_screen.dart
  • lib/features/disputes/widgets/dispute_message_bubble.dart
  • lib/features/order/widgets/order_type_header.dart
  • lib/shared/widgets/currency_selection_dialog.dart
  • lib/features/auth/screens/register_screen.dart
  • lib/features/auth/screens/login_screen.dart
  • lib/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
Use S.of(context)!.yourKey for all user-facing strings instead of hardcoded text

Files:

  • lib/features/order/screens/payment_confirmation_screen.dart
  • lib/features/order/screens/add_order_screen.dart
  • lib/features/walkthrough/screens/walkthrough_screen.dart
  • lib/features/auth/screens/register_screen.dart
  • lib/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.dart
  • lib/features/order/screens/payment_confirmation_screen.dart
  • lib/features/order/screens/add_order_screen.dart
  • lib/features/walkthrough/screens/walkthrough_screen.dart
  • lib/features/disputes/widgets/dispute_message_bubble.dart
  • lib/features/order/widgets/order_type_header.dart
  • lib/shared/widgets/currency_selection_dialog.dart
  • lib/features/auth/screens/register_screen.dart
  • lib/features/auth/screens/login_screen.dart
  • lib/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.dart
  • lib/features/order/screens/add_order_screen.dart
  • lib/features/order/widgets/order_type_header.dart
  • lib/shared/widgets/currency_selection_dialog.dart
  • lib/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.dart
  • lib/features/order/screens/add_order_screen.dart
  • lib/features/walkthrough/screens/walkthrough_screen.dart
  • lib/features/order/widgets/order_type_header.dart
  • lib/features/auth/screens/register_screen.dart
  • lib/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.dart
  • lib/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.dart
  • lib/features/order/widgets/order_type_header.dart
  • lib/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.dart
  • lib/features/walkthrough/screens/walkthrough_screen.dart
  • lib/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.dart
  • lib/features/walkthrough/screens/walkthrough_screen.dart
  • 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/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.dart
  • lib/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.dart
  • lib/features/walkthrough/screens/walkthrough_screen.dart
  • lib/features/order/widgets/order_type_header.dart
  • 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/**/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.dart
  • lib/features/walkthrough/screens/walkthrough_screen.dart
  • lib/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.dart
  • lib/features/walkthrough/screens/walkthrough_screen.dart
  • 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/**/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.dart
  • lib/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.dart
  • lib/features/order/widgets/order_type_header.dart
  • lib/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.dart
  • 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/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.dart
  • 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/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.dart
  • lib/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) with AppTheme.backgroundCard aligns 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) with AppTheme.dark1 maintains 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.dark1 ensures 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) to Colors.black is a minor simplification. The pure black provides good contrast against the AppTheme.mostroGreen background. 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.mostroGreen for the highlight style - this correctly centralizes the brand color.

Note that the default text color change from Color(0xFF9aa1b6) (grayish-blue) to Colors.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 bodyTextStyle color change to Colors.white70 matches the defaultStyle update 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 0xFF1565C0 with AppTheme.createdByYouChip aligns 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, and AppTheme.mostroGreen aligns 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 AppTheme constants:

  • Dialog and input backgrounds use AppTheme.backgroundCard and AppTheme.backgroundInput
  • Border and icon colors use AppTheme.mostroGreen
  • Usage of .withValues(alpha: 0.3) is valid for Flutter >=3.27.0

Also 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 AppTheme constants 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 AppTheme constants:

  • Screen backgrounds use AppTheme.backgroundDark
  • Fixed-price section uses AppTheme.yellow with appropriate alpha for icon background
  • Error dialog uses AppTheme.backgroundCard and AppTheme.mostroGreen

The 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.

Copy link
Member

@grunch grunch left a comment

Choose a reason for hiding this comment

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

LGTM

@grunch grunch merged commit f2a2e6d into main Jan 15, 2026
2 checks passed
@grunch grunch deleted the fix-colors branch January 15, 2026 13:42
AndreaDiazCorreia pushed a commit that referenced this pull request Jan 20, 2026
* standardize brand green color across application

* replace hardcoded background and utility colors with AppTheme constants

* replace remaining harcoded colors

* add doc with phases
grunch added a commit that referenced this pull request Jan 21, 2026
…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>
@coderabbitai coderabbitai bot mentioned this pull request Jan 26, 2026
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.

3 participants