Settings & Preferences
Feature Detail
Description
The Settings & Preferences feature provides a centralized screen where users can configure application-level preferences including notification settings, accessibility options, language, and account management actions. Settings are organized into logical card-based groups using the design token system for consistent styling. The screen is accessible from the hamburger menu on all tabs, ensuring users always have a clear path to personalization and account control regardless of their current context in the app.
Analysis
User control over preferences is a fundamental usability requirement and directly supports the accessibility mandate shared by all three organizations. Peer mentors with visual or cognitive impairments must be able to adjust font scale, contrast, and notification behavior from a single, easily discoverable location. Providing logout and account management within Settings reduces support burden and empowers users. The settings architecture also enables per-organization label customization (org labels system), which is required for NHF, Blindeforbundet, and HLF to each use their own terminology throughout the app.
Implemented as a Flutter screen with card-based sections using shared AppSettingsCard widgets driven by design tokens. Preferences are persisted locally using shared_preferences for immediate UI response and synced to the Supabase user profile for cross-device consistency via Riverpod async notifiers. The screen integrates with the accessibility_preferences and theme_configs tables in Supabase. Feature flags per organization are loaded at session start and stored in a Riverpod provider, enabling org-specific settings visibility. All interactive elements meet WCAG 2.2 AA touch target size (48×48dp minimum).
Dependencies
Definition of Done
Components (4)
User Stories (19)
As a As a user
I want I want to select my preferred app language from the Settings screen
So that So that I can use the app in the language I am most comfortable with, improving comprehension and reducing input errors
- Given I open the language settings card, when the screen loads, then I see the available language options with the current language pre-selected
- Given I select a different language, when I confirm the selection, then the app UI switches to the selected language immediately without requiring a restart
- Given I change the language preference, when I sign into the app on another device, then the same language preference is applied on that device
- +1 more
As a As a user
I want I want my saved preferences to be automatically available when I sign into the app on a different device
So that So that I do not need to reconfigure my settings every time I switch between devices or reinstall the app
- Given I have configured notification preferences on device A, when I sign into the app on device B, then the same notification preferences are applied without manual reconfiguration
- Given the app loads after sign-in and the device is online, when preferences are fetched from Supabase, then the remote preferences take precedence over any locally cached values
- Given the app loads after sign-in and the device is offline, when the remote fetch fails, then locally cached preferences are applied and a background sync is scheduled for when connectivity is restored
- +2 more
As a As a user
I want I want to select my preferred app language from the Settings screen
So that So that I can use the app in the language I am most comfortable with, improving comprehension and reducing input errors
- Given I open the language settings card, when the screen loads, then I see the available language options with the current language pre-selected
- Given I select a different language, when I confirm the selection, then the app UI switches to the selected language immediately without requiring a restart
- Given I change the language preference, when I sign into the app on another device, then the same language preference is applied on that device
- +1 more
As a As a user
I want I want my saved preferences to be automatically available when I sign into the app on a different device
So that So that I do not need to reconfigure my settings every time I switch between devices or reinstall the app
- Given I have configured notification preferences on device A, when I sign into the app on device B, then the same notification preferences are applied without manual reconfiguration
- Given the app loads after sign-in and the device is online, when preferences are fetched from Supabase, then the remote preferences take precedence over any locally cached values
- Given the app loads after sign-in and the device is offline, when the remote fetch fails, then locally cached preferences are applied and a background sync is scheduled for when connectivity is restored
- +2 more
As a As a user
I want I want to select my preferred app language from the Settings screen
So that So that I can use the app in the language I am most comfortable with, improving comprehension and reducing input errors
- Given I open the language settings card, when the screen loads, then I see the available language options with the current language pre-selected
- Given I select a different language, when I confirm the selection, then the app UI switches to the selected language immediately without requiring a restart
- Given I change the language preference, when I sign into the app on another device, then the same language preference is applied on that device
- +1 more
As a As a user
I want I want my saved preferences to be automatically available when I sign into the app on a different device
So that So that I do not need to reconfigure my settings every time I switch between devices or reinstall the app
- Given I have configured notification preferences on device A, when I sign into the app on device B, then the same notification preferences are applied without manual reconfiguration
- Given the app loads after sign-in and the device is online, when preferences are fetched from Supabase, then the remote preferences take precedence over any locally cached values
- Given the app loads after sign-in and the device is offline, when the remote fetch fails, then locally cached preferences are applied and a background sync is scheduled for when connectivity is restored
- +2 more
As a As a Organization Administrator
I want I want to see settings sections that are specific to my organization's configuration, including org-label customization and integration status shortcuts
So that So that I can quickly access organization-level configuration options relevant to my role without navigating through sections that do not apply to my organization
- Given I am an Organization Administrator and my organization has org-label customization enabled, when I open Settings, then a settings card for organization labels is visible
- Given I am a Peer Mentor or Coordinator, when I open Settings, then organization-administration-specific settings cards (such as org labels, integration shortcuts) are not shown
- Given organization feature flags are loaded at session start, when the Settings screen renders, then the visible settings sections match the enabled features for my organization without any additional network request
- +2 more
As a As a user
I want I want to sign out of my account from the Settings screen
So that So that I can securely end my session, especially when using a shared or public device
- Given I tap the sign-out action in Settings, when the action is triggered, then a confirmation dialog appears asking me to confirm sign-out
- Given I confirm sign-out, when the action completes, then my Supabase session is invalidated and I am navigated to the login screen
- Given I confirm sign-out, when the action completes, then no sensitive user data remains accessible in the app without re-authentication
- +2 more
As a As a user
I want I want to find and open accessibility configuration options directly from the Settings screen
So that So that I can adjust font size, contrast, and other accessibility options from a single, easily discoverable location without searching through the app
- Given I open the Settings screen, when I view the accessibility card, then I can see a summary of my currently active accessibility settings (font size level, contrast mode status)
- Given I tap the accessibility card, when the navigation occurs, then I am taken to the full accessibility settings screen
- Given the Settings screen is rendered with an active large-text or high-contrast preference, when the screen displays, then the Settings screen itself respects those preferences (font size, contrast)
- +2 more
As a As a user
I want I want to configure which types of push notifications I receive and how frequently
So that So that I can control notification noise while ensuring I still receive alerts that matter to my role
- Given I open the notifications settings section, when the screen loads, then I see a list of toggleable notification categories relevant to my role
- Given I toggle a notification type off, when the change is saved, then I no longer receive push notifications of that type
- Given I toggle a notification type on, when the change is saved, then push notifications of that type resume immediately
- +2 more
As a As a user
I want I want to sign out of my account from the Settings screen
So that So that I can securely end my session, especially when using a shared or public device
- Given I tap the sign-out action in Settings, when the action is triggered, then a confirmation dialog appears asking me to confirm sign-out
- Given I confirm sign-out, when the action completes, then my Supabase session is invalidated and I am navigated to the login screen
- Given I confirm sign-out, when the action completes, then no sensitive user data remains accessible in the app without re-authentication
- +2 more
As a As a user
I want I want to find and open accessibility configuration options directly from the Settings screen
So that So that I can adjust font size, contrast, and other accessibility options from a single, easily discoverable location without searching through the app
- Given I open the Settings screen, when I view the accessibility card, then I can see a summary of my currently active accessibility settings (font size level, contrast mode status)
- Given I tap the accessibility card, when the navigation occurs, then I am taken to the full accessibility settings screen
- Given the Settings screen is rendered with an active large-text or high-contrast preference, when the screen displays, then the Settings screen itself respects those preferences (font size, contrast)
- +2 more
As a As a user
I want I want to configure which types of push notifications I receive and how frequently
So that So that I can control notification noise while ensuring I still receive alerts that matter to my role
- Given I open the notifications settings section, when the screen loads, then I see a list of toggleable notification categories relevant to my role
- Given I toggle a notification type off, when the change is saved, then I no longer receive push notifications of that type
- Given I toggle a notification type on, when the change is saved, then push notifications of that type resume immediately
- +2 more
As a As a user
I want I want to sign out of my account from the Settings screen
So that So that I can securely end my session, especially when using a shared or public device
- Given I tap the sign-out action in Settings, when the action is triggered, then a confirmation dialog appears asking me to confirm sign-out
- Given I confirm sign-out, when the action completes, then my Supabase session is invalidated and I am navigated to the login screen
- Given I confirm sign-out, when the action completes, then no sensitive user data remains accessible in the app without re-authentication
- +2 more
As a As a user
I want I want to find and open accessibility configuration options directly from the Settings screen
So that So that I can adjust font size, contrast, and other accessibility options from a single, easily discoverable location without searching through the app
- Given I open the Settings screen, when I view the accessibility card, then I can see a summary of my currently active accessibility settings (font size level, contrast mode status)
- Given I tap the accessibility card, when the navigation occurs, then I am taken to the full accessibility settings screen
- Given the Settings screen is rendered with an active large-text or high-contrast preference, when the screen displays, then the Settings screen itself respects those preferences (font size, contrast)
- +2 more
As a As a user
I want I want to configure which types of push notifications I receive and how frequently
So that So that I can control notification noise while ensuring I still receive alerts that matter to my role
- Given I open the notifications settings section, when the screen loads, then I see a list of toggleable notification categories relevant to my role
- Given I toggle a notification type off, when the change is saved, then I no longer receive push notifications of that type
- Given I toggle a notification type on, when the change is saved, then push notifications of that type resume immediately
- +2 more
As a As a user
I want I want to open the Settings screen by tapping the hamburger menu from any tab in the app
So that So that I can always reach my preferences and account controls regardless of where I am in the app
- Given I am on any tab of the app, when I tap the hamburger menu icon, then the Settings screen opens without navigating away from my current tab state
- Given the Settings screen is open, when I view the screen, then settings are grouped into logical card sections (notifications, accessibility, language, account management)
- Given the Settings screen is open, when I interact with any tappable element, then the touch target is at least 48×48dp in all cases
- +2 more
As a As a user
I want I want to open the Settings screen by tapping the hamburger menu from any tab in the app
So that So that I can always reach my preferences and account controls regardless of where I am in the app
- Given I am on any tab of the app, when I tap the hamburger menu icon, then the Settings screen opens without navigating away from my current tab state
- Given the Settings screen is open, when I view the screen, then settings are grouped into logical card sections (notifications, accessibility, language, account management)
- Given the Settings screen is open, when I interact with any tappable element, then the touch target is at least 48×48dp in all cases
- +2 more
As a As a user
I want I want to open the Settings screen by tapping the hamburger menu from any tab in the app
So that So that I can always reach my preferences and account controls regardless of where I am in the app
- Given I am on any tab of the app, when I tap the hamburger menu icon, then the Settings screen opens without navigating away from my current tab state
- Given the Settings screen is open, when I view the screen, then settings are grouped into logical card sections (notifications, accessibility, language, account management)
- Given the Settings screen is open, when I interact with any tappable element, then the touch target is at least 48×48dp in all cases
- +2 more