1142bf5ed13357546224e052ba1d8b157a760dc5
分享进来的内容被 `ShareIntake.take()` 取走之后没有归还路径,而它此前只挂在一格 `remember(sessionId)` 上:Activity 因转屏 / 深浅色切换重建时那次组合整份丢掉,那份分享 **既不在待发队列里、也不在界面上**(用户什么都没看到,也没有任何提示);用户已经输入到 一半的那句描述同样丢。 改法:把「已取走、正等确认的那份分享 + 用户补的描述」移进 `ChatUiState.shareConfirm` (`ShareConfirmDraft`),那一格由 VM 持有,而 VM 活在 `ChatSessionSlots` 的 `ViewModelStore` 里、由 AppContainer 撑着 —— 比组合与 Activity 都活得久,所以重建之后面板照旧长出来, 描述也跟着回来(描述与正文绑在同一个值里,两者同生共死)。 `take()` 仍然只发生一次:认领那一步收进 `ChatViewModel.claimSharedContent`,闸门是纯函数 `shareConfirmClaim`,且**在 `take()` 之前** —— 手上已经有那份内容时一个字节都不动队列 (既不取新的一条,也不会把用户正看着的那份顶掉)。重建后的新一帧照样会走到判据这里, 而那时手上已经有东西(它活在 VM 里)⇒ 不会再取第二次。判据、出队、落地之间没有挂起点, 所以也不存在「取走了却没记住」的窗口。 顺带把这一格计入 `holdsUnsentWork`:这份内容已经没有退路,那一格被回收就等于把它删掉。 `ShareLanding` / `ShareIntake.take()` 里「取走之后直接发」的旧说法一并改成「交给确认面板」。 新增 ShareConfirmDraftTest:钉住「重建后的第二帧不再调 take、队列里那条也不许被取走」、 「内容与描述原样还在」、「队列为空时不造一个空面板」。
Releases
5
Alpha_v0.1.0_4
Latest