В методе несколько лямбд. Не всегда понятно, какие именно лямбды надо передать, чтобы логика правильно отработала
Всем привет! Я новичок в Андроиде, и мне очень нужна ваша помощь. Методу передаются аргументы-лямбды, их количество постепенно растет - switchToTab, updateContent, addProductsToCart. Набор аргументов, которые надо передать, всегда зависит от передаваемого DetailsModel. Необходимо переработать api метода или вынести в какой-нибудь отдельный класс. Можно передать все лямбды при переходе на любой из экранов. Как это сделать? Помогите, пожалуйста.
protected fun routing(
detailsModel: DetailsModel?,
router: AppRouter,
switchToTab: (tab: RootTab) -> Unit = {},
updateContent: (contentId: Long) -> Unit = {},
addProductsToCart: (items: List<CartProductChange>, promocode: String?) -> Unit = { _, _ -> }
) {
detailsModel?.let { details ->
Timber.d("routing: $details")
when (details.routeType) {
is DetailsModel.RouteType.Category -> {
router.navigateTo(
CatalogScreens.Products(
childCatalogId = details.routeType.childCategoryId,
productsType = ProductsType.Category,
routerName = router.name,
categoryTitle = details.title
)
)
}
is DetailsModel.RouteType.Promo -> {
router.navigateTo(
CatalogScreens.Products(
childCatalogId = details.routeType.promoId,
productsType = ProductsType.Promo,
routerName = router.name,
categoryTitle = details.title
)
)
}
Посмотрите, пожалуйста, верно ли я создаю класс?
class Routing{
val detailsModel: DetailsModel? = null
val router: AppRouter
get() {}
fun switchToTab (tab: RootTab){}
fun updateCorner (cornerId: Long){}
fun addProductsToCart (items: List<CartProductChange>, promocode: String?){}
}
Ответы (1 шт):
я бы сделал все это все классом. В базовом классе этот вот метод, и 3 абстрактных не определенных метода (либо дефолтных открытых). От базового класса вы наследуете нужное кол-во дочерних классов, и используете их в местах вызова этой функции. Так, вы сможете завести любое кол-во методов, а так же иметь какую-то базовую реализацию (если она нужна) и дополнительно избежите дублирования.