From a4c8dcb9aaeb3ad7c179ea86c5ba3bcb5ee3e3fe Mon Sep 17 00:00:00 2001 From: Kevinlinpr Date: Thu, 22 Aug 2024 21:21:07 +0800 Subject: [PATCH] =?UTF-8?q?Gemini=E4=BC=98=E5=8C=96=E5=9B=BE=E7=89=87?= =?UTF-8?q?=E6=BB=9A=E5=8A=A8=E7=BC=93=E5=AD=98=E9=97=AE=E9=A2=98=E3=80=8C?= =?UTF-8?q?=E5=BE=85=E9=AA=8C=E8=AF=81=E3=80=8D=E8=A7=81ImageListScreen.kt?= =?UTF-8?q?=E4=B8=AD=E7=9A=84ImageListScreen=E8=A7=86=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/aiosman/riderpro/ImageListScreen.kt | 67 +++++++++++++++++++ .../com/aiosman/riderpro/ui/login/login.kt | 16 ++++- 2 files changed, 81 insertions(+), 2 deletions(-) create mode 100644 app/src/main/java/com/aiosman/riderpro/ImageListScreen.kt diff --git a/app/src/main/java/com/aiosman/riderpro/ImageListScreen.kt b/app/src/main/java/com/aiosman/riderpro/ImageListScreen.kt new file mode 100644 index 0000000..0bf658d --- /dev/null +++ b/app/src/main/java/com/aiosman/riderpro/ImageListScreen.kt @@ -0,0 +1,67 @@ +import android.content.Context +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.* +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.items +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.unit.dp +import coil.compose.rememberAsyncImagePainter +import coil.request.ImageRequest +import coil.ImageLoader +import coil.disk.DiskCache +import coil.memory.MemoryCache + +data class ImageItem(val url: String) + +@Composable +fun ImageListScreen(context: Context, imageList: List) { + val imageLoader = getImageLoader(context) + + LazyColumn( + modifier = Modifier.fillMaxSize(), + contentPadding = PaddingValues(16.dp) + ) { + items(imageList) { item -> + ImageItem(item, imageLoader, context) // 传递 context 参数 + } + } +} + +@Composable +fun ImageItem(item: ImageItem, imageLoader: ImageLoader, context: Context) { // 接收 context 参数 + val painter = rememberAsyncImagePainter( + model = ImageRequest.Builder(context) // 使用 context 参数 + .data(item.url) + .crossfade(true) + .build(), + imageLoader = imageLoader + ) + + Image( + painter = painter, + contentDescription = null, + modifier = Modifier + .fillMaxWidth() + .height(200.dp), + contentScale = ContentScale.Crop + ) + Spacer(modifier = Modifier.height(16.dp)) +} + +fun getImageLoader(context: Context): ImageLoader { + return ImageLoader.Builder(context) + .memoryCache { + MemoryCache.Builder(context) + .maxSizePercent(0.25) // 设置内存缓存大小为可用内存的 25% + .build() + } + .diskCache { + DiskCache.Builder() + .directory(context.cacheDir.resolve("image_cache")) + .maxSizePercent(0.02) // 设置磁盘缓存大小为可用存储空间的 2% + .build() + } + .build() +} \ No newline at end of file diff --git a/app/src/main/java/com/aiosman/riderpro/ui/login/login.kt b/app/src/main/java/com/aiosman/riderpro/ui/login/login.kt index 146d388..3bfd805 100644 --- a/app/src/main/java/com/aiosman/riderpro/ui/login/login.kt +++ b/app/src/main/java/com/aiosman/riderpro/ui/login/login.kt @@ -24,6 +24,8 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp +import androidx.navigation.NavOptions +import androidx.navigation.navOptions import com.aiosman.riderpro.LocalNavController import com.aiosman.riderpro.R import com.aiosman.riderpro.ui.NavigationRoute @@ -83,7 +85,12 @@ fun LoginPage() { text = "Login in".uppercase(), backgroundImage = R.mipmap.rider_pro_grey_bg_big ) { - navController.navigate(NavigationRoute.UserAuth.route) + navController.navigate( + NavigationRoute.UserAuth.route, + navOptions { + popUpTo(navController.currentDestination?.id ?: 0) { inclusive = true } + } + ) } ActionButton( modifier = Modifier @@ -92,7 +99,12 @@ fun LoginPage() { text = "Sign In".uppercase(), backgroundImage = R.mipmap.rider_pro_red_bg_big ){ - navController.navigate(NavigationRoute.SignUp.route) + navController.navigate( + NavigationRoute.SignUp.route, + navOptions { + popUpTo(navController.currentDestination?.id ?: 0) { inclusive = true } + } + ) } } }