Use this file to discover all available pages before exploring further.
All data in ErgoKawsay is defined as immutable Dart value classes inside lib/data/models/. Every model is const-constructable, carries parallel Es / Qu fields for bilingual content, and exposes convenience accessors such as name(bool isKichwa) that return the correct language variant at call sites. These classes are the building blocks consumed by LocalDataRepository (which vends all static content) and StorageService (which persists user state via SharedPreferences).
Defined in lib/data/models/exercise.dart. Represents a single timed
physical exercise belonging to an ExerciseCategory.
Field
Type
Description
id
String
Unique identifier, e.g. "neck_1"
categoryId
String
Maps to an ExerciseCategory.id
nameEs
String
Exercise name in Spanish
nameQu
String
Exercise name in Kichwa
descriptionEs
String
Instructions in Spanish
descriptionQu
String
Instructions in Kichwa
durationSeconds
int
Timer duration for the exercise
imageAsset
String?
Optional local asset path for an illustration
imageUrl
String?
Optional remote image URL
videoUrl
String?
Optional associated video URL
stepsEs
List<String>?
Ordered step-by-step instructions in Spanish (nullable)
stepsQu
List<String>?
Ordered step-by-step instructions in Kichwa (nullable)
Convenience methods
Method
Returns
name(bool isKichwa)
nameQu if isKichwa, else nameEs
description(bool isKichwa)
descriptionQu if isKichwa, else descriptionEs
steps(bool isKichwa)
Bilingual steps list; falls back to [description] if null or empty
ExerciseCategory
Defined in lib/data/models/exercise.dart (same file as Exercise).
Groups exercises by body region and drives the category filter UI in
ExercisesScreen.
Field
Type
Description
id
String
Unique identifier, e.g. "neck", "shoulders", "vision"
Defined in lib/data/models/disease.dart. Describes an occupational
musculoskeletal disease relevant to teachers, with structured clinical
content across five sections.
Field
Type
Description
id
String
Unique identifier, e.g. "carpal_tunnel"
nameEs / nameQu
String
Disease name in Spanish / Kichwa
descriptionEs / descriptionQu
String
What the disease is
causeEs / causeQu
String
Primary occupational cause
warningEs / warningQu
String
Early warning signs
consultEs / consultQu
String
When to seek medical attention
Convenience methods
Method
Returns
name(bool isKichwa)
Bilingual disease name
description(bool isKichwa)
Bilingual description
cause(bool isKichwa)
Bilingual cause
warning(bool isKichwa)
Bilingual warning signs
consult(bool isKichwa)
Bilingual consult guidance
Emotion
Defined in lib/data/models/emotion.dart. Represents a teacher-relevant
emotional state with psycho-educational content, a colour identity, and a
named character illustration.
Field
Type
Description
id
String
Unique identifier, e.g. "anger", "joy"
nameEs / nameQu
String
Emotion name
whatIsEs / whatIsQu
String
Brief description of the emotion
causesTitleEs / causesTitleQu
String?
Optional section heading for causes
causesEs / causesQu
String
Newline-separated causes or signals; may be an empty string (e.g. anxiety has no listed causes)
actionsTitleEs / actionsTitleQu
String?
Optional section heading for coping actions
actionsEs / actionsQu
String
Newline-separated coping strategies; may be an empty string (e.g. joy has no listed actions)
phraseEs / phraseQu
String
Affirmation or motivational phrase
colorHex
int
ARGB colour value (0xAARRGGBB) for theming the emotion card
iconName
String
Icon key for the emotion chip/icon widget
imageAsset
String?
Path in assets/emotions/ for the character illustration
Convenience methods
Method
Returns
name(bool isKichwa)
Bilingual emotion name
whatIs(bool isKichwa)
Bilingual description
causesTitle(bool isKichwa)
Bilingual causes section title (nullable)
causes(bool isKichwa)
Bilingual causes string
actionsTitle(bool isKichwa)
Bilingual actions section title (nullable)
actions(bool isKichwa)
Bilingual coping actions string
phrase(bool isKichwa)
Bilingual affirmation
Built-in emotions:anger, sadness, joy, fear, anxiety — each mapped to a named character (Rumirumi, YAKU, Inti, Tutam, Chaskym).
ActiveBreakStep
Defined in lib/data/models/active_break_step.dart. A single step inside
the guided active-break sequence. Five steps form a complete break session
(ActiveBreaksScreen).
Defined in lib/data/models/tip.dart. An ergonomic or wellness tip shown
in TipsScreen and as the daily tip on the home screen.
Field
Type
Description
id
String
Unique identifier, e.g. "chair_desk"
titleEs / titleQu
String
Short tip title
contentEs / contentQu
String
Full tip body text
iconName
String
Icon key for the tip illustration
Convenience methods:title(bool isKichwa), content(bool isKichwa).Built-in tips:chair_desk, blackboard, laptop, vary_tasks, posture, footwear. The daily tip is selected by LocalDataRepository.tipOfDay() using day-of-year modulo rotation.
MusicTrack
Defined in lib/data/models/music_track.dart. Describes an ambient audio
track playable by AudioController via the just_audio package.
Field
Type
Description
id
String
Unique identifier, e.g. "forest"
titleEs / titleQu
String
Track title
descriptionEs / descriptionQu
String
Short description
assetPath
String
Flutter asset path (e.g. assets/audio/Sonido-del-bosque.mp3); used when isAsset is true
isAsset
bool
true → load from Flutter assets via assetPath; false → stream from url
url
String?
Remote URL (used when isAsset is false)
Convenience methods:title(bool isKichwa), description(bool isKichwa).Built-in tracks:forest (Sonido del Bosque), rain (Lluvia Suave), energizing (Música Energizante) — all bundled as local assets.
VideoItem
Defined in lib/data/models/video_item.dart. Represents a video resource
playable via video_player. Videos are bundled as local assets.
Computed property:hasMedia → true if either assetPath or url is non-null and non-empty.Convenience methods:title(bool isKichwa), description(bool isKichwa).Built-in videos:ergo_posture (Ergonomía — Postura Correcta), yoga_10 (5 Minutos de Yoga).
ProgressData
Defined in lib/data/models/progress_data.dart. Tracks the user’s
activity across exercises, active breaks, mood check-ins, and calendar
usage. Persisted to SharedPreferences as JSON via StorageService.
Field
Type
Description
exercisesCompleted
int
Total exercise sessions completed
activeBreaksCompleted
int
Total active break sequences completed
usageDays
List<String>
ISO 8601 date strings (YYYY-MM-DD) for days the app was opened
emotionsRecorded
Map<String, int>
emotionId → count of mood check-ins
lastUsedDate
DateTime?
Timestamp of the most recent app session
Computed property:totalEmotionsRecorded → sum of all emotion check-in counts.Factory constructors and methods
Method
Description
ProgressData.empty()
Zero-value instance for first launch
copyWith({...})
Returns a new instance with overridden fields
toJson()
Serialises to Map<String, dynamic>
ProgressData.fromJson(Map)
Deserialises from JSON; null-safe with defaults
ReminderSettings
Defined in lib/data/models/reminder_settings.dart. Configures the
notification scheduler in NotificationService. Persisted as JSON.
Field
Type
Default
Description
notificationsActive
bool
true
Master toggle for all notifications
breakFrequencyMinutes
int
60
How often active-break reminders fire
dailyExerciseHour
int
7
Hour of day for the daily exercise reminder (24 h)
Static constant:ReminderSettings.allTypes lists all five reminder type keys.Factory constructors and methods
Method
Description
ReminderSettings.defaults()
Returns the out-of-box configuration
copyWith({...})
Immutable update
toJson()
Serialises to Map<String, dynamic>
ReminderSettings.fromJson(Map)
Deserialises; null-safe with defaults
AccessibilitySettings
Defined in lib/data/models/accessibility_settings.dart. Controls
display accessibility preferences applied globally via AccessibilityController.
Field
Type
Default
Description
textSize
TextSizeOption
normal
Enum: normal (1.0×), large (1.18×), extraLarge (1.38×)
colorBlind
bool
false
Enables a deuteranopia ColorFilter.matrix over the entire app
Computed property:textScale → resolves TextSizeOption to a double multiplier used by MediaQuery.textScaler.Factory constructors and methods
Method
Description
AccessibilitySettings.fromJsonString(String?)
Parses from a JSON string; returns defaults on null or parse error
copyWith({...})
Immutable update
toJson()
Serialises to Map<String, dynamic>
AccessibilitySettings.fromJson(Map)
Deserialises; null-safe
ModuleItem
Defined in lib/data/models/module_item.dart. Represents a navigable
feature module shown in the home screen grid, carousels, and bottom
navigation. Requires home_category.dart.
Field
Type
Description
id
String
Unique identifier, e.g. "ergonomics", "music"
titleEs / titleQu
String
Module display title
subtitleEs / subtitleQu
String?
Optional subtitle shown under the title
icon
IconData
Material icon for the module card
route
String
Named route, e.g. "/ergonomics"
color
Color
Accent colour for the module card
homeCategory
HomeCategory
Section on the home screen: today, body, mind, or learn
thumbnailAsset
String?
Local asset path for a card thumbnail image
thumbnailUrl
String?
Remote URL for a card thumbnail image
Convenience methods
Method
Returns
title(bool isKichwa)
Bilingual module title
subtitle(bool isKichwa)
Bilingual subtitle; falls back to subtitleEs for Kichwa if subtitleQu is null
LocalDataRepository is a private-constructor singleton (LocalDataRepository.instance) that vends all static content as typed Dart getters. There is no database — all data is defined inline as const object literals compiled into the app binary.