-
Notifications
You must be signed in to change notification settings - Fork 13
Make all settings screen headers consistent #674
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
|
You have run out of free Bugbot PR reviews for this billing cycle. This will reset on October 25. To receive reviews on all of your PRs, visit the Cursor dashboard to activate Pro and start your 14-day free trial. |
WalkthroughReplaces inline header rows with a shared Changes
Sequence Diagram(s)sequenceDiagram
autonumber
actor User
participant Screen as Settings Screen
participant AppBar as WnAppBar
participant Nav as Navigator
User->>Screen: Open settings screen
Screen->>AppBar: Render(title, leading: back)
Note over Screen,AppBar: Body rendered inside Padding\nand SingleChildScrollView
User->>AppBar: Tap back
AppBar->>Nav: pop()
Nav-->>User: Navigate back
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Possibly related PRs
Suggested reviewers
Poem
Pre-merge checks and finishing touches✅ Passed checks (3 passed)
✨ Finishing touches🧪 Generate unit tests
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
🧹 Nitpick comments (6)
lib/ui/settings/donate/donate_screen.dart (2)
72-76: Use vertical units for bottom padding (24.h, not 24.w).
This bottom inset is vertical space; using .w is inconsistent with other paddings.Apply this diff:
- bottom: 24.w, + bottom: 24.h,
36-65: Potential double painting of the same background.
Both Scaffold.backgroundColor and the top-level ColoredBox use context.colors.neutral. If there’s no need for a separate paint layer (e.g., for overscroll effects), consider dropping one.lib/ui/settings/network/network_screen.dart (1)
129-153: Unify back navigation: prefer context.pop() (GoRouter) across settings screens.
Other screens in this PR use context.pop(); this one uses Navigator.of(context).pop(). For consistency (and route middleware/hooks), switch to context.pop().Apply this diff:
- onPressed: () => Navigator.of(context).pop(), + onPressed: () => context.pop(),Add (if not already present) at the top with other imports:
import 'package:go_router/go_router.dart';lib/ui/settings/app_settings/app_settings_screen.dart (2)
221-225: Use 24.h for bottom padding, not 24.w.
Same vertical spacing issue as in Donate screen.Apply this diff:
- bottom: 24.w, + bottom: 24.h,
185-225: Deduplicate common header/padding boilerplate.
The WnAppBar + SafeArea + outer vertical padding pattern is repeated across settings screens. Consider a small helper (e.g., SettingsScaffold or buildSettingsAppBar(title)) to centralize this and avoid drift.lib/ui/settings/profile_keys/profile_keys_screen.dart (1)
39-46: Confirm the copied public key matches what’s displayed.
Controller shows a formatted value (formatPublicKey), while copy uses provider.npub directly. If npub isn’t already the formatted String, users may copy a different value than shown. Consider copying _publicKeyController.text for fidelity.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (5)
lib/ui/settings/app_settings/app_settings_screen.dart(3 hunks)lib/ui/settings/donate/donate_screen.dart(3 hunks)lib/ui/settings/network/network_screen.dart(2 hunks)lib/ui/settings/profile/edit_profile_screen.dart(4 hunks)lib/ui/settings/profile_keys/profile_keys_screen.dart(3 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
**/*.dart
📄 CodeRabbit inference engine (.cursor/rules/flutter.mdc)
**/*.dart: Always declare the type of each variable and function (parameters and return value). Avoid using 'any'. Create necessary types.
Don't leave blank lines within a function.
One export per file.
Use PascalCase for classes.
Use camelCase for variables, functions, and methods.
Use underscores_case for file and directory names.
Use UPPERCASE for environment variables. Avoid magic numbers and define constants.
Start each function with a verb.
Use verbs for boolean variables. Example: isLoading, hasError, canDelete, etc.
Use complete words instead of abbreviations and correct spelling, except for standard and well-known abbreviations (API, URL, i, j, err, ctx, req, res, next).
Write short functions with a single purpose. Less than 20 instructions.
Name functions with a verb and something else. If it returns a boolean, use isX or hasX, canX, etc. If it doesn't return anything, use executeX or saveX, etc.
Avoid nesting blocks by early checks and returns, or extraction to utility functions.
Use higher-order functions (map, filter, reduce, etc.) to avoid function nesting. Use arrow functions for simple functions (less than 3 instructions). Use named functions for non-simple functions.
Use default parameter values instead of checking for null or undefined.
Reduce function parameters using RO-RO: use an object to pass multiple parameters and to return results. Declare necessary types for input arguments and output.
Use a single level of abstraction in functions.
Don't abuse primitive types and encapsulate data in composite types.
Avoid data validations in functions and use classes with internal validation.
Prefer immutability for data. Use readonly for data that doesn't change. Use 'as const' for literals that don't change.
Declare interfaces to define contracts.
Write small classes with a single purpose. Less than 200 instructions, less than 10 public methods, less than 10 properties.
Use exceptions to handle errors you don't expect. If you catch an exception, it sh...
Files:
lib/ui/settings/app_settings/app_settings_screen.dartlib/ui/settings/donate/donate_screen.dartlib/ui/settings/network/network_screen.dartlib/ui/settings/profile/edit_profile_screen.dartlib/ui/settings/profile_keys/profile_keys_screen.dart
🧠 Learnings (7)
📚 Learning: 2025-08-23T11:02:28.308Z
Learnt from: Quwaysim
PR: parres-hq/whitenoise_flutter#527
File: lib/ui/core/ui/wn_avatar.dart:1-6
Timestamp: 2025-08-23T11:02:28.308Z
Learning: In the whitenoise_flutter codebase, flutter_screenutil is re-exported through lib/ui/core/themes/src/app_theme.dart, so files that import app_theme.dart do not need to directly import flutter_screenutil to use .w, .h, .sp extensions.
Applied to files:
lib/ui/settings/app_settings/app_settings_screen.dartlib/ui/settings/donate/donate_screen.dartlib/ui/settings/network/network_screen.dartlib/ui/settings/profile/edit_profile_screen.dartlib/ui/settings/profile_keys/profile_keys_screen.dart
📚 Learning: 2025-08-08T13:39:00.500Z
Learnt from: CR
PR: parres-hq/whitenoise_flutter#0
File: .cursor/rules/flutter.mdc:0-0
Timestamp: 2025-08-08T13:39:00.500Z
Learning: Applies to **/*.dart : Use the whitenoise rust crate (via flutter_rust_bridge) as the source of all data and only way to trigger changes in our data model.
Applied to files:
lib/ui/settings/app_settings/app_settings_screen.dart
📚 Learning: 2025-08-08T13:39:00.500Z
Learnt from: CR
PR: parres-hq/whitenoise_flutter#0
File: .cursor/rules/flutter.mdc:0-0
Timestamp: 2025-08-08T13:39:00.500Z
Learning: Applies to **/*.dart : Use flutter_rust_bridge to access core functionality of the app.
Applied to files:
lib/ui/settings/app_settings/app_settings_screen.dart
📚 Learning: 2025-09-01T14:56:50.988Z
Learnt from: josefinalliende
PR: parres-hq/whitenoise_flutter#568
File: lib/ui/core/ui/wn_image.dart:1-2
Timestamp: 2025-09-01T14:56:50.988Z
Learning: The whitenoise_flutter project does not target web platforms and any future web version would be in a separate repository, so dart:io imports and file system operations are acceptable in this codebase.
Applied to files:
lib/ui/settings/app_settings/app_settings_screen.dart
📚 Learning: 2025-08-08T13:39:00.500Z
Learnt from: CR
PR: parres-hq/whitenoise_flutter#0
File: .cursor/rules/flutter.mdc:0-0
Timestamp: 2025-08-08T13:39:00.500Z
Learning: Applies to **/*.dart : Use ThemeData to manage themes.
Applied to files:
lib/ui/settings/donate/donate_screen.dart
📚 Learning: 2025-08-08T13:39:00.500Z
Learnt from: CR
PR: parres-hq/whitenoise_flutter#0
File: .cursor/rules/flutter.mdc:0-0
Timestamp: 2025-08-08T13:39:00.500Z
Learning: Applies to **/*.dart : Use freezed to manage UI states.
Applied to files:
lib/ui/settings/profile/edit_profile_screen.dart
📚 Learning: 2025-09-07T02:15:31.931Z
Learnt from: josefinalliende
PR: parres-hq/whitenoise_flutter#594
File: lib/src/rust/api/utils.dart:12-16
Timestamp: 2025-09-07T02:15:31.931Z
Learning: The lingering PublicKey references in lib/config/providers/auth_provider.dart, lib/config/providers/group_provider.dart, and rust_builder/cargokit/build_tool/lib/src/options.dart identified during the utils.dart API cleanup were fixed in PR #597 in the whitenoise_flutter codebase.
Applied to files:
lib/ui/settings/profile_keys/profile_keys_screen.dart
🔇 Additional comments (12)
lib/ui/settings/donate/donate_screen.dart (2)
10-10: Import of WnAppBar is correct and aligns with the new header pattern.
36-60: Good migration to WnAppBar and neutral scaffold background.
Header is now consistent with other settings screens.lib/ui/settings/network/network_screen.dart (2)
10-10: WnAppBar import looks good.
162-162: Padding reads well.
Top 16.h and 16.w horizontal match the new layout rhythm.lib/ui/settings/app_settings/app_settings_screen.dart (2)
20-20: WnAppBar import is correct.
185-209: Consistent app bar implementation.
Leading/back and title styling match the shared pattern.lib/ui/settings/profile/edit_profile_screen.dart (3)
12-12: WnAppBar import OK.
97-121: Header consistency achieved.
Back behavior and typography match the new spec.
139-146: Outer vertical padding approach looks good.
Keeps content spacing consistent with other screens.lib/ui/settings/profile_keys/profile_keys_screen.dart (3)
10-10: WnAppBar import OK.
82-106: Header consistency achieved.
Matches other settings screens.
115-118: Padding structure looks correct.
Vertical 24.h with inner horizontal 16.w is consistent.
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 (1)
lib/ui/settings/profile_keys/profile_keys_screen.dart (1)
66-69: Dispose all controllersmissing: _publicKeyController.dispose(). Prevents leaks.
@override void dispose() { _privateKeyController.dispose(); + _publicKeyController.dispose(); super.dispose(); }
🧹 Nitpick comments (15)
lib/ui/settings/app_settings/app_settings_screen.dart (6)
36-36: Fix typo in dialog title"Delete app app data" → "Delete app data".
- title: 'Delete app app data', + title: 'Delete app data',
185-185: Remove redundant background paintingScaffold has a neutral background and the body wraps a ColoredBox with the same color. Drop one to avoid double paint.
- child: Scaffold( - backgroundColor: context.colors.neutral, + child: Scaffold( + backgroundColor: context.colors.neutral, appBar: WnAppBar( ... ), - body: SafeArea( + body: SafeArea( bottom: false, - child: ColoredBox( - color: context.colors.neutral, - child: Column( + child: Column( children: [Also applies to: 210-214
221-225: Use .h for vertical paddingVertical padding uses 24.w; should be 24.h.
- padding: EdgeInsets.only( - left: 16.w, - right: 16.w, - bottom: 24.w, - ), + padding: EdgeInsets.only( + left: 16.w, + right: 16.w, + bottom: 24.h, + ),
188-199: Drop unnecessary RepaintBoundary wrappers in the AppBarThey add layers without benefit here.
- leading: RepaintBoundary( - child: IconButton( - onPressed: () => context.pop(), - icon: WnImage( - AssetsPaths.icChevronLeft, - width: 24.w, - height: 24.w, - color: context.colors.solidPrimary, - ), - ), - ), - title: RepaintBoundary( - child: Text( - 'App Settings', - style: TextStyle( - fontSize: 18.sp, - fontWeight: FontWeight.w600, - color: context.colors.solidPrimary, - ), - ), - ), + leading: IconButton( + onPressed: () => context.pop(), + icon: WnImage( + AssetsPaths.icChevronLeft, + width: 24.w, + height: 24.w, + color: context.colors.solidPrimary, + ), + ), + title: Text( + 'App Settings', + style: TextStyle( + fontSize: 18.sp, + fontWeight: FontWeight.w600, + color: context.colors.solidPrimary, + ), + ),Also applies to: 199-209
34-36: Type annotate builder params per guidelinesAdd explicit types to closure parameters.
- builder: - (dialogContext) => WnDialog( + builder: (BuildContext dialogContext) => WnDialog( ... - builder: (_) => const Center(child: CircularProgressIndicator()), + builder: (BuildContext _) => const Center(child: CircularProgressIndicator()),Also applies to: 71-74
36-37: Localize user‑facing stringsMove strings to AppLocalizations (per project guidelines) for i18n.
Example:
- title: 'Delete app data', + title: AppLocalizations.of(context)!.deleteAppDataTitle, ... - label: 'Cancel', + label: AppLocalizations.of(context)!.cancel, ... - 'App Settings', + AppLocalizations.of(context)!.appSettingsTitle,Please confirm the app’s l10n access pattern (context.l10n vs AppLocalizations.of(context)!).
Also applies to: 42-42, 51-51, 91-96, 167-169, 201-206, 229-236, 246-251, 255-261
lib/ui/settings/profile/edit_profile_screen.dart (5)
97-97: Remove redundant background paintingSame color set on Scaffold and inner ColoredBox.
- child: Scaffold( - backgroundColor: context.colors.neutral, + child: Scaffold( + backgroundColor: context.colors.neutral, appBar: WnAppBar( ... ), - body: SafeArea( + body: SafeArea( bottom: false, - child: ColoredBox( - color: context.colors.neutral, - child: profileState.when( + child: profileState.when( ...Also applies to: 124-126
100-110: Drop unnecessary RepaintBoundary wrappers in the AppBarSimplify app bar.
- appBar: WnAppBar( - automaticallyImplyLeading: false, - leading: RepaintBoundary( - child: IconButton( + appBar: WnAppBar( + automaticallyImplyLeading: false, + leading: IconButton( onPressed: () => context.pop(), icon: WnImage( AssetsPaths.icChevronLeft, width: 24.w, height: 24.w, color: context.colors.solidPrimary, ), - ), - ), - title: RepaintBoundary( - child: Text( + ), + title: Text( 'Edit Profile', style: TextStyle( fontSize: 18.sp, fontWeight: FontWeight.w600, color: context.colors.solidPrimary, ), - ), - ), + ),Also applies to: 111-121
164-180: Center the edit icon reliablyAvoid manual left math; use Align + Padding for bottom-center placement.
- Positioned( - left: 1.sw * 0.5, - bottom: 4.h, - width: 28.w, - child: EditIconWidget( + Align( + alignment: Alignment.bottomCenter, + child: Padding( + padding: EdgeInsets.only(bottom: 4.h), + child: SizedBox( + width: 28.w, + child: EditIconWidget( onTap: () async { try { await ref .read(editProfileScreenProvider.notifier) .pickProfileImage(); } catch (e) { if (context.mounted) { ref.showErrorToast('Failed to pick profile image'); } } }, - ), - ), + ), + ), + ), + ),
150-152: Type annotate ValueListenableBuilder builder paramsMake parameter types explicit.
- builder: (context, value, child) { + builder: (BuildContext context, TextEditingValue value, Widget? child) {
113-119: Localize changed user‑visible stringsMove to AppLocalizations (titles, labels, hints).
Example:
- 'Edit Profile', + AppLocalizations.of(context)!.editProfileTitle, ... - hintText: 'Trent Reznor', + hintText: AppLocalizations.of(context)!.displayNameHint, ... - 'About You', + AppLocalizations.of(context)!.aboutYouLabel,Confirm the l10n accessor used in this project.
Also applies to: 175-176, 185-190, 194-201, 204-210, 213-220, 223-229, 232-242
lib/ui/settings/profile_keys/profile_keys_screen.dart (4)
82-82: Remove redundant background paintingSame neutral color set on Scaffold and inner ColoredBox.
- child: Scaffold( - backgroundColor: context.colors.neutral, + child: Scaffold( + backgroundColor: context.colors.neutral, appBar: WnAppBar( ... ), - body: SafeArea( + body: SafeArea( bottom: false, - child: ColoredBox( - color: context.colors.neutral, - child: Column( + child: Column( children: [Also applies to: 110-111
84-96: Drop unnecessary RepaintBoundary wrappers in the AppBarSimplify to reduce layer count.
- appBar: WnAppBar( - automaticallyImplyLeading: false, - leading: RepaintBoundary( - child: IconButton( + appBar: WnAppBar( + automaticallyImplyLeading: false, + leading: IconButton( onPressed: () => context.pop(), icon: WnImage( AssetsPaths.icChevronLeft, width: 24.w, height: 24.w, color: context.colors.solidPrimary, ), - ), - ), - title: RepaintBoundary( - child: Text( + ), + title: Text( 'Profile Keys', style: TextStyle( fontSize: 18.sp, fontWeight: FontWeight.w600, color: context.colors.solidPrimary, ), - ), - ), + ),Also applies to: 97-105
226-236: Add a11y tooltip to visibility toggleProvide assistive text for the eye icon.
- suffixIcon: IconButton( - onPressed: _togglePrivateKeyVisibility, + suffixIcon: IconButton( + tooltip: _obscurePrivateKey + ? 'Show private key' + : 'Hide private key', + onPressed: _togglePrivateKeyVisibility,
97-104: Localize user‑visible stringsMove titles, section labels, helper texts, and messages to AppLocalizations.
Example:
- 'Profile Keys', + AppLocalizations.of(context)!.profileKeysTitle, ... - 'Public Key', + AppLocalizations.of(context)!.publicKeyLabel, ... - 'Loading private key...', + AppLocalizations.of(context)!.loadingPrivateKey, ... - 'Keep your private key safe!', + AppLocalizations.of(context)!.keepPrivateKeySafeTitle,Please confirm the l10n accessor pattern in this codebase.
Also applies to: 123-128, 151-157, 160-166, 169-191, 194-215, 249-256, 283-299
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (4)
lib/ui/settings/app_settings/app_settings_screen.dart(2 hunks)lib/ui/settings/donate/donate_screen.dart(2 hunks)lib/ui/settings/profile/edit_profile_screen.dart(3 hunks)lib/ui/settings/profile_keys/profile_keys_screen.dart(2 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
- lib/ui/settings/donate/donate_screen.dart
🧰 Additional context used
📓 Path-based instructions (1)
**/*.dart
📄 CodeRabbit inference engine (.cursor/rules/flutter.mdc)
**/*.dart: Always declare the type of each variable and function (parameters and return value). Avoid using 'any'. Create necessary types.
Don't leave blank lines within a function.
One export per file.
Use PascalCase for classes.
Use camelCase for variables, functions, and methods.
Use underscores_case for file and directory names.
Use UPPERCASE for environment variables. Avoid magic numbers and define constants.
Start each function with a verb.
Use verbs for boolean variables. Example: isLoading, hasError, canDelete, etc.
Use complete words instead of abbreviations and correct spelling, except for standard and well-known abbreviations (API, URL, i, j, err, ctx, req, res, next).
Write short functions with a single purpose. Less than 20 instructions.
Name functions with a verb and something else. If it returns a boolean, use isX or hasX, canX, etc. If it doesn't return anything, use executeX or saveX, etc.
Avoid nesting blocks by early checks and returns, or extraction to utility functions.
Use higher-order functions (map, filter, reduce, etc.) to avoid function nesting. Use arrow functions for simple functions (less than 3 instructions). Use named functions for non-simple functions.
Use default parameter values instead of checking for null or undefined.
Reduce function parameters using RO-RO: use an object to pass multiple parameters and to return results. Declare necessary types for input arguments and output.
Use a single level of abstraction in functions.
Don't abuse primitive types and encapsulate data in composite types.
Avoid data validations in functions and use classes with internal validation.
Prefer immutability for data. Use readonly for data that doesn't change. Use 'as const' for literals that don't change.
Declare interfaces to define contracts.
Write small classes with a single purpose. Less than 200 instructions, less than 10 public methods, less than 10 properties.
Use exceptions to handle errors you don't expect. If you catch an exception, it sh...
Files:
lib/ui/settings/app_settings/app_settings_screen.dartlib/ui/settings/profile/edit_profile_screen.dartlib/ui/settings/profile_keys/profile_keys_screen.dart
🧠 Learnings (6)
📚 Learning: 2025-08-23T11:02:28.308Z
Learnt from: Quwaysim
PR: parres-hq/whitenoise_flutter#527
File: lib/ui/core/ui/wn_avatar.dart:1-6
Timestamp: 2025-08-23T11:02:28.308Z
Learning: In the whitenoise_flutter codebase, flutter_screenutil is re-exported through lib/ui/core/themes/src/app_theme.dart, so files that import app_theme.dart do not need to directly import flutter_screenutil to use .w, .h, .sp extensions.
Applied to files:
lib/ui/settings/app_settings/app_settings_screen.dartlib/ui/settings/profile/edit_profile_screen.dartlib/ui/settings/profile_keys/profile_keys_screen.dart
📚 Learning: 2025-08-08T13:39:00.500Z
Learnt from: CR
PR: parres-hq/whitenoise_flutter#0
File: .cursor/rules/flutter.mdc:0-0
Timestamp: 2025-08-08T13:39:00.500Z
Learning: Applies to **/*.dart : Use the whitenoise rust crate (via flutter_rust_bridge) as the source of all data and only way to trigger changes in our data model.
Applied to files:
lib/ui/settings/app_settings/app_settings_screen.dart
📚 Learning: 2025-08-08T13:39:00.500Z
Learnt from: CR
PR: parres-hq/whitenoise_flutter#0
File: .cursor/rules/flutter.mdc:0-0
Timestamp: 2025-08-08T13:39:00.500Z
Learning: Applies to **/*.dart : Use flutter_rust_bridge to access core functionality of the app.
Applied to files:
lib/ui/settings/app_settings/app_settings_screen.dart
📚 Learning: 2025-09-01T14:56:50.988Z
Learnt from: josefinalliende
PR: parres-hq/whitenoise_flutter#568
File: lib/ui/core/ui/wn_image.dart:1-2
Timestamp: 2025-09-01T14:56:50.988Z
Learning: The whitenoise_flutter project does not target web platforms and any future web version would be in a separate repository, so dart:io imports and file system operations are acceptable in this codebase.
Applied to files:
lib/ui/settings/app_settings/app_settings_screen.dart
📚 Learning: 2025-08-08T13:39:00.500Z
Learnt from: CR
PR: parres-hq/whitenoise_flutter#0
File: .cursor/rules/flutter.mdc:0-0
Timestamp: 2025-08-08T13:39:00.500Z
Learning: Applies to **/*.dart : Use freezed to manage UI states.
Applied to files:
lib/ui/settings/profile/edit_profile_screen.dart
📚 Learning: 2025-09-07T02:15:31.931Z
Learnt from: josefinalliende
PR: parres-hq/whitenoise_flutter#594
File: lib/src/rust/api/utils.dart:12-16
Timestamp: 2025-09-07T02:15:31.931Z
Learning: The lingering PublicKey references in lib/config/providers/auth_provider.dart, lib/config/providers/group_provider.dart, and rust_builder/cargokit/build_tool/lib/src/options.dart identified during the utils.dart API cleanup were fixed in PR #597 in the whitenoise_flutter codebase.
Applied to files:
lib/ui/settings/profile_keys/profile_keys_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: Flutter CI
🔇 Additional comments (2)
lib/ui/settings/app_settings/app_settings_screen.dart (1)
33-33: Verify transparent dialog barrierbarrierColor: Colors.transparent reduces focus on the modal. Confirm with design/UX.
lib/ui/settings/profile/edit_profile_screen.dart (1)
356-383: Remove or confirm unused FallbackProfileImageWidgetrg shows only its declaration at lib/ui/settings/profile/edit_profile_screen.dart:356–383 and no other references. If unused, delete the class; if it's intended for reuse, add a comment or export/reference it.
josefinalliende
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!
CleanShot.2025-09-22.at.17.36.36.mp4
Summary by CodeRabbit
Refactor
Style