{"record":{"id":"e26ae5bcd1b5a1d1","repo":"a-b-street/abstreet","slug":"can-t-scroll-to-member-of-unknown","errorCode":null,"errorMessage":"Can't scroll_to_member of unknown {}","messagePattern":"Can't scroll_to_member of unknown (.+?)","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"widgetry/src/widgets/panel.rs","lineNumber":388,"sourceCode":"pub fn scroll_to_member(&mut self, ctx: &EventCtx, name: String) {\n    if let Some(w) = self.top_level.find(&name) {\n        let y1 = w.rect.y1;\n        self.set_scroll_offset(ctx, (0.0, y1));\n    } else {\n        panic!(\"Can't scroll_to_member of unknown {}\", name);\n    }\n}","sourceCodeStart":370,"sourceCodeEnd":406,"githubUrl":"https://github.com/a-b-street/abstreet/blob/0964f29315820c91b171b585eb51e300164e9197/widgetry/src/widgets/panel.rs#L370-L406","documentation":"Panel::scroll_to_member scrolls the panel so the widget with the given ID is visible. This fires when no widget in the panel's top_level tree has that name — the caller passed an ID that was never added, was renamed, or belonged to a previous panel layout. It is a programming-error guard for UI code.","triggerScenarios":"Calling `panel.scroll_to_member(ctx, name)` where `name` was never assigned via `.named(...)` or was removed/replaced (e.g. after swap_inner_content or replace).","commonSituations":"Typo in the widget name; widget lives in a different Panel; the widget was taken out or replaced between calls.","solutions":["Check `panel.has_widget(&name)` before calling scroll_to_member","Ensure the widget was named with `.named(name)` and not removed by take/replace","Fix the name typo or move the widget into this Panel","Re-scan after layout changes since replacement changes the tree"],"exampleFix":"// before\npanel.scroll_to_member(ctx, \"summary_row\".to_string());\n// after\nif panel.has_widget(\"summary_row\") {\n    panel.scroll_to_member(ctx, \"summary_row\".to_string());\n}","handlingStrategy":"validation","validationCode":"if panel.has_widget(&name) {\n    panel.scroll_to_member(ctx, name);\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always .named() widgets you intend to scroll to","Re-check names after swap_inner_content/replace","Store scroll-target names in constants"],"tags":["rust","panel","scroll","not-found"],"backgroundTag":"entity-not-found","analyzedSha":"0964f29315820c91b171b585eb51e300164e9197","analyzedAt":"2026-09-13T18:02:03.421Z","contentChangedAt":"2026-09-13T18:02:03.421Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}