@@ -2,55 +2,50 @@ package st.slex.csplashscreen.ui.detail
22
33import androidx.compose.foundation.Image
44import androidx.compose.foundation.clickable
5- import androidx.compose.foundation.layout.Column
6- import androidx.compose.foundation.layout.fillMaxWidth
7- import androidx.compose.foundation.layout.height
5+ import androidx.compose.foundation.layout.*
6+ import androidx.compose.foundation.shape.CircleShape
7+ import androidx.compose.material.ExperimentalMaterialApi
8+ import androidx.compose.material.Surface
9+ import androidx.compose.material.Text
810import androidx.compose.runtime.Composable
911import androidx.compose.runtime.collectAsState
10- import androidx.compose.runtime.rememberCoroutineScope
12+ import androidx.compose.ui.Alignment
1113import androidx.compose.ui.Modifier
12- import androidx.compose.ui.graphics.Color
13- import androidx.compose.ui.platform.LocalContext
14+ import androidx.compose.ui.draw.clip
15+ import androidx.compose.ui.draw.shadow
16+ import androidx.compose.ui.text.font.FontFamily
17+ import androidx.compose.ui.unit.TextUnit
1418import androidx.compose.ui.unit.dp
1519import androidx.navigation.NavController
1620import coil.annotation.ExperimentalCoilApi
1721import coil.compose.rememberImagePainter
18- import coil.transform.BlurTransformation
1922import coil.transform.RoundedCornersTransformation
20- import com.google.accompanist.placeholder.PlaceholderHighlight
21- import com.google.accompanist.placeholder.fade
22- import com.google.accompanist.placeholder.placeholder
2323import kotlinx.coroutines.ExperimentalCoroutinesApi
2424import kotlinx.coroutines.flow.SharedFlow
25- import st.slex.csplashscreen.R
2625import st.slex.csplashscreen.data.model.ui.image.ImageModel
27- import st.slex.csplashscreen.ui.core.UIResult
26+ import st.slex.csplashscreen.ui.main.UserImageHead
27+ import st.slex.csplashscreen.ui.theme.Shapes
28+ import st.slex.csplashscreen.ui.theme.Typography
2829import java.net.URLEncoder
2930import java.nio.charset.StandardCharsets
3031
32+ @ExperimentalMaterialApi
3133@ExperimentalCoroutinesApi
3234@ExperimentalCoilApi
3335@Composable
3436fun ImageDetailScreen (
3537 url : String ,
3638 navController : NavController ,
37- imageFlow : () -> SharedFlow <UIResult < ImageModel > >
39+ imageFlow : () -> SharedFlow <ImageModel >
3840) {
39- val imageModel = imageFlow().collectAsState(
40- initial = UIResult .Loading ,
41- context = rememberCoroutineScope().coroutineContext
42- ).value
43-
44- when (imageModel) {
45- is UIResult .Success -> BindImage (navController, imageModel.data)
46- is UIResult .Loading -> BindImageLoading (url = url)
47- is UIResult .Failure -> BindImageFailure (url = url)
48- }
41+ val imageModel = imageFlow().collectAsState(initial = null ).value
42+ BindDetailImage (navController, imageModel)
4943}
5044
45+ @ExperimentalMaterialApi
5146@ExperimentalCoilApi
5247@Composable
53- private fun BindImage (navController : NavController , imageModel : ImageModel ) {
48+ private fun BindDetailImage (navController : NavController , imageModel : ImageModel ? ) {
5449 Column {
5550 Image (
5651 modifier = Modifier
@@ -59,68 +54,74 @@ private fun BindImage(navController: NavController, imageModel: ImageModel) {
5954 .clickable {
6055 val encodedUrl =
6156 URLEncoder .encode(
62- imageModel.urls.regular,
57+ imageModel? .urls? .regular,
6358 StandardCharsets .UTF_8 .toString()
6459 )
6560 navController.navigate(" raw_image/$encodedUrl " )
6661 },
6762 painter = rememberImagePainter(
68- data = imageModel.urls.regular,
63+ data = imageModel? .urls? .regular,
6964 builder = {
7065 transformations(RoundedCornersTransformation ())
7166 allowHardware(false )
7267 }
7368 ),
7469 contentDescription = " TestImage"
7570 )
71+
72+ Spacer (modifier = Modifier .padding(4 .dp))
73+
74+ UserImageHead (
75+ modifier = Modifier .padding(start = 16 .dp),
76+ username = imageModel?.user?.username.toString(),
77+ url = imageModel?.user?.profile_image?.medium.toString(),
78+ navController = navController
79+ )
7680 }
77- }
7881
79- @ExperimentalCoilApi
80- @Composable
81- private fun BindImageLoading (url : String ) {
82- androidx.compose.material.Surface (
83- modifier = Modifier
84- .height(300 .dp)
85- .fillMaxWidth()
86- .placeholder(
87- visible = true ,
88- highlight = PlaceholderHighlight .fade(highlightColor = Color .LightGray ),
89- color = Color .Gray
90- )
91- ) {}
9282
9383}
9484
9585@ExperimentalCoilApi
86+ @ExperimentalMaterialApi
9687@Composable
97- private fun BindImageFailure (url : String ) {
98-
99- Image (
88+ fun CurrentImageUser (username : String , url : String , navController : NavController ) {
89+ Surface (
10090 modifier = Modifier
10191 .fillMaxWidth()
102- .height(300 .dp),
103- painter = rememberImagePainter(
104- data = url,
105- builder = {
106- transformations(
107- RoundedCornersTransformation (),
108- BlurTransformation (LocalContext .current)
109- )
110- allowHardware(false )
111- crossfade(500 )
112- }
113- ),
114- contentDescription = " TestImage"
115- )
116- Image (
117- modifier = Modifier
118- .fillMaxWidth()
119- .height(300 .dp),
120- painter = rememberImagePainter(
121- data = R .drawable.ic_baseline_sentiment_very_dissatisfied_24
122- ),
123- contentDescription = " TestImage"
124- )
92+ .shadow(elevation = 0 .dp, Shapes .medium),
93+ onClick = {
94+ // navController.navigate("user_profile")
95+ }
96+ ) {
97+ Row (
98+ modifier = Modifier
99+ .padding(8 .dp),
100+ verticalAlignment = Alignment .CenterVertically
101+ ) {
102+ Image (
103+ modifier = Modifier
104+ .size(48 .dp)
105+ .clip(CircleShape ),
106+ painter = rememberImagePainter(
107+ data = url,
108+ builder = {
109+ allowHardware(false )
110+ crossfade(500 )
111+ }
112+ ),
113+ contentDescription = " User Avatar"
114+ )
115+ Spacer (modifier = Modifier .padding(8 .dp))
116+ Text (
117+ text = username,
118+ style = Typography .h5,
119+ maxLines = 1 ,
120+ lineHeight = TextUnit .Unspecified ,
121+ fontFamily = FontFamily .SansSerif
122+ )
123+ }
124+ }
125+
125126}
126127
0 commit comments