ss2kconfigapp is a Flutter-based mobile application for controlling and configuring SmartSpin2k devices. It provides a comprehensive interface for device management, workout control, and performance monitoring. The app integrates Bluetooth connectivity, workout tracking, and firmware management capabilities.
-
Device Management:
- Bluetooth device discovery and connection
- Device configuration and settings
- Firmware updates (OTA via WiFi/BLE)
- Power and resistance control
-
Workout Features:
- Structured workout execution
- Real-time performance metrics
- Power-based training zones
- FIT file export
- Workout library management
-
User Interface:
- Metric displays for power, cadence, heart rate
- Interactive power graphs
- Device status indicators
- Settings configuration
- Workout visualization
-
Data Management:
- Bluetooth communication protocol
- FIT file generation
- Workout file parsing
- Settings persistence
- Performance data tracking
The codebase is organized into screens, widgets, and utilities, with clear separation of concerns and modular architecture. Each component is designed for reusability and maintainability, with comprehensive error handling and user feedback mechanisms.
- Purpose: Application entry point and root widget setup
- Major Functions:
main()
: Initializes the app, loads theme, and starts the root widgetSmartSpin2kApp
: Root widget that manages Bluetooth state and theme_SmartSpin2kAppState
: Manages Bluetooth adapter state and screen transitionsBluetoothAdapterStateObserver
: Monitors Bluetooth state changes and handles navigation
- References:
flutter_blue_plus
screens/bluetooth_off_screen.dart
screens/scan_screen.dart
assets/appainter_theme.json
- Purpose: Displays a screen when Bluetooth is disabled or unavailable
- Major Functions:
BluetoothOffScreen
: Main widget for Bluetooth disabled statebuildBluetoothOffIcon()
: Renders a large Bluetooth disabled iconbuildTitle()
: Displays current Bluetooth adapter statebuildTurnOnButton()
: Creates a button to enable Bluetooth (Android only)
- References:
flutter_blue_plus
package for Bluetooth functionality../utils/snackbar.dart
for error notifications- Platform-specific code for Android Bluetooth control
- Purpose: Manages device firmware updates with support for both WiFi and Bluetooth (BLE) update methods
- Major Functions:
FirmwareUpdateScreen
: Main widget for firmware update interface_initialize()
: Sets up OTA package and fetches firmware versionsstartFirmwareUpdate()
: Handles firmware update process via WiFi or BLE_fetchGithubFirmwareVersion()
: Retrieves latest stable firmware version_fetchBetaFirmwareVersion()
: Retrieves latest beta firmware version_downloadAndExtractBetaFirmware()
: Downloads and extracts beta firmware_isNewerVersion()
: Compares firmware version numbersupdateProgress()
: Calculates and updates progress indicators_showUploadCompleteDialog()
: Displays update completion status
- References:
../utils/bleOTA.dart
for Bluetooth OTA updates../utils/wifi_ota.dart
for WiFi OTA updates../utils/bledata.dart
for Bluetooth data management../widgets/device_header.dart
for device information display- External packages: flutter_blue_plus, wakelock_plus, flutter_archive
- Purpose: Main interface for device control
- Major Functions: This screen provides the main page that links to the other screens.
- References: [To be documented]
- Purpose: Displays and visualizes power-resistance relationships through an interactive chart
- Major Functions:
PowerTableScreen
: Main widget for power data visualization_buildChart()
: Creates interactive line chart showing power curvesrequestAllCadenceLines()
: Fetches power table data for different cadencescalculateMaxResistance()
: Determines maximum resistance value from data_updatePositionHistory()
: Tracks and updates current power/resistance positiongetCadenceColor()
: Maps cadence values to colors for visual feedbackgetInterpolatedCadenceColor()
: Provides smooth color transitions between cadence ranges_createLineBarsData()
: Generates line chart data for different cadences_buildLegend()
: Creates chart legend showing cadence-color mapping
- References:
utils/constants.dart
for application constantsutils/bledata.dart
for Bluetooth data managementutils/extra.dart
for utility functionswidgets/metric_card.dart
for metric display- External packages: fl_chart for data visualization, flutter_blue_plus
- Purpose: Handles Bluetooth device discovery and connection initialization
- Major Functions:
ScanScreen
: Main widget for device scanning interfaceonScanPressed()
: Initiates Bluetooth device scanning with specific service filtersonStopPressed()
: Stops the current scanning processonConnectPressed()
: Handles device connection and navigation to main screen_buildScanResultTiles()
: Creates list of discovered devicesonDemoModePressed()
: Enables demo mode with simulated device_incrementTapCount()
: Manages hidden demo mode activation (5 taps)buildScanButton()
: Creates scan control button with dynamic stateonRefresh()
: Handles pull-to-refresh scanning functionality
- References:
utils/constants.dart
for Bluetooth service UUIDsutils/snackbar.dart
for error notificationsutils/extra.dart
for utility functionsutils/demo.dart
for demo mode functionalitywidgets/scan_result_tile.dart
for device list itemsscreens/main_device_screen.dart
for post-connection navigation- External package: flutter_blue_plus
- Purpose: Manages device configuration and settings interface
- Major Functions:
SettingsScreen
: Main widget for device settings managementbuildSettings()
: Dynamically generates settings UI elements from device characteristics_rwListner()
: Handles read/write state changes with debouncing_newEntry()
: Creates individual setting entries from device characteristicsinitState()
: Sets up device data management and simulated mode handling
- References:
widgets/setting_tile.dart
for individual setting controlswidgets/device_header.dart
for device information displayutils/snackbar.dart
for user notificationsutils/bledata.dart
for Bluetooth data management- External package: flutter_blue_plus
- Purpose: Provides virtual shifting interface for controlling gear positions
- Major Functions:
ShifterScreen
: Main widget for virtual shifter controlsshift()
: Handles gear position changes and device updates_buildShiftButton()
: Creates customized shift control buttons_buildGearDisplay()
: Renders current gear position indicator_rwListner()
: Manages real-time data updates with debouncingrwSubscription()
: Sets up device connection monitoringinitState()
: Initializes shifter state and demo mode handling
- References:
utils/constants.dart
for shifter-related constantsutils/bledata.dart
for Bluetooth data managementutils/extra.dart
for utility functionswidgets/device_header.dart
for device information displaywidgets/metric_card.dart
for performance metrics display- External packages: flutter_blue_plus, wakelock_plus
- Purpose: Main workout interface for executing and managing structured workouts
- Major Functions:
WorkoutScreen
: Primary widget for workout execution and visualization_loadDefaultWorkout()
: Loads and initializes default workout content_showStopWorkoutDialog()
: Handles workout termination with user confirmation_buildWorkoutSummary()
: Creates workout statistics display (TSS, IF, Duration)_buildControls()
: Builds workout control interface (play/pause/stop/skip)_updateScrollPosition()
: Manages auto-scrolling during workout_showWorkoutLibrary()
: Displays workout selection and management interface_buildChart()
: Renders workout power profile visualization_SummaryItem
: Helper widget for displaying workout metrics
- References:
utils/workout/workout_parser.dart
for workout file parsingutils/workout/workout_painter.dart
for power profile visualizationutils/workout/workout_metrics.dart
for performance metricsutils/workout/workout_controller.dart
for workout execution controlutils/workout/workout_storage.dart
for workout data persistenceutils/workout/sounds.dart
for audio feedbackutils/workout/fit_file_exporter.dart
for workout data exportutils/workout/workout_file_manager.dart
for file operationsutils/bledata.dart
for device data managementwidgets/device_header.dart
for device informationwidgets/workout_library.dart
for workout selection- External packages: flutter_blue_plus, wakelock_plus
- Purpose: Defines constants and configurations for FTMS (Fitness Machine Service) Bluetooth communication
- Major Functions:
FTMSOpCodes
: Operation codes for device control- Control settings (REQUEST_CONTROL, RESET)
- Workout parameters (SET_TARGET_SPEED, SET_TARGET_POWER, etc.)
- Session control (START_OR_RESUME, STOP_OR_PAUSE)
FTMSResultCodes
: Response codes for operations- SUCCESS, OP_CODE_NOT_SUPPORTED, INVALID_PARAMETER, etc.
FTMSStopPauseParams
: Parameters for stop/pause operationsFTMSDataConfig
: Data specifications and resolutions- Data lengths for different commands (TARGET_POWER_LENGTH, etc.)
- Resolution values for measurements:
- Speed (0.01 km/h)
- Power (1.0 watts)
- Cadence (0.5 rpm)
- Heart rate (1.0 BPM)
- Indoor bike simulation parameters
- References:
- Standard FTMS UUID: '00002AD9-0000-1000-8000-00805F9B34FB'
- Used throughout app for Bluetooth communication protocol
- Purpose: Bluetooth data management
- Major Functions: [To be documented]
- References: [To be documented]
- Purpose: Over-the-air Bluetooth updates
- Major Functions: [To be documented]
- References: [To be documented]
- Purpose: Defines application-wide constants and configuration framework
- Major Functions:
- UUID Constants:
csUUID
,ccUUID
: Custom service and characteristic UUIDsftmsServiceUUID
: Fitness Machine Service UUIDftmsControlPointUUID
: Control point characteristic UUIDftmsIndoorBikeDataUUID
: Indoor bike data characteristic UUID
- Variable Names (vNames):
- Device settings (deviceName, ssid, password)
- Bluetooth controls (scanBLE, restartBLE)
- Power settings (stepperPower, powerCorrectionFactor)
- Workout parameters (inclineMultiplier, ERGSensitivity)
- Simulation controls (simulateHr, simulateWatts, simulateCad)
customCharacteristicFramework
: Comprehensive device characteristic definitions- Each characteristic includes:
- Reference ID
- Data type
- Human-readable name
- Value constraints (min/max)
- Description
- Default value
- Each characteristic includes:
- UUID Constants:
- References:
- Used throughout app for consistent configuration
- Defines interface between app and SmartSpin2k device
- Supports FTMS and custom characteristic communication
- Purpose: Provides simulation functionality for testing without physical SmartSpin2k device
- Major Functions:
DemoDevice
: Singleton class for device simulationsimulateSmartSpin2kScan()
: Creates mock scan results- Generates mock advertising data
- Creates simulated BluetoothDevice
- Provides mock ScanResult with realistic values
- Mock Data:
- Device name: "SmartSpin2k Demo"
- Manufacturer ID: 123
- Signal strength (RSSI): -59
- Service UUIDs matching real device
- Simulated advertising data
- References:
utils/constants.dart
for service UUIDsflutter_blue_plus
package for Bluetooth types- Used by scan_screen.dart for demo mode functionality
- Purpose: Extends BluetoothDevice functionality with connection state management
- Major Functions:
Extra
extension on BluetoothDevice:isConnecting
: Stream for device connection stateisDisconnecting
: Stream for device disconnection stateconnectAndUpdateStream()
: Manages device connection with state updatesdisconnectAndUpdateStream()
: Manages device disconnection with state updates
- Connection State Management:
- Uses StreamControllerReemit for state broadcasting
- Maintains global connection state maps
- Handles connection retries and cleanup
- References:
utils.dart
for utility functionsflutter_blue_plus
package for Bluetooth functionality- Used throughout app for reliable device connection handling
- Purpose: Implements FTMS (Fitness Machine Service) control point operations
- Major Functions:
- Target Parameter Controls:
writeTargetPower()
: Sets target power in wattswriteTargetSpeed()
: Sets target speed in km/hwriteTargetInclination()
: Sets target grade percentagewriteTargetResistance()
: Sets resistance levelwriteTargetHeartRate()
: Sets target heart ratewriteTargetCadence()
: Sets target cadence
- Simulation Controls:
writeIndoorBikeSimulation()
: Sets simulation parameters- Wind speed
- Grade
- Rolling resistance
- Wind resistance
- Session Management:
requestControl()
: Requests device controlreset()
: Resets to defaultsstartOrResume()
: Starts/resumes workoutstopOrPause()
: Stops/pauses workout
- Target Parameter Controls:
- References:
bleConstants.dart
for FTMS protocol constantsflutter_blue_plus
for Bluetooth operations- Uses ByteData for precise binary data handling
- Purpose: Manages device configuration presets with local storage
- Major Functions:
PresetManager
: Static class for preset operationssavePreset()
: Stores current device settings- Saves to SharedPreferences
- Maintains preset list
- Handles duplicate names
loadPreset()
: Restores saved device settings- Shows preset selection dialog
- Confirms before overwriting
- Applies settings to device
deletePreset()
: Removes saved presets- Shows deletion confirmation
- Updates preset list
showPresetsMenu()
: UI for preset management- Save new preset
- Load existing preset
- Delete preset
- References:
bledata.dart
for device settings managementsnackbar.dart
for user notificationsextra.dart
for utility functions- External packages:
- shared_preferences for local storage
- flutter_blue_plus for device communication
- Purpose: Manages application-wide notification system using SnackBars
- Major Functions:
Snackbar
: Static utility class for notificationsgetSnackbar()
: Returns appropriate SnackBar key based on ABC enumshow()
: Displays notification message- Success messages in blue
- Error messages in red
- Automatically removes previous SnackBar
prettyException()
: Formats exception messages- Handles FlutterBluePlusException
- Handles PlatformException
- Provides consistent error message format
- Global SnackBar Keys:
snackBarKeyA
: Primary notification keysnackBarKeyB
: Secondary notification keysnackBarKeyC
: Tertiary notification key
- References:
flutter_blue_plus
for Bluetooth exceptions- Flutter's Material design components
- Used throughout app for user feedback
- Purpose: Provides enhanced stream functionality with value caching
- Major Functions:
StreamControllerReemit
: Enhanced StreamController- Caches latest stream value
- Re-emits cached value to new listeners
- Supports broadcast streams
- Maintains value state between subscriptions
_StreamNewStreamWithInitialValue
: Stream extension- Adds initial value capability to streams
- Transforms existing streams to include initial value
_NewStreamWithInitialValueTransformer
: Stream transformer- Handles stream binding and transformation
- Manages listener counts
- Supports both broadcast and single-subscription streams
- Handles stream lifecycle (pause, resume, cancel)
- References:
- Dart async library
- Used throughout app for state management
- Particularly useful for Bluetooth state tracking
- Purpose: Handles Over-The-Air (OTA) firmware updates via WiFi
- Major Functions:
WifiOTA
: Static utility class for WiFi updatesupdateFirmware()
: Main update function- Device name handling for mDNS
- Connection verification
- Firmware loading from assets or filesystem
- Progress tracking and reporting
- Fallback URL handling
- Key Features:
- Supports both .local and direct IP addresses
- Handles multipart file uploads
- Progress callback for UI updates
- Timeout handling
- Error recovery with alternate URLs
- References:
- External packages:
- http for network requests
- http_parser for content type handling
- Flutter services for asset loading
- Used as alternative to Bluetooth OTA updates
- External packages:
- Purpose: Defines constants for FIT (Flexible and Interoperable Data Transfer) protocol
- Major Functions:
FitConstants
: Static class containing protocol definitions- File Structure:
- Header size and versions
- File type identifiers (.FIT)
- CRC table for validation
- Message Types:
- Definition (0x40)
- Data (0x00)
- Global Message Numbers:
- File ID, Device Info
- Activity, Session, Lap
- Record, Event
- Field Definitions:
- Timestamp, Heart Rate
- Cadence, Power
- Distance, Speed
- Data Types and Sizes:
- Integer types (signed/unsigned)
- Float types
- String and enum types
- Sport and Event Types:
- Cycling (2)
- Virtual Sport (58)
- Timer events
- File Structure:
- References:
- Used by fit_file_generator.dart
- Used by fit_message.dart
- Follows FIT protocol specification
- Purpose: Manages export and sharing of workout data as FIT files
- Major Functions:
FitFileExporter
: Static utility class for file operationsshowExportDialog()
: Presents export confirmation dialog- Handles user confirmation
- Triggers export process
- Resets workout state after export
exportFitFile()
: Handles FIT file creation and export- Gets FIT data from workout controller
- Generates timestamped filename
- Saves to downloads directory
- Offers file sharing options
- Handles error states with user feedback
- Features:
- Automatic file naming with timestamps
- Platform-specific path handling
- Share functionality integration
- Error handling with user notifications
- References:
workout_controller.dart
for workout data- External packages:
- path_provider for directory access
- share_plus for file sharing
- cross_file for cross-platform file handling
- Purpose: Generates FIT format files for workout data recording
- Major Functions:
FitFileGenerator
: Main class for FIT file creation- File Structure Management:
_writeFileHeader()
: Creates FIT file header_writeFileIdMessage()
: Writes file identification_writeDeviceInfoMessage()
: Adds device information_writeRecordDefinition()
: Defines data record structure
- Data Recording:
addRecord()
: Adds workout data points_writeEventMessage()
: Records workout events_writeLapMessage()
: Handles lap data_writeSessionMessage()
: Records session summary_writeActivityMessage()
: Adds activity information
- File Finalization:
finalize()
: Completes file generation_calculateCRC()
: Computes checksum- Storage management with SharedPreferences
- File Structure Management:
- Statistics Tracking:
- Heart rate (avg/max)
- Power output (avg/max)
- Cadence (avg/max)
- Speed calculations
- Distance and calories
- References:
fit_constants.dart
for protocol constantsfit_message.dart
for message definitions- External packages:
- shared_preferences for data persistence
- Purpose: Defines message structures and encoding for FIT protocol
- Major Functions:
- Base Classes:
FieldDefinition
: Defines data field structure- Field number, size, and type
- Encoding methods
FitMessage
: Abstract base for all messagesDefinitionMessage
: Describes data structureDataMessage
: Contains actual workout data
- Message Types:
FileIdMessage
: File identificationDeviceInfoMessage
: Device detailsEventMessage
: Workout eventsRecordMessage
: Data point recordingLapMessage
: Lap statisticsSessionMessage
: Workout session dataActivityMessage
: Overall activity data
- Features:
- Binary data encoding
- Type-safe field definitions
- Endian handling
- Field value validation
- Data Fields:
- Timestamps
- Heart rate, cadence, power
- Speed, distance
- Position data
- Session statistics
- Base Classes:
- References:
fit_constants.dart
for protocol constants- Used by fit_file_generator.dart
- Purpose: Manages audio feedback for workout interactions
- Major Functions:
WorkoutSoundGenerator
: Singleton class for audio playback_playSound()
: Core sound playback functionplayButtonSound()
: Mouse click for button interactionsintervalCountdownSound()
: Ding sound for new segmentsworkoutEndSound()
: Fanfare for workout completion
- Features:
- Singleton pattern for global access
- Asset-based sound loading
- Error handling for playback issues
- Resource cleanup with dispose
- Sound Assets:
- mouseclick.mp3: Button feedback
- dingding.mp3: Interval transitions
- fanfare.mp3: Workout completion
- References:
- External package: just_audio
- Used throughout workout interface
- Asset files in assets/sounds/
- Purpose: Defines UI and workout-related constants for consistent styling
- Major Functions:
- Layout Constants:
WorkoutMetricScale
: Base sizing for UI elementsWorkoutPadding
: Spacing and padding valuesWorkoutSpacing
: Vertical spacing definitionsWorkoutSizes
: Component dimensions
- Typography:
WorkoutFontSizes
: Text size hierarchyWorkoutFontWeights
: Font weight definitions
- Visual Styling:
WorkoutShadows
: Shadow definitionsWorkoutOpacity
: Transparency valuesWorkoutStroke
: Line width definitions
- Workout Zones:
WorkoutZones
: FTP percentage thresholds- Recovery (< 55%)
- Endurance (55-75%)
- Tempo (76-87%)
- Threshold (88-95%)
- VO2Max (96-105%)
- Anaerobic (106-120%)
- Neuromuscular (> 120%)
- Grid and Animation:
WorkoutGrid
: Graph grid intervalsWorkoutDurations
: Animation timings
- Layout Constants:
- References:
- Flutter material design
- Used throughout workout UI components
- Based on standard cycling training zones
- Purpose: Core controller for workout execution and state management
- Major Functions:
- Workout Control:
togglePlayPause()
: Controls workout executionstopWorkout()
: Ends current workoutskipToNextSegment()
: Advances to next segmentloadWorkout()
: Initializes workout from XMLstartProgress()
: Manages workout progression
- State Management:
- Progress tracking
- FTP (Functional Threshold Power) handling
- Segment transitions
- Power and distance calculations
- Data Recording:
- FIT file generation
- Power point tracking
- Distance calculation
- Altitude simulation
- Features:
- Workout state persistence
- Audio feedback for intervals
- Power interpolation
- Progress timing
- Simulation parameter management
- Workout Control:
- References:
bledata.dart
for device communicationftmsControlPoint.dart
for device controlworkout_parser.dart
for file parsingworkout_constants.dart
for configurationworkout_storage.dart
for state persistencesounds.dart
for audio feedbackfit_file_generator.dart
for data recording
- Purpose: Manages workout file operations and thumbnail generation
- Major Functions:
WorkoutFileManager
: Static utility classcaptureWorkoutThumbnail()
: Creates workout preview images- Renders workout graph
- Converts to PNG format
- Base64 encodes for storage
pickAndLoadWorkout()
: Handles workout file import- File selection via picker
- Content validation
- Workout loading
- Thumbnail generation
- Library storage
- User feedback
- Features:
- ZWO file format validation
- Error handling with user feedback
- Automatic thumbnail generation
- Integration with workout storage
- UI state management
- References:
workout_storage.dart
for persistenceworkout_controller.dart
for workout handling- External packages:
- file_picker for file selection
- Flutter rendering for thumbnails
- Purpose: Implements responsive workout metric display components
- Major Functions:
WorkoutMetricRow
: Horizontal layout for metrics- Adaptive layout based on available width
- Automatic scrolling for overflow
- Metric spacing and padding
MetricBox
: Individual metric display- Dynamic font sizing
- Responsive width calculation
- Themed styling
- Shadow and border effects
WorkoutMetric
: Data model for metrics- Factory methods for common types:
- Power (watts)
- Heart Rate (BPM)
- Cadence (RPM)
- Elapsed Time (HH:MM:SS)
- Factory methods for common types:
- Features:
- Responsive layout adaptation
- Dynamic font scaling
- Theme-aware styling
- Consistent spacing
- Unit display handling
- References:
workout_constants.dart
for styling constants- Flutter material design
- Theme integration
- Purpose: Displays real-time workout performance metrics
- Major Functions:
WorkoutMetrics
: Main widget for metrics display- Metrics shown:
- Elapsed Time (HH:MM:SS)
- Current Power (watts)
- Target Power (watts)
- Cadence (RPM)
- Heart Rate (BPM) - conditional
- Next Block Time (HH:MM:SS)
- Features:
- Fade animation support
- Responsive layout
- Conditional heart rate display
- Time formatting
- Metrics shown:
- Layout:
- Card-based container
- Horizontal metric arrangement
- Consistent padding and spacing
- Center alignment
- References:
bledata.dart
for performance dataworkout_constants.dart
for stylingworkout_metric_row.dart
for metric display- Flutter animations
- Purpose: Custom painter for workout visualization and power graphs
- Major Functions:
WorkoutPainter
: Main custom painter class- Segment Visualization:
- Steady state blocks
- Ramp segments
- Power zone coloring
- Segment borders
- Grid System:
_drawPowerGrid()
: Power scale (watts)_drawTimeGrid()
: Time intervals- Labels and measurements
- Performance Data:
_drawActualPowerTrail()
: Real-time power tracking- Current power indicator
- Progress tracking
- Cadence Display:
_drawCadenceIndicator()
: RPM targets- Range indicators
- Segment Visualization:
- Features:
- Power zone color coding
- Dynamic scaling
- Grid overlay
- Real-time updates
- Customizable styling
- References:
workout_parser.dart
for segment dataworkout_constants.dart
for styling- Power zone definitions
- Flutter custom painting
- Purpose: Parses ZWO format workout files and manages workout data structures
- Major Functions:
- Data Models:
WorkoutData
: Overall workout container- Name and segments list
WorkoutSegment
: Individual workout block- Duration, power targets
- Cadence specifications
- Interval parameters
SegmentType
: Workout block types- SteadyState, Warmup, Cooldown
- Ramp, Intervals, FreeRide
- MaxEffort
- Parser Functions:
parseZwoFile()
: Main XML parsing entry- Segment-specific parsers:
_parseSteadyState()
_parseRampSegment()
_parseIntervals()
_parseFreeRide()
_parseMaxEffort()
- Helper Methods:
getPowerAtTime()
: Power calculationmaxPower
/minPower
: Power bounds
- Features:
- XML parsing
- Power calculations
- Interval handling
- Cadence parsing
- Data Models:
- References:
- External package: xml
- ZWO file format specification
- Used by workout controller
- Purpose: Manages persistent storage of workout data and settings
- Major Functions:
- FTP Management:
saveFTP()
: Store FTP valueloadFTP()
: Retrieve FTP value
- Workout State:
saveWorkoutState()
: Store current progressloadWorkoutState()
: Restore workout stateclearWorkoutState()
: Reset state
- Workout Library:
saveWorkoutToLibrary()
: Store workout filesgetSavedWorkouts()
: List saved workoutsdeleteWorkout()
: Remove workouts
- Thumbnail Management:
getWorkoutThumbnail()
: Retrieve preview imagesupdateWorkoutThumbnail()
: Update previews
- Features:
- Default workout handling
- Progress persistence
- State restoration
- Thumbnail caching
- JSON serialization
- FTP Management:
- References:
- External packages:
- shared_preferences for storage
- flutter/services for assets
- Used by workout controller
- Integrates with workout parser
- External packages:
- Purpose: Widget for boolean setting controls with on/off toggle
- Major Functions:
boolCard
: Main widget for boolean settings- Toggle switch interface
- Current value display
- Setting name display
- Features:
- Save functionality
- Back navigation
- Real-time value updates
- Elevated card design
- Rounded corners
- State Management:
- BLE data handling
- Toggle state persistence
- Device communication
- References:
utils/bledata.dart
for device communicationutils/constants.dart
for shared constants- External package: flutter_blue_plus
- Purpose: Header widget displaying device information and connection controls
- Major Functions:
- Device Information:
- Device name and ID display
- Firmware version
- Signal strength indicator
- Connection Management:
onConnectPressed()
: Device connectiononDisconnectPressed()
: Device disconnectiononDiscoverServicesPressed()
: Service discovery- RSSI monitoring and updates
- Device Controls:
onRebootPressed()
: Device rebootonResetPressed()
: Factory resetonResetPowerTablePressed()
: Clear power dataonPresetsPressed()
: Preset management
- Features:
- Expandable interface
- Signal strength visualization
- Connection state monitoring
- Automatic reconnection
- Error handling with snackbar feedback
- Device Information:
- References:
utils/bledata.dart
for device communicationutils/snackbar.dart
for notificationsutils/presets.dart
for settings managementutils/constants.dart
for shared values- External packages: flutter_blue_plus, font_awesome_flutter
- Purpose: Interactive card widget for device selection and configuration
- Major Functions:
- Device Selection:
buildDevicesMap()
: Builds list of available devices_changeBLEDevice()
: Handles device switching- Device filtering by type (Power/Heart Rate)
- UI Components:
- Wheel scroll view for device selection
- Scan button for device discovery
- Save/Back navigation controls
- Animated visibility transitions
- Features:
- Device type filtering
- Duplicate removal
- Real-time updates
- Persistent settings
- BLE device reconnection
- State Management:
- Selected device tracking
- BLE characteristic monitoring
- Wheel scroll state
- Device Selection:
- References:
utils/bledata.dart
for device communicationutils/constants.dart
for shared values- External package: flutter_blue_plus
- Purpose: Reusable widget for displaying metric values with labels
- Major Functions:
MetricBox
: Container for metric display- Fixed dimensions (65x65)
- Rounded corners
- Light gray background
- Layout:
- Value display (22pt font)
- Label display (9pt font)
- Vertical stacking
- Center alignment
- Features:
- Consistent styling
- Compact design
- Clear value/label hierarchy
- Reusable across app
- References:
- Used in workout and device screens
- Flutter material design
- Basic styling constants
- Purpose: Card widget for text input with special handling for passwords
- Major Functions:
- Text Input:
regularTextField()
: Standard text inputpasswordTextField()
: Secure password input- Input validation and verification
- Features:
- Password visibility toggle
- Input validation
- Real-time updates
- Save/Back navigation
- UI Components:
- Elevated card design
- Rounded corners
- Custom text styling
- Icon indicators
- Input Handling:
- Text submission
- Value persistence
- Error messaging
- Device communication
- Text Input:
- References:
utils/constants.dart
for shared valuesutils/bledata.dart
for device communication- External package: flutter_blue_plus
- Purpose: Expandable tile widget for displaying Bluetooth device scan results
- Major Functions:
- Device Information Display:
_buildTitle()
: Device name and signal strength_buildAdvRow()
: Advertisement data rows_rssiRow()
: Visual signal strength indicator
- Connection Management:
_buildConnectButton()
: Connect/Open button- Connection state tracking
- Connectable status handling
- Data Formatting:
getNiceHexArray()
: Hex data formattinggetNiceManufacturerData()
: Manufacturer datagetNiceServiceData()
: Service informationgetNiceServiceUuids()
: UUID formatting
- Features:
- Signal strength visualization
- Expandable details view
- Connection state indication
- Color-coded signal bars
- Device icon display
- Device Information Display:
- References:
- External package: flutter_blue_plus
- Asset: ss2kv3.png for device icon
- Flutter material design
- Purpose: Interactive tile widget for device settings with type-specific editors
- Major Functions:
- Setting Type Management:
widgetPicker()
: Dynamic editor selection- Slider for numeric values
- Dropdown for device selection
- Toggle for boolean values
- Text input for strings
- Value Handling:
valueFormatter()
: Format display values- Password masking
- Boolean text conversion
- Real-time updates
- UI Components:
- Hero animations
- Fade transitions
- Setting descriptions
- Edit indicators
- Features:
- Type-specific editors
- Value persistence
- Real-time updates
- Error handling
- Visual feedback
- Setting Type Management:
- References:
widgets/slider_card.dart
widgets/bool_card.dart
widgets/plain_text_card.dart
widgets/dropdown_card.dart
utils/bledata.dart
utils/constants.dart
- External package: flutter_blue_plus
- Purpose: Card widget for numeric value adjustment via slider and text input
- Major Functions:
- Value Control:
constrainValue()
: Enforces min/max boundsverifyInput()
: Validates text input- Slider with divisions
- Direct text entry
- Features:
- Real-time value updates
- Value constraints
- Error notifications
- Precision handling
- Value persistence
- UI Components:
- Slider control
- Text input field
- Save/Back buttons
- Value display
- Error feedback
- Input Handling:
- Numeric validation
- Range checking
- Format precision
- Device communication
- Value Control:
- References:
utils/snackbar.dart
for notificationsutils/bledata.dart
for device communicationutils/constants.dart
for shared values- External package: flutter_blue_plus
- Purpose: Widget for displaying and managing saved workouts
- Major Functions:
WorkoutLibrary
: Main library view- Workout list display
- Mode switching (select/delete)
- Loading state handling
- Empty state handling
_WorkoutTile
: Individual workout display- Thumbnail preview
- Workout name
- Selection handling
- Deletion confirmation
- Features:
- Base64 thumbnail decoding
- Async data loading
- Interactive tiles
- Delete confirmation
- Mode-based interactions
- UI Components:
- Card-based layout
- Loading indicators
- Delete buttons
- Alert dialogs
- Thumbnail images
- References:
utils/workout/workout_storage.dart
for data persistenceutils/workout/workout_constants.dart
for styling- Flutter material design
Note: This documentation is a work in progress. The "[To be documented]" sections will be filled in as we analyze each file in detail.