11package compose
22
33import ConsoleHandler.processInput
4+ import ConsoleHandler.shouldNotChange
45import ConsoleState
56import State
7+ import androidx.compose.foundation.text.KeyboardOptions
68import androidx.compose.material.TextField
79import androidx.compose.material.TextFieldDefaults
810import androidx.compose.runtime.Composable
@@ -11,10 +13,15 @@ import androidx.compose.runtime.rememberCoroutineScope
1113import androidx.compose.ui.Modifier
1214import androidx.compose.ui.graphics.Color
1315import androidx.compose.ui.graphics.RectangleShape
16+ import androidx.compose.ui.text.TextRange
1417import androidx.compose.ui.text.TextStyle
1518import androidx.compose.ui.text.font.FontFamily
1619import androidx.compose.ui.text.font.FontStyle
20+ import androidx.compose.ui.text.input.ImeAction
21+ import androidx.compose.ui.text.input.KeyboardCapitalization
22+ import androidx.compose.ui.text.input.KeyboardType
1723import androidx.compose.ui.text.input.OffsetMapping
24+ import androidx.compose.ui.text.input.TextFieldValue
1825import androidx.compose.ui.text.input.TransformedText
1926import androidx.compose.ui.unit.em
2027import androidx.compose.ui.unit.sp
@@ -65,8 +72,8 @@ fun Console(modifier: Modifier, state: ConsoleState = remember { State.console }
6572 )
6673
6774 TextField (
68- modifier = modifier,
69- value = state.text ,
75+ modifier = modifier. HandleKeyEvents () ,
76+ value = state.textFieldValue ,
7077 singleLine = false ,
7178 maxLines = Int .MAX_VALUE ,
7279 colors = colors,
@@ -81,18 +88,29 @@ fun Console(modifier: Modifier, state: ConsoleState = remember { State.console }
8188 isError = false ,
8289 visualTransformation = {
8390 TransformedText (
84- processInput(state.text ),
91+ processInput(state.textFieldValue ),
8592 OffsetMapping .Identity
8693 )
8794 },
88- onValueChange = {
89- state.setText(processInput(it).toString())
95+ onValueChange = { value: TextFieldValue ->
96+ if (! shouldNotChange(value.text)) {
97+ val result = processInput(value).toString()
98+ state.setTextFieldValue(
99+ TextFieldValue (result, TextRange (result.length))
100+ )
101+ }
90102 },
103+ keyboardOptions = KeyboardOptions (
104+ capitalization = KeyboardCapitalization .None ,
105+ autoCorrect = true ,
106+ keyboardType = KeyboardType .Text ,
107+ imeAction = ImeAction .Send ,
108+ ),
91109 )
92110
93111 coroutineScope.launch {
94112 state.printMessageFlow().collect {
95- state.setText(processInput(state.text + it).toString())
113+ state.setText(processInput(TextFieldValue ( state.textFieldValue. text + it)) .toString(), true )
96114 }
97115 }
98116}
0 commit comments