@@ -5,7 +5,10 @@ package com.softartdev.notedelight.ui
55import androidx.compose.desktop.ui.tooling.preview.Preview
66import androidx.compose.foundation.layout.Column
77import androidx.compose.foundation.layout.fillMaxWidth
8+ import androidx.compose.foundation.layout.imePadding
89import androidx.compose.foundation.layout.padding
10+ import androidx.compose.foundation.rememberScrollState
11+ import androidx.compose.foundation.verticalScroll
912import androidx.compose.material.icons.Icons
1013import androidx.compose.material.icons.automirrored.filled.ArrowBack
1114import androidx.compose.material.icons.filled.Delete
@@ -24,7 +27,9 @@ import androidx.compose.material3.TopAppBar
2427import androidx.compose.runtime.Composable
2528import androidx.compose.runtime.LaunchedEffect
2629import androidx.compose.runtime.MutableState
30+ import androidx.compose.runtime.State
2731import androidx.compose.runtime.collectAsState
32+ import androidx.compose.runtime.derivedStateOf
2833import androidx.compose.runtime.getValue
2934import androidx.compose.runtime.mutableStateOf
3035import androidx.compose.runtime.remember
@@ -87,6 +92,7 @@ fun NoteDetailBody(
8792 textState : MutableState <String > = mutableStateOf("Text "),
8893 snackbarHostState : SnackbarHostState = remember { SnackbarHostState () },
8994) = Scaffold (
95+ modifier = Modifier .imePadding(),
9096 topBar = {
9197 TopAppBar (
9298 title = { Text (text = titleState.value, maxLines = 1 ) },
@@ -127,11 +133,29 @@ fun NoteDetailBody(
127133 modifier = Modifier .padding(paddingValues),
128134 horizontalAlignment = Alignment .CenterHorizontally
129135 ) {
130- if (result.loading) LinearProgressIndicator (modifier = Modifier .fillMaxWidth())
136+ val scrollState = rememberScrollState()
137+ val scrollProgressState: State <Float > = remember {
138+ derivedStateOf {
139+ val progress = scrollState.value.toFloat() / scrollState.maxValue.toFloat()
140+ return @derivedStateOf if (progress.isNaN()) 0f else progress
141+ }
142+ }
143+ when {
144+ result.loading -> LinearProgressIndicator (modifier = Modifier .fillMaxWidth())
145+ scrollProgressState.value > 0f -> LinearProgressIndicator (
146+ modifier = Modifier .fillMaxWidth(),
147+ progress = scrollProgressState::value,
148+ drawStopIndicator = {}
149+ )
150+ }
131151 TextField (
152+ modifier = Modifier
153+ .weight(1F )
154+ .fillMaxWidth()
155+ .padding(8 .dp)
156+ .verticalScroll(state = scrollState),
132157 value = textState.value,
133- onValueChange = { textState.value = it },
134- modifier = Modifier .weight(1F ).fillMaxWidth().padding(8 .dp),
158+ onValueChange = textState::value::set,
135159 label = { Text (stringResource(Res .string.type_text)) },
136160 )
137161 }
0 commit comments