@@ -18,12 +18,16 @@ import androidx.compose.material3.Text
1818import androidx.compose.material3.rememberModalBottomSheetState
1919import androidx.compose.runtime.Composable
2020import androidx.compose.runtime.LaunchedEffect
21+ import androidx.compose.runtime.getValue
22+ import androidx.compose.runtime.mutableStateOf
2123import androidx.compose.runtime.remember
2224import androidx.compose.runtime.rememberCoroutineScope
25+ import androidx.compose.runtime.setValue
2326import androidx.compose.ui.Alignment
2427import androidx.compose.ui.Modifier
2528import androidx.compose.ui.focus.FocusRequester
2629import androidx.compose.ui.focus.focusRequester
30+ import androidx.compose.ui.focus.onFocusChanged
2731import androidx.compose.ui.graphics.vector.ImageVector
2832import androidx.compose.ui.platform.LocalSoftwareKeyboardController
2933import androidx.compose.ui.res.stringResource
@@ -46,6 +50,7 @@ import com.ninecraft.booket.feature.record.component.ImpressionGuideBottomSheet
4650import com.ninecraft.booket.feature.record.register.RecordRegisterUiEvent
4751import com.ninecraft.booket.feature.record.register.RecordRegisterUiState
4852import kotlinx.coroutines.launch
53+ import tech.thdev.compose.extensions.keyboard.state.foundation.rememberKeyboardVisible
4954import com.ninecraft.booket.core.designsystem.R as designR
5055
5156@OptIn(ExperimentalMaterial3Api ::class )
@@ -55,11 +60,18 @@ fun ImpressionStep(
5560 modifier : Modifier = Modifier ,
5661) {
5762 val coroutineScope = rememberCoroutineScope()
58- val impressionGuideBottomSheetState =
59- rememberModalBottomSheetState(skipPartiallyExpanded = true )
60-
63+ val impressionGuideBottomSheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true )
6164 val focusRequester = remember { FocusRequester () }
6265 val keyboardController = LocalSoftwareKeyboardController .current
66+ val scrollState = rememberScrollState()
67+ val keyboardState by rememberKeyboardVisible()
68+ var isSentenceTextFieldFocused by remember { mutableStateOf(false ) }
69+
70+ LaunchedEffect (keyboardState, isSentenceTextFieldFocused) {
71+ if (keyboardState && isSentenceTextFieldFocused) {
72+ scrollState.animateScrollTo(scrollState.maxValue)
73+ }
74+ }
6375
6476 LaunchedEffect (Unit ) {
6577 if (state.impressionState.text.isEmpty()) {
@@ -78,7 +90,8 @@ fun ImpressionStep(
7890 modifier = Modifier
7991 .fillMaxSize()
8092 .padding(horizontal = ReedTheme .spacing.spacing5)
81- .verticalScroll(rememberScrollState()),
93+ .padding(bottom = 80 .dp)
94+ .verticalScroll(scrollState),
8295 ) {
8396 Text (
8497 text = stringResource(R .string.impression_step_title),
@@ -98,7 +111,10 @@ fun ImpressionStep(
98111 modifier = Modifier
99112 .fillMaxWidth()
100113 .focusRequester(focusRequester)
101- .height(140 .dp),
114+ .height(140 .dp)
115+ .onFocusChanged { focusState ->
116+ isSentenceTextFieldFocused = focusState.isFocused
117+ },
102118 keyboardOptions = KeyboardOptions (
103119 keyboardType = KeyboardType .Text ,
104120 imeAction = ImeAction .Default ,
0 commit comments