Skip to content

Commit 805b714

Browse files
committed
feat: refactor: load accessibility cards lazily
1 parent 2ffe1fe commit 805b714

File tree

1 file changed

+75
-84
lines changed

1 file changed

+75
-84
lines changed

lib/features/digital_guide/presentation/widgets/accessibility_information_cards_list.dart

Lines changed: 75 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -68,90 +68,15 @@ class AccessibilityInformationCardsList extends HookConsumerWidget {
6868
Widget buildCards(ISet<ModeWithKey> modesToRender) {
6969
if (modesToRender.isEmpty) return const SizedBox.shrink();
7070

71-
final cards = {
72-
// Card for blind accessibility
73-
const Blind(): AccessibilityInformationCard(
74-
icon: Assets.svg.digitalGuide.accessibilityAlerts.blindProfile,
75-
color: DigitalGuideConfig.accessibilityLevelColors[accLevels.accessibilityLevelForBlind],
76-
text:
77-
accComments?.commentForBlind ??
78-
context.localize.accessibility_card_information(
79-
prefix,
80-
accessibilityLevelType(accLevels.accessibilityLevelForBlind.toString()),
81-
context.localize.people_blind,
82-
),
83-
),
84-
85-
// Card for visually impaired
86-
const LowVision(): AccessibilityInformationCard(
87-
icon: Assets.svg.digitalGuide.accessibilityAlerts.visuallyImpaired,
88-
color: DigitalGuideConfig.accessibilityLevelColors[accLevels.accessibilityLevelForVisuallyImpaired],
89-
text:
90-
accComments?.commentForVisuallyImpaired ??
91-
context.localize.accessibility_card_information(
92-
prefix,
93-
accessibilityLevelType(accLevels.accessibilityLevelForVisuallyImpaired.toString()),
94-
context.localize.people_visually_impaired,
95-
),
96-
),
97-
98-
// Card for motor disabilities
99-
const MotorImpairment(): AccessibilityInformationCard(
100-
icon: Assets.svg.digitalGuide.accessibilityAlerts.movementDysfunction,
101-
color: DigitalGuideConfig.accessibilityLevelColors[accLevels.accessibilityLevelForMotorDisability],
102-
text:
103-
accComments?.commentForMotorDisability ??
104-
context.localize.accessibility_card_information(
105-
prefix,
106-
accessibilityLevelType(accLevels.accessibilityLevelForMotorDisability.toString()),
107-
context.localize.people_with_motor_disability,
108-
),
109-
),
110-
111-
// Card for cognitive difficulties
112-
const CognitiveImpairment(): AccessibilityInformationCard(
113-
icon: Assets.svg.digitalGuide.accessibilityAlerts.cognitiveDifficulties,
114-
color: DigitalGuideConfig.accessibilityLevelColors[accLevels.accessibilityLevelForCognitiveDifficulties],
115-
text:
116-
accComments?.commentForCognitiveDifficulties ??
117-
context.localize.accessibility_card_information(
118-
prefix,
119-
accessibilityLevelType(accLevels.accessibilityLevelForCognitiveDifficulties.toString()),
120-
context.localize.people_with_cognitive_difficulties,
121-
),
122-
),
123-
124-
// Card for hard of hearing
125-
const HearingImpairment(): AccessibilityInformationCard(
126-
icon: Assets.svg.digitalGuide.accessibilityAlerts.hearingDysfunction,
127-
color: DigitalGuideConfig.accessibilityLevelColors[accLevels.accessibilityLevelForHardOfHearing],
128-
text:
129-
accComments?.commentForHardOfHearing ??
130-
context.localize.accessibility_card_information(
131-
prefix,
132-
accessibilityLevelType(accLevels.accessibilityLevelForHardOfHearing.toString()),
133-
context.localize.people_with_hard_of_hearing,
134-
),
135-
),
136-
137-
// Card for high sensory sensitivity
138-
const SensorySensitivity(): AccessibilityInformationCard(
139-
icon: Assets.svg.digitalGuide.accessibilityAlerts.sensorySensitivity,
140-
color: DigitalGuideConfig.accessibilityLevelColors[accLevels.accessibilityLevelForHighSensorySensitivity],
141-
text:
142-
accComments?.commentForHighSensorySensitivity ??
143-
context.localize.accessibility_card_information(
144-
prefix,
145-
accessibilityLevelType(accLevels.accessibilityLevelForHighSensorySensitivity.toString()),
146-
context.localize.people_with_high_sensory_sensitivity,
147-
),
148-
),
149-
};
71+
final cards = _getCardsMap(
72+
context,
73+
levels: accLevels,
74+
comments: accComments,
75+
prefix: prefix,
76+
accessibilityLevelType: accessibilityLevelType,
77+
);
15078

151-
final widgets = modesToRender
152-
.map((m) => cards[m])
153-
.whereType<AccessibilityInformationCard>()
154-
.toList(growable: false);
79+
final widgets = modesToRender.map((m) => cards[m]).whereType<AccessibilityInformationCard>().toList();
15580

15681
return Padding(
15782
padding: padding,
@@ -169,7 +94,73 @@ class AccessibilityInformationCardsList extends HookConsumerWidget {
16994
return currentModesAsync.when(
17095
loading: () => buildCards(cache),
17196
error: (error, stack) => Center(child: Text("Error: $error")),
172-
data: (modes) => modes.isEmpty ? const SizedBox.shrink() : buildCards(modes),
97+
data: buildCards,
17398
);
17499
}
100+
101+
Map<ModeWithKey, AccessibilityInformationCard> _getCardsMap(
102+
BuildContext context, {
103+
required AccessibilityInformationLevelsInput levels,
104+
required AccessibilityInformationOptionalCommentsInput? comments,
105+
required String prefix,
106+
required String Function(String) accessibilityLevelType,
107+
}) {
108+
AccessibilityInformationCard createCard({
109+
required String icon,
110+
required int level,
111+
required String? comment,
112+
required String peopleLabel,
113+
}) {
114+
return AccessibilityInformationCard(
115+
icon: icon,
116+
color: DigitalGuideConfig.accessibilityLevelColors[level],
117+
text:
118+
comment ??
119+
context.localize.accessibility_card_information(
120+
prefix,
121+
accessibilityLevelType(level.toString()),
122+
peopleLabel,
123+
),
124+
);
125+
}
126+
127+
return {
128+
const MotorImpairment(): createCard(
129+
icon: Assets.svg.digitalGuide.accessibilityAlerts.movementDysfunction,
130+
level: levels.accessibilityLevelForMotorDisability,
131+
comment: comments?.commentForMotorDisability,
132+
peopleLabel: context.localize.people_with_motor_disability,
133+
),
134+
const Blind(): createCard(
135+
icon: Assets.svg.digitalGuide.accessibilityAlerts.blindProfile,
136+
level: levels.accessibilityLevelForBlind,
137+
comment: comments?.commentForBlind,
138+
peopleLabel: context.localize.people_blind,
139+
),
140+
const LowVision(): createCard(
141+
icon: Assets.svg.digitalGuide.accessibilityAlerts.visuallyImpaired,
142+
level: levels.accessibilityLevelForVisuallyImpaired,
143+
comment: comments?.commentForVisuallyImpaired,
144+
peopleLabel: context.localize.people_visually_impaired,
145+
),
146+
const CognitiveImpairment(): createCard(
147+
icon: Assets.svg.digitalGuide.accessibilityAlerts.cognitiveDifficulties,
148+
level: levels.accessibilityLevelForCognitiveDifficulties,
149+
comment: comments?.commentForCognitiveDifficulties,
150+
peopleLabel: context.localize.people_with_cognitive_difficulties,
151+
),
152+
const HearingImpairment(): createCard(
153+
icon: Assets.svg.digitalGuide.accessibilityAlerts.hearingDysfunction,
154+
level: levels.accessibilityLevelForHardOfHearing,
155+
comment: comments?.commentForHardOfHearing,
156+
peopleLabel: context.localize.people_with_hard_of_hearing,
157+
),
158+
const SensorySensitivity(): createCard(
159+
icon: Assets.svg.digitalGuide.accessibilityAlerts.sensorySensitivity,
160+
level: levels.accessibilityLevelForHighSensorySensitivity,
161+
comment: comments?.commentForHighSensorySensitivity,
162+
peopleLabel: context.localize.people_with_high_sensory_sensitivity,
163+
),
164+
};
165+
}
175166
}

0 commit comments

Comments
 (0)