Skip to content

Commit 3fc7e62

Browse files
committed
Scrollbar as LinearProgressIndicator
1 parent 3c93aa8 commit 3fc7e62

2 files changed

Lines changed: 29 additions & 5 deletions

File tree

android-compose-app/build.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ android {
2020
applicationId = "com.softartdev.noteroom"
2121
minSdk = libs.versions.minSdk.get().toInt()
2222
targetSdk = libs.versions.targetSdk.get().toInt()
23-
versionCode = 836
24-
versionName = "8.3.6"
23+
versionCode = 837
24+
versionName = "8.3.7"
2525
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
2626
testInstrumentationRunnerArguments["clearPackageData"] = "true"
2727
vectorDrawables.useSupportLibrary = true

shared/src/commonMain/kotlin/com/softartdev/notedelight/ui/NoteDetail.kt

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,10 @@ package com.softartdev.notedelight.ui
55
import androidx.compose.desktop.ui.tooling.preview.Preview
66
import androidx.compose.foundation.layout.Column
77
import androidx.compose.foundation.layout.fillMaxWidth
8+
import androidx.compose.foundation.layout.imePadding
89
import androidx.compose.foundation.layout.padding
10+
import androidx.compose.foundation.rememberScrollState
11+
import androidx.compose.foundation.verticalScroll
912
import androidx.compose.material.icons.Icons
1013
import androidx.compose.material.icons.automirrored.filled.ArrowBack
1114
import androidx.compose.material.icons.filled.Delete
@@ -24,7 +27,9 @@ import androidx.compose.material3.TopAppBar
2427
import androidx.compose.runtime.Composable
2528
import androidx.compose.runtime.LaunchedEffect
2629
import androidx.compose.runtime.MutableState
30+
import androidx.compose.runtime.State
2731
import androidx.compose.runtime.collectAsState
32+
import androidx.compose.runtime.derivedStateOf
2833
import androidx.compose.runtime.getValue
2934
import androidx.compose.runtime.mutableStateOf
3035
import 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

Comments
 (0)