Implements smart score preservation when switching between 3-arrow and 6-arrow modes:
Core functionality:
- Detects existing scores before allowing arrow count mode changes
- Shows confirmation dialog only when scores exist on scorecard
- Two-option dialog: 'Yes - Keep scores' or 'No - Clear scores'
- User can cancel dialog to abort mode change completely
Score preservation logic:
- Preserves existing scores in their current positions when keeping scores
- Handles 6→3 arrow transition: rows 11-12 become inactive but retain scores
- Maintains visual greying and unselectable state for deactivated cells
- Respects new arrow count limits when copying scores to new structure
Dialog UX improvements:
- Clear messaging explaining the consequences of each choice
- Professional button styling with explicit action descriptions
- Cancellable dialog preserves current state if user changes mind
- Seamless integration with existing toggle switch behavior
Technical implementation:
- _hasAnyScores() helper efficiently detects non-empty scorecard
- _preserveScoresWithNewArrowCount() safely migrates scores to new structure
- Async/await pattern for proper dialog handling and state updates
- Maintains all existing sophisticated end interaction behaviors
This enhancement prevents accidental score loss while allowing flexible
rule switching, matching professional archery scoring conventions.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Implements professional navigation structure with Material Design drawer:
- MainNavigationPage: Central navigation hub with AppBar and Drawer
- SettingsPage: Placeholder settings page for future configuration options
- Drawer navigation: Swipe-in side menu with Main (Scorer) and Settings options
- App title updates dynamically based on current page selection
- Clean architecture separating navigation from scoring logic
Navigation features:
- Material Design drawer with branded header showing 'Archery Bookkeeper Alpha 0.1'
- Icons for visual clarity (sports for scorer, settings for configuration)
- Selected state highlighting for current page
- Automatic drawer close on navigation selection
- Professional app description in drawer footer
Updated main.dart to use MainNavigationPage as entry point
Modified ScoringPage to work as embedded page without its own AppBar
Maintained all sophisticated end interaction behaviors within scoring context
This establishes the foundation for additional pages and features while
preserving the advanced scoring functionality implemented in the previous release.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
This major enhancement transforms the scoring interface into a sophisticated end interaction system that mirrors professional archery scoring workflows.
Core behaviors: per-end descending sorting, smart cell selection snapping, active end visual highlighting, cross-end disarm, enhanced keypad pop-up/retract.
Split viewport: upper viewport with scrollable scorecard, lower viewport with 30% keypad, 250ms animated transitions, proper separation prevents UI obstruction.
Enhanced 4x4 keypad: responsive Expanded widgets, CLEAR and CLOSE buttons, percentage-based sizing eliminates overflow.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Mark 6-arrow layout as completed in CLAUDE.md with architectural details
- Update current functionality descriptions for both 3-arrow and 6-arrow modes
- Reduce remaining UI priorities from 6 to 4 items
- Add gitignore patterns for layout documentation and user notes
- Update README.md with enhanced feature descriptions
Documentation now accurately reflects the stable static grid architecture
with logical grouping system and responsive percentage-based layout.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Fix dynamic column generation issue that created 6 columns instead of 3
- Implement static 12-row grid with intelligent visual state management
- Add visual-to-logical mapping system for proper end/arrow indexing
- Fix sum calculations using logical end groupings instead of visual rows
- Replace ends per set selector with automatic ruleset inference
- Convert to percentage-based responsive layout eliminating viewport overflow
- Add clean merged arrow header replacing individual column indices
Core improvements:
- 3-arrow (Indoor): 10 ends, sum-3 active, sum-6 on even ends
- 6-arrow (Outdoor): 6 ends, sum-3 greyed, sum-6 every 2 visual rows
- No more RenderFlex overflow errors with responsive column widths
- Proper bounds checking prevents range errors on inactive rows
- Package identifier updated to com.novoyuuparosk.archery_bookkeeper
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add ScoringColorScheme class with explicit text colors per scheme
- Implement traditional (vibrant) and lowSaturation (muted) color schemes
- Add disabled state colors for greying out inactive elements
- Refactor scoring_cell.dart and scoring_keypad.dart to use centralized colors
- Grey out Sum of 6 column when in 3-arrow end mode while maintaining layout
- Add comprehensive color scheme documentation and usage examples
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Upgrade flutter_lints from 5.0.0 to 6.0.0
- Fix widget test to reference correct app class (ArcheryBookkeeperApp)
- Update widget test to check for actual app title "Archery Scoring"
- Clean up project description in pubspec.yaml
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>