Colton Idle
09/13/2024, 4:13 PMColton Idle
09/13/2024, 4:16 PMif (showRatingPrompt == true) {
TextButton(
onClick = {
viewModel.screenState.showRatingPrompt = false
val manager = ReviewManagerFactory.create(context)
val request = manager.requestReviewFlow()
request.addOnCompleteListener { task ->
if (task.isSuccessful) {
// We got the ReviewInfo object
val reviewInfo = task.result
val flow = manager.launchReviewFlow(activity, reviewInfo)
flow.addOnCompleteListener { _ ->
// The flow has finished. The API does not indicate whether the user
// reviewed or not, or even whether the review dialog was shown. Thus, no
// matter the result, we continue our app flow.
}
} else {
// There was some problem, log or handle the error code.
@ReviewErrorCode
val reviewErrorCode = (task.exception as ReviewException).errorCode
}
}
}) {
Text("Text")
}
}
The review prompt code is basically copy/pasta from googles example, but I guess I'm sorta worried on what happens since the clickable launches some async code/listener.Colton Idle
09/13/2024, 4:17 PMStylianos Gakis
09/13/2024, 4:42 PMColton Idle
09/13/2024, 4:49 PMColton Idle
09/13/2024, 4:49 PMFrancesc
09/14/2024, 1:08 AMLaunchedEffect
keyed off the showRatingPromp
flag, and do your launching of the review flow thereFrancesc
09/14/2024, 1:09 AMLaunchedEffect(key1 = state.showReviewDialog) {
if (state.showReviewDialog) {
context.locateActivity()?.let { activity ->
launchInAppReview(activity) {
eventSink(CalculatorScreen.Event.ReviewDialogShown(it))
}
} ?: eventSink(CalculatorScreen.Event.ReviewDialogShown(false))
}
}
with
private fun launchInAppReview(activity: Activity, completeListener: (Boolean) -> Unit) {
val reviewManager = ReviewManagerFactory.create(activity)
val requestReviewFlow = reviewManager.requestReviewFlow()
requestReviewFlow.addOnCompleteListener { request ->
if (request.isSuccessful) {
val reviewInfo = request.result
reviewManager.launchReviewFlow(activity, reviewInfo)
completeListener(true)
} else {
completeListener(false)
}
}
}
Colton Idle
09/16/2024, 3:08 AMFrancesc
09/17/2024, 3:05 AMviewModel.screenState.showRatingPrompt = false
the viewmodel should own its state, here the UI is updating the viewmodel's stateColton Idle
09/17/2024, 5:54 PM