Как реализовать ожидающее действие в зависимости от штатаAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как реализовать ожидающее действие в зависимости от штата

Сообщение Anonymous »

Я работаю над приложением Android, где пользователи могут добавлять продукты в корзину, но есть условный поток, основанный на том, выбран ли адрес доставки или нет:
1. Если адрес уже выбран, продукт немедленно добавляется в корзину.
2. Если адрес не выбран, приложение перемещается на экран выбора адреса. Как только пользователь выбирает адрес, исходное действие (добавление продукта) должно быть выполнено. < /P>
fun addProductToCart(
scope: CoroutineScope,
product: ProductParams,
) {
addressJob = getCurrentDeliveryAddressUseCase()
.onEach { deliveryAddress ->
if (deliveryAddress == null) {
deliveryAddressHelper.selectDeliveryAddress()
}
}
.filterNotNull()
.take(1)
.onEach {
addToCart(
scope = scope,
product = product,
)
}
.launchIn(scope)
}

suspend fun selectDeliveryAddress() {
runCatchingCancellable {
val addresses = getDeliveryLastAddresses.invoke()
if (addresses.isNotEmpty()) {
navigator.goForward(
DsDeliveryScreens.DeliveryAddressSelection(
addresses = addresses,
observerId = 1,
)
)
} else {
val deliveryArea = getDeliveryAreasUseCase.invoke()
navigator.goForward(
DsBaseHostScreen(
DsDeliveryScreens.DeliveryAddressMap(
deliveryAreas = deliveryArea,
)
)
)
}
}
}
< /code>
Короче говоря, если адрес не выбран, мы перемещаемся на экран выбора. Как только пользователь выбрал адрес, GetCurrentDeliveryAddressuseCase () издает выбранный адрес, и продукт добавлен. В идеале, я хотел бы отложить действие (например, лямбда) и выполнить его после выбора адреса, к сожалению, котлин лямбдас не являются сериализуемыми , поэтому я не могу просто передавать их легко на экран выбора адреса (Deliveraddressmap). Я рассматривал возможность использования шаблона шины события , но это добавляет большую сложность и все еще ощущается как обходной путь. Какой самый чистый способ справиться с этим.

Подробнее здесь: https://stackoverflow.com/questions/795 ... g-on-state
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»