【发布时间】:2021-09-06 14:13:01
【问题描述】:
我有一个可组合的照片,允许用户从他们的移动图库中提取照片。
我想从 Util 类/功能中获得此功能/服务,因为我有其他需要相同服务的可组合项,并且我不想继续复制/粘贴相同的代码。
这也允许我通过将 Mime 类型从 launch { } 更改来使用它来获取文档
但这对我来说看起来很棘手。如果我使用 @Composable 函数,我不能使用 .launch
另外,如果我将其作为具有 rememberLauncherForActivityResult 值的类保存,则需要可组合。
有什么帮助吗?
@OptIn(ExperimentalCoilApi::class)
@Composable
fun ContactPagePhoto() {
val imageUriState = remember {
mutableStateOf<Uri?>(null)
}
val pickingUp = rememberLauncherForActivityResult(ActivityResultContracts.GetContent()) {
imageUriState.value = it
}
Box(
contentAlignment = Alignment.Center,
modifier = Modifier
.layoutId("userPhoto")
.fillMaxHeight(0.4f)
.fillMaxWidth(1f)
) {
imageUriState.value?.let {
Image(
modifier = Modifier
.align(Alignment.TopCenter)
.fillMaxSize(1f),
contentDescription = "UserImage",
contentScale = ContentScale.Crop,
painter = rememberImagePainter(data = it)
)
}
}
TextButton(
onClick = { pickingUp.launch("image/*") },
modifier = Modifier.layoutId("changePhoto")
) {
Text(
text = "Change Photo",
color = Color.Black)
}
}
我希望如何使用它... 在 ``util``` 包中,我想创建一个具有我需要的服务的新 kotlin 文件
我可以使用一个@Composable 函数,它允许我使用rememberLauncherForActivityResult
或创建一个类并将其扩展为 MainActivity 以访问 ComponentActivity() 并使用 registerForActivityResult 获取 Uri
喜欢
class PickUp(){
val launcher = registerForActivityResult...
}
或
@Composable
fun pickup():MutableState<Uri>{
rememberLauncherForActivityResult ...
}
只是建议...
【问题讨论】:
-
哪部分
rememberLauncherForActivityResult需要搬出去? -
是的,我需要在单独的文件中删除此服务,以便我可以使用 .launch{...} 从其他可组合访问它
-
请添加一些您希望如何使用它的代码。
-
@PhilipDukhov 我编辑了这个问题...
标签: android kotlin android-jetpack-compose