Context
Follow-ups from Bugbot review of the Fluid morphing work (#342) after merge to dev.
Bugs
1. Keyboard sidebar resize not persisted (medium)
Where: lib/features/main_screen/main_screen.dart (connections panel width / QueryaSplitHandle)
Connections panel width is written to settings only from onDragEnd via _schedulePersistAfterSettle. Keyboard and semantics resize handlers call onDragDelta only, so accessible resizing never triggers persistence and the width reverts on restart.
Expected: Arrow-key / semantics resize persists like mouse drag-end.
2. Pending width save dropped on dispose (medium)
Where: lib/features/main_screen/main_screen.dart (_schedulePersistAfterSettle / dispose)
When the main split disposes while a post-settle persist listener is still registered, the listener is removed without flushing _leftPanelWidth to AppSettings. Closing or navigating away during spring settle can lose the user’s last resize.
Expected: Flush pending width on dispose (or cancel settle and persist current clamped value).
3. Dropdown exit animation cannot run (low)
Where: lib/shared/widgets/querya_dropdown.dart (_QueryaDropdownMenuEnter / MenuAnchor)
Menu close sets _menuOpen to false, but MenuAnchor removes the menu overlay when close() completes. The fade/slide exit driven by openNotifier is torn down with the menu, so the exit curve never plays and the menu disappears abruptly.
Expected: Either delay close() until exit animation finishes, or document that exit is best-effort / snap-only under MenuAnchor.
Acceptance
- Keyboard/semantics sidebar resize persists across restart
- Dispose during settle still saves the last width
- Dropdown close either shows exit motion or is explicitly snap-only with a short comment + test covering intended behavior
- Widget tests covering persistence paths
Related
Context
Follow-ups from Bugbot review of the Fluid morphing work (#342) after merge to dev.
Bugs
1. Keyboard sidebar resize not persisted (medium)
Where: lib/features/main_screen/main_screen.dart (connections panel width / QueryaSplitHandle)
Connections panel width is written to settings only from onDragEnd via _schedulePersistAfterSettle. Keyboard and semantics resize handlers call onDragDelta only, so accessible resizing never triggers persistence and the width reverts on restart.
Expected: Arrow-key / semantics resize persists like mouse drag-end.
2. Pending width save dropped on dispose (medium)
Where: lib/features/main_screen/main_screen.dart (_schedulePersistAfterSettle / dispose)
When the main split disposes while a post-settle persist listener is still registered, the listener is removed without flushing _leftPanelWidth to AppSettings. Closing or navigating away during spring settle can lose the user’s last resize.
Expected: Flush pending width on dispose (or cancel settle and persist current clamped value).
3. Dropdown exit animation cannot run (low)
Where: lib/shared/widgets/querya_dropdown.dart (_QueryaDropdownMenuEnter / MenuAnchor)
Menu close sets _menuOpen to false, but MenuAnchor removes the menu overlay when close() completes. The fade/slide exit driven by openNotifier is torn down with the menu, so the exit curve never plays and the menu disappears abruptly.
Expected: Either delay close() until exit animation finishes, or document that exit is best-effort / snap-only under MenuAnchor.
Acceptance
Related