@@ -21,19 +21,25 @@ import androidx.compose.foundation.gestures.Orientation
21
21
import androidx.compose.foundation.layout.Arrangement
22
22
import androidx.compose.foundation.layout.Box
23
23
import androidx.compose.foundation.layout.Column
24
+ import androidx.compose.foundation.layout.ExperimentalLayoutApi
25
+ import androidx.compose.foundation.layout.MutableWindowInsets
24
26
import androidx.compose.foundation.layout.Row
25
27
import androidx.compose.foundation.layout.Spacer
26
28
import androidx.compose.foundation.layout.WindowInsets
29
+ import androidx.compose.foundation.layout.asPaddingValues
30
+ import androidx.compose.foundation.layout.exclude
27
31
import androidx.compose.foundation.layout.fillMaxHeight
28
32
import androidx.compose.foundation.layout.fillMaxWidth
33
+ import androidx.compose.foundation.layout.height
34
+ import androidx.compose.foundation.layout.onConsumedWindowInsetsChanged
29
35
import androidx.compose.foundation.layout.padding
36
+ import androidx.compose.foundation.layout.safeContent
30
37
import androidx.compose.foundation.layout.safeDrawing
31
38
import androidx.compose.foundation.layout.size
32
39
import androidx.compose.foundation.layout.systemBars
33
40
import androidx.compose.foundation.layout.width
34
41
import androidx.compose.foundation.layout.windowInsetsBottomHeight
35
42
import androidx.compose.foundation.layout.windowInsetsPadding
36
- import androidx.compose.foundation.layout.windowInsetsTopHeight
37
43
import androidx.compose.foundation.lazy.LazyColumn
38
44
import androidx.compose.foundation.lazy.LazyListScope
39
45
import androidx.compose.foundation.lazy.rememberLazyListState
@@ -43,6 +49,7 @@ import androidx.compose.material3.MaterialTheme
43
49
import androidx.compose.material3.Text
44
50
import androidx.compose.runtime.Composable
45
51
import androidx.compose.runtime.getValue
52
+ import androidx.compose.runtime.remember
46
53
import androidx.compose.ui.Alignment
47
54
import androidx.compose.ui.Modifier
48
55
import androidx.compose.ui.platform.testTag
@@ -95,6 +102,7 @@ fun TopicScreen(
95
102
)
96
103
}
97
104
105
+ @OptIn(ExperimentalLayoutApi ::class )
98
106
@VisibleForTesting
99
107
@Composable
100
108
internal fun TopicScreen (
@@ -109,16 +117,23 @@ internal fun TopicScreen(
109
117
modifier : Modifier = Modifier ,
110
118
) {
111
119
val state = rememberLazyListState()
120
+ val remainingInsets = remember { MutableWindowInsets () }
121
+ val safeContent = WindowInsets .safeContent
112
122
TrackScrollJank (scrollableState = state, stateName = " topic:screen" )
113
123
Box (
114
- modifier = modifier,
124
+ modifier = modifier.onConsumedWindowInsetsChanged { consumedWindowInsets ->
125
+ remainingInsets.insets = safeContent.exclude(consumedWindowInsets)
126
+ }
115
127
) {
116
128
LazyColumn (
117
129
state = state,
118
130
horizontalAlignment = Alignment .CenterHorizontally ,
119
131
) {
120
132
item {
121
- Spacer (Modifier .windowInsetsTopHeight(WindowInsets .safeDrawing))
133
+ // Use actual remaining insets that has been consumed.
134
+ Spacer (
135
+ Modifier .height(remainingInsets.asPaddingValues().calculateTopPadding())
136
+ )
122
137
}
123
138
when (topicUiState) {
124
139
TopicUiState .Loading -> item {
0 commit comments