From fde7a0ad959209663ca804b04bcf53d38b6797d1 Mon Sep 17 00:00:00 2001 From: AllenTom Date: Wed, 23 Oct 2024 21:09:59 +0800 Subject: [PATCH] =?UTF-8?q?=E9=97=AE=E9=A2=98=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/aiosman/riderpro/ui/post/NewPost.kt | 79 ++++++++++--------- 1 file changed, 43 insertions(+), 36 deletions(-) diff --git a/app/src/main/java/com/aiosman/riderpro/ui/post/NewPost.kt b/app/src/main/java/com/aiosman/riderpro/ui/post/NewPost.kt index 5bb17c8..4e2c969 100644 --- a/app/src/main/java/com/aiosman/riderpro/ui/post/NewPost.kt +++ b/app/src/main/java/com/aiosman/riderpro/ui/post/NewPost.kt @@ -4,7 +4,6 @@ import android.net.Uri import android.widget.Toast import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.result.contract.ActivityResultContracts -import androidx.compose.animation.AnimatedVisibility import androidx.compose.foundation.Image import androidx.compose.foundation.background import androidx.compose.foundation.clickable @@ -27,7 +26,8 @@ import androidx.compose.foundation.lazy.grid.GridCells import androidx.compose.foundation.lazy.grid.LazyVerticalGrid import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.text.BasicTextField -import androidx.compose.material.LinearProgressIndicator +import androidx.compose.material.CircularProgressIndicator +import androidx.compose.material3.BasicAlertDialog import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon import androidx.compose.material3.ModalBottomSheet @@ -42,6 +42,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.drawBehind +import androidx.compose.ui.draw.shadow import androidx.compose.ui.geometry.CornerRadius import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.PathEffect @@ -50,6 +51,7 @@ import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.painterResource import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.core.content.FileProvider @@ -67,6 +69,7 @@ import kotlinx.coroutines.launch import java.io.File +@OptIn(ExperimentalMaterial3Api::class) @Preview @Composable fun NewPostScreen() { @@ -78,6 +81,8 @@ fun NewPostScreen() { systemUiController.setNavigationBarColor(color = Color.Transparent) model.init() } + + StatusBarMaskLayout( darkIcons = true, modifier = Modifier @@ -89,13 +94,6 @@ fun NewPostScreen() { .fillMaxSize() ) { NewPostTopBar { -// model.viewModelScope.launch { -// model.createMoment(context = context){ progress -> -// // 更新进度条 -// uploadProgress = progress -// } -// navController.popBackStack() -// } } NewPostTextField("Share your adventure…", NewPostViewModel.textContent) { NewPostViewModel.textContent = it @@ -128,13 +126,35 @@ fun NewPostScreen() { } } +@OptIn(ExperimentalMaterial3Api::class) @Composable fun NewPostTopBar(onSendClick: () -> Unit = {}) { + var uploading by remember { mutableStateOf(false) } + // 上传进度 + if (uploading) { + BasicAlertDialog( + onDismissRequest = { }, + ) { + Box( + modifier = Modifier + .fillMaxWidth() + .clip(RoundedCornerShape(64.dp)).shadow(elevation = 4.dp) + .background(Color.White).padding(16.dp), + contentAlignment = Alignment.CenterStart + ) { + + CircularProgressIndicator( + modifier = Modifier.size(24.dp), + color = Color(0xffda3832) + ) + Spacer(modifier = Modifier.width(8.dp)) + Text("Uploading", modifier = Modifier.fillMaxWidth(), textAlign = TextAlign.Center) + } + } + } val navController = LocalNavController.current val context = LocalContext.current val model = NewPostViewModel - var showProgressBar by remember { mutableStateOf(false) } - var uploadProgress by remember { mutableStateOf(0f) } Box( modifier = Modifier .fillMaxWidth() @@ -166,38 +186,26 @@ fun NewPostTopBar(onSendClick: () -> Unit = {}) { Toast.makeText(context, errorMessage, Toast.LENGTH_SHORT).show() return@noRippleClickable } - // 点击发送按钮后立即导航回主页 - navController.popBackStack() - // 显示进度条 - showProgressBar = true - - // 在后台启动协程处理上传逻辑 model.viewModelScope.launch { - model.createMoment(context = context) { progress -> - // 更新进度条 - uploadProgress = progress + try { + uploading = true + model.createMoment(context = context) { progress -> + // 更新进度条 + } + navController.popBackStack() + }catch (e:Exception) { + e.printStackTrace() + }finally { + uploading = false } + // 上传完成后隐藏进度条 - showProgressBar = false + } } ) } - // 在底部添加一个进度条 - AnimatedVisibility( - visible = showProgressBar, - modifier = Modifier - .align(Alignment.BottomCenter) - .fillMaxWidth() - ) { - LinearProgressIndicator( - progress = uploadProgress, - modifier = Modifier - .fillMaxWidth() - .height(4.dp) - ) - } } } @@ -239,7 +247,6 @@ fun AddImageGrid() { for (uri in uris) { ImageItem.fromUri(context, uri.toString())?.let { model.imageList += it - } } }