@@ -21,7 +21,9 @@ import androidx.compose.foundation.layout.imePadding
2121import androidx.compose.foundation.layout.padding
2222import androidx.compose.foundation.layout.size
2323import androidx.compose.foundation.layout.width
24+ import androidx.compose.foundation.rememberScrollState
2425import androidx.compose.foundation.shape.RoundedCornerShape
26+ import androidx.compose.foundation.verticalScroll
2527import androidx.compose.runtime.Composable
2628import androidx.compose.runtime.getValue
2729import androidx.compose.runtime.mutableStateOf
@@ -31,6 +33,8 @@ import androidx.compose.runtime.rememberUpdatedState
3133import androidx.compose.runtime.setValue
3234import androidx.compose.ui.Alignment
3335import androidx.compose.ui.Modifier
36+ import androidx.compose.ui.graphics.Brush
37+ import androidx.compose.ui.graphics.Color
3438import androidx.compose.ui.graphics.vector.ImageVector
3539import androidx.compose.ui.platform.LocalClipboard
3640import androidx.compose.ui.platform.LocalContext
@@ -134,31 +138,20 @@ private fun InviteCodeScreen(
134138 onComplete : () -> Unit ,
135139 onCopyInviteCode : () -> Unit ,
136140) {
141+ val scrollState = rememberScrollState()
142+
137143 Box (
138144 modifier =
139145 Modifier
140146 .fillMaxSize()
141147 .background(CommonColor .White ),
142148 ) {
143- Box (
149+ Column (
144150 modifier =
145151 Modifier
146- .fillMaxWidth()
147- .height(72 .dp)
148- .padding(horizontal = 10 .dp, vertical = 14 .dp),
149- contentAlignment = Alignment .CenterStart ,
152+ .fillMaxSize()
153+ .verticalScroll(scrollState),
150154 ) {
151- Image (
152- imageVector = ImageVector .vectorResource(R .drawable.ic_arrow_m_left),
153- contentDescription = null ,
154- modifier =
155- Modifier
156- .size(44 .dp)
157- .noRippleClickable(onClick = navigateToBack),
158- )
159- }
160-
161- Column {
162155 Spacer (modifier = Modifier .height(8 .dp))
163156
164157 AnimatedVisibility (
@@ -255,6 +248,29 @@ private fun InviteCodeScreen(
255248 )
256249 }
257250
251+ Box (
252+ modifier =
253+ Modifier
254+ .fillMaxWidth()
255+ .height(72 .dp)
256+ .padding(horizontal = 10 .dp, vertical = 14 .dp),
257+ contentAlignment = Alignment .CenterStart ,
258+ ) {
259+ Image (
260+ imageVector = ImageVector .vectorResource(R .drawable.ic_arrow_m_left),
261+ contentDescription = null ,
262+ modifier =
263+ Modifier
264+ .size(44 .dp)
265+ .noRippleClickable(onClick = navigateToBack),
266+ )
267+ }
268+
269+ TopGradientOverlay (
270+ visible = scrollState.value > 0 ,
271+ modifier = Modifier .align(Alignment .TopCenter ),
272+ )
273+
258274 AppButton (
259275 text = stringResource(R .string.onboarding_profile_button_title),
260276 onClick = { onComplete() },
@@ -272,6 +288,37 @@ private fun InviteCodeScreen(
272288 }
273289}
274290
291+ @Composable
292+ private fun TopGradientOverlay (
293+ visible : Boolean ,
294+ modifier : Modifier = Modifier ,
295+ ) {
296+ AnimatedVisibility (
297+ visible = visible,
298+ enter = fadeIn(),
299+ exit = fadeOut(),
300+ modifier = modifier,
301+ ) {
302+ Box (
303+ modifier =
304+ Modifier
305+ .fillMaxWidth()
306+ .height(96 .dp)
307+ .background(
308+ brush =
309+ Brush .verticalGradient(
310+ colors =
311+ listOf (
312+ CommonColor .White ,
313+ CommonColor .White .copy(alpha = 0.6f ),
314+ Color .Transparent ,
315+ ),
316+ ),
317+ ),
318+ )
319+ }
320+ }
321+
275322@Preview(showBackground = true )
276323@Composable
277324private fun InviteCodeScreenPreview () {
0 commit comments