Я работаю над приложением 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
Как реализовать ожидающее действие в зависимости от штата ⇐ Android
Форум для тех, кто программирует под Android
-
Anonymous
1745258959
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 () издает выбранный адрес, и продукт добавлен. В идеале, я хотел бы отложить действие (например, лямбда) и выполнить его после выбора адреса, к сожалению, котлин [b] лямбдас не являются сериализуемыми [/b], поэтому я не могу просто передавать их легко на экран выбора адреса (Deliveraddressmap). Я рассматривал возможность использования шаблона шины [b] события [/b], но это добавляет большую сложность и все еще ощущается как обходной путь. Какой самый чистый способ справиться с этим.
Подробнее здесь: [url]https://stackoverflow.com/questions/79585095/how-to-implement-a-pending-action-depending-on-state[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия