User Interface low complexity mobile
1
Dependencies
1
Dependents
1
Entities
0
Integrations

Description

Wizard step 1 that presents available activity types as selectable chips or list items. Pre-selects the most recently used activity type from local preferences so that the common case (repeat activity) requires zero cognitive effort and potentially zero interaction to advance.

Feature: Quick Activity Registration

activity-type-step

Summaries

The Activity Type Selection Step directly reduces friction at the most critical point of the registration workflow — the very first decision a user makes. By pre-selecting the most recently used activity type from local preferences, the system eliminates cognitive load for repeat users, who represent the vast majority of daily interactions. This translates to faster task completion, higher registration completion rates, and reduced user frustration. In competitive terms, zero-interaction advancement for common cases is a measurable UX differentiator that drives retention and positions the product as operationally efficient for its target audience.

This component is classified as low complexity and represents a self-contained wizard step with a single Cubit dependency, making it straightforward to scope and deliver. Development effort is minimal, but thorough testing is required across device sizes and accessibility scenarios, including screen-reader navigation and focus indicator visibility. The pre-selection logic relies on reading local preferences, which must be confirmed stable before this step can be considered complete. No blocking external dependencies exist, but coordination with the activity-registration-cubit team is needed to align on the selection event contract.

Risk is low; the main delivery concern is ensuring accessibility compliance is validated early.

Activity Type Selection Step is a stateless UI widget that receives a list of ActivityType models and an optional preselectedId at build time, delegating all state mutations to activity-registration-cubit via the onTypeSelected callback. The build() method renders activity types as tappable chips or list items and calls scrollToPreselected() on mount to ensure the pre-filled option is visible without user scrolling. getDisplayLabel() abstracts display string resolution, keeping rendering logic decoupled from model internals. Accessibility requires ARIA-equivalent semantics in Flutter — use Semantics widgets with explicit labels and focus traversal order.

Local preference reads should be done in the Cubit, not in this widget, to keep the widget pure and testable in isolation.

Responsibilities

  • Display all valid activity types for the current organisation
  • Pre-select the last-used activity type on mount
  • Emit selection event to Cubit on tap
  • Show accessible focus indicators for screen-reader navigation

Interfaces

build(List<ActivityType> types, String? preselectedId)
onTypeSelected(ActivityType type)
getDisplayLabel(ActivityType type)
scrollToPreselected()

Relationships

Dependencies (1)

Components this component depends on

Dependents (1)

Components that depend on this component

Related Data Entities (1)

Data entities managed by this component