fix(ui): 修复菜单布局的三个严重 bug
Bug #1: moveToMain 误驱逐页面 - 根因:每次调用 moveToMain 都执行驱逐逻辑,即使页面本来就在主菜单 - 场景:拖拽主菜单内部顺序 → SettingsViewModel 遍历新顺序逐个调 moveToMain → 每次都判断 main.size > 5 → 误驱逐最后一个页面 - 修复:只在真正从 More 移到主菜单时才驱逐(加 wasInMore 标志位) Bug #2: onReorder 传 resolve 输出污染状态 - 根因:SettingsScreen 拖拽回调传的是 resolve 输出(mainItems/subItems) 而不是持久化输入(screenOrder/subMenuOrder) - 场景:拖拽主菜单 → onReorder 传 [Radar, ..., Settings](完整列表) → Settings 被显式存入 screenOrder → 下次 resolve 当作用户手动放置 → 参与驱逐逻辑 - 修复: 1. 拖拽主菜单时过滤掉 Settings(锁定页面用默认位置,不存持久化) 2. 另一个菜单用输入的 screenOrder/subMenuOrder,不用 resolve 输出 Bug #3: onReorder More 菜单传错参数 - 根因:拖拽 More 菜单时传的是 mainItems(resolve 输出),不是 screenOrder - 修复:改用输入的 screenOrder 影响:修复前,拖拽主菜单会丢页面,移页面到主菜单可能导致 Settings 消失
This commit is contained in:
1 parent
7cadded6ca
commit
cf93ca9f71
2 files changed
+15
-7
No files matched your search
+6
-2
@@ -863,7 +863,11 @@ private fun UiSettingsCard(
|
||||
)
|
||||
onUpdateMenu(moved.screenOrder, moved.subMenuOrder)
|
||||
},
|
||||
onReorder = { main -> onUpdateMenu(main, subItems) }
|
||||
onReorder = { main ->
|
||||
// Settings is locked last; exclude it so resolve continues to use its default position
|
||||
val userOrder = main.filter { it != "Settings" }
|
||||
onUpdateMenu(userOrder, subMenuOrder)
|
||||
}
|
||||
)
|
||||
// More-menu area (pages behind "More")
|
||||
Text(
|
||||
@@ -883,7 +887,7 @@ private fun UiSettingsCard(
|
||||
)
|
||||
onUpdateMenu(moved.screenOrder, moved.subMenuOrder)
|
||||
},
|
||||
onReorder = { sub -> onUpdateMenu(mainItems, sub) }
|
||||
onReorder = { sub -> onUpdateMenu(screenOrder, sub) }
|
||||
)
|
||||
TextButton(onClick = onResetOrder) {
|
||||
Text(text = stringResource(id = R.string.prefs_ui_order_reset))
|
||||
|
||||
Reference in new issue
Block a user