Application Initialization
The app bootstraps inlib/main.dart:36:
State Management with Riverpod
Icarus uses Riverpod’sNotifier pattern for all state management. Providers are located in lib/providers/.
Key Providers
StrategyProvider
File:lib/providers/strategy_provider.dart:172
Manages the current strategy’s state, persistence, and multi-page navigation.
- Loading/saving strategies to Hive
- Managing active page state
- Auto-save with debouncing
- Import/export
.icafiles - Strategy duplication and deletion
FolderProvider
File:lib/providers/folder_provider.dart:115
Manages the hierarchical folder structure for organizing strategies.
- Creating/editing/deleting folders
- Navigating folder hierarchy
- Moving strategies between folders
DrawingProvider
File:lib/providers/drawing_provider.dart
Manages canvas drawing elements (lines, free-form drawings, arrows).
AgentProvider & AbilityProvider
Files:lib/providers/agent_provider.dart, lib/providers/ability_provider.dart
Manage placed Valorant agents and abilities on the strategy canvas.
State Flow Example
When a user draws on the canvas:Data Persistence with Hive
Icarus uses Hive, a fast NoSQL database, for local storage.Hive Boxes
File:lib/const/hive_boxes.dart:1
Hive Adapters
Adapters are automatically generated using@HiveType annotations and build_runner.
Generated file: lib/hive/hive_registrar.g.dart
The generator creates type adapters for:
StrategyData- Complete strategy documentStrategyPage- Individual pages within a strategyFolder- Folder metadataPlacedAgent,PlacedAbility,PlacedText, etc. - Canvas elementsDrawingElementsubtypes (Line, FreeDrawing)
Data Models
StrategyData
File:lib/providers/strategy_provider.dart:40
The root data model for a strategy:
StrategyPage
File:lib/providers/strategy_page.dart
Each strategy contains multiple pages:
Folder
File:lib/providers/folder_provider.dart:22
Auto-Save System
File:lib/providers/strategy_provider.dart:198
Icarus implements a debounced auto-save system:
- Debounces rapid edits with a timer (default: 2 seconds)
- Prevents concurrent saves with a lock
- Syncs the current page to Hive
- Updates the last edited timestamp
Multi-Page Navigation
File:lib/providers/strategy_provider.dart:481
Strategies support multiple pages with smooth transitions:
Import/Export System
File:lib/providers/strategy_provider.dart:788
Strategies are exported as .ica files (ZIP archives containing JSON + images):
.ica format:
- JSON file with strategy data
- Embedded image files
- Version number for migration support
Migration System
File:lib/providers/strategy_provider.dart:269
Icarus includes automatic data migration for backward compatibility:
- Legacy single-page strategies → multi-page format
- Coordinate system updates (aspect ratio changes)
- Ability positioning fixes
UI Layer
The UI is built with:- Shadcn UI: Component library (buttons, dialogs, etc.)
- Custom Flutter widgets: Canvas rendering, drag-and-drop
- Toastification: User notifications
FolderNavigator- Browse strategies and foldersStrategyView- Edit strategy canvasSettingsTab- App configuration