Problem
updateDerivedScreens in internal/app/update.go unconditionally calls screens.NewSettings(...) every time it's invoked (on every theme change, sidebar toggle, resize, and route change):
func (m *Model) updateDerivedScreens() {
...
m.screens["settings"] = screens.NewSettings(screens.SettingsState{...}, m.theme) // always new
if s, ok := m.screens["help"].(screens.Help); ok {
m.screens["help"] = s.WithTheme(m.theme) // correct pattern
} else {
m.screens["help"] = screens.NewHelp(m.keys.FullHelp(), m.theme) // only on first call
}
}
Settings is always reconstructed (losing any in-progress state), while Help and Activity correctly use a WithTheme pattern. Settings should follow the same WithTheme pattern, or at minimum use the type-assert-then-update approach.
Fix
Give Settings a WithTheme and WithState method (or a Update(SettingsState) method) so it can be updated in-place rather than reconstructed from scratch on every derived screen update.
Problem
updateDerivedScreensininternal/app/update.gounconditionally callsscreens.NewSettings(...)every time it's invoked (on every theme change, sidebar toggle, resize, and route change):Settingsis always reconstructed (losing any in-progress state), whileHelpandActivitycorrectly use aWithThemepattern. Settings should follow the sameWithThemepattern, or at minimum use the type-assert-then-update approach.Fix
Give
SettingsaWithThemeandWithStatemethod (or aUpdate(SettingsState)method) so it can be updated in-place rather than reconstructed from scratch on every derived screen update.