Chethan
10/29/2020, 12:10 PMviewModel.uploadImage(ContextAmbient.current, job, uri).observeAsState()
@Composable
fun SetImageUpdateProgressBar(
job: Job,
uri: Uri,
viewModel: UploadViewModel = viewModel()
) {
var result = viewModel.uploadImage(ContextAmbient.current, job, uri).observeAsState()
result?.value?.let { data ->
when (data.response.status) {
Status.ERROR -> {
// setRetryButton()
}
Status.SUCCESS -> {
ShowProgressBar(value = 0, visibility = false)
}
Status.LOADING -> {
ShowProgressBar(data.uploadProgressValue)
}
}
}
}
Grigorii Yurkov
10/29/2020, 12:15 PMLaunchedTask
functionLiveData
to the view model's property (uploadImage
should return Unit
)Chethan
10/29/2020, 1:56 PMGrigorii Yurkov
10/29/2020, 2:05 PMImageUploader
class with single LiveData
as property and upload
as function.
@Composable
fun MyFunction() {
val uploader = remember { ImageUploder.create(uri) }
LaunchedTask {
uploader.upload()
}
uploader.livedata.observeAsState()
}
Zach Klippenstein (he/him) [MOD]
10/29/2020, 2:06 PMJoost Klitsie
10/29/2020, 2:43 PMdata class ViewState(
val images: List<ImageViewState>
)
data class ImageViewState(
val uri: Uri // or whatever,
val showLoading: Boolean,
val showRetry: Boolean
)
Then your code:
@Composable
fun composeTheStuff() {
val viewState by viewModel.viewState.observeAsState()
viewState.images.foreach { imageViewState ->
imageInGrid(imageViewState, viewModel)
}
}
@Composable
fun imageInGrid(imageViewState: ImageViewState, viewModel) {
Box {
Image(modifier= Modifier.onClick({viewModel.uploadImage(imageViewState.uri)}))
AnimatedVisibility(show = imageViewState.showLoading) {
//.. loading state
}
AnimatedVisibility(show = imageViewState.showRetry) {
//.. retry state
}
}
}
Chethan
10/30/2020, 1:05 AM