if I want to move keyboard focus to a `TextField` ...
# compose
j
if I want to move keyboard focus to a
TextField
once my
ModalBottomSheet
is shown, is using the `ModalBottomSheetState`'s
confirmStateChange
the correct place to do that, or is there a better place? I understand it can work but it doesn't necessarily feel right.. is there a listener I can use which signals "the modal bottom sheet has finished appearing"?
1
c
Not an expert, but that definitely sounds like where I would put it.
Modals reopening again after closing is a bug I know I've filed. I don't think it's fixed yet. Not saying that you're having the same issue, but in general seems like maybe you might have a case worth filing a bug about here too.
☝️ 1
j
Compose doesn't expose listeners per se but rather exposes snapshot state. Using
snapshotFlow
, you can create a Flow that emits whenever the state's value changes and then request focus. You wouldn't want to use
confirmStateChange
because this is called when
ModalBottomSheetState
decides which state (if any) to move to, so you'd be requesting focus too early. We use
snapshotFlow
in Accompanist to get updates for when the sheet is visible: https://github.com/google/accompanist/blob/main/navigation-material/src/main/java/com/google/accompanist/navigation/material/SheetContentHost.kt#L83
@Colton Idle, would you mind linking the issue?
c
j
Ah cool, thanks! I think the issue James mentioned is about Material's
ModalBottomSheetLayout
, the Accompanist one is on my mind🙂 (I imagine the underlying cause might be similar though)
c
id put my money on that too. lol