Jetpack Compose: интерфейс Pass с 12 функциями, событиями запечатанного класса или 12 обратными вызовами?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Jetpack Compose: интерфейс Pass с 12 функциями, событиями запечатанного класса или 12 обратными вызовами?

Сообщение Anonymous »

Я создаю пользовательский интерфейс Jetpack Compose, и мне нужен совет о том, как лучше всего обрабатывать события пользовательского интерфейса и общаться из Composable → ViewModel.
В настоящее время мой Composable выглядит так:

Код: Выделить всё

// Main screen
fun SearchCardScreen(
viewModel: SuggestionVM = koinViewModel(),
navController: NavController
) {

val searchState by viewModel.state.collectAsStateWithLifecycle()

MainSearchCard(
searchState = searchState,
onEvent = viewModel
)
}

@Composable
fun MainSearchCard(
searchState: SearchState,
onEvent: SearchEvents, // not sure about this
)
Сейчас я использую интерфейс для передачи событий:

Код: Выделить всё

interface SearchEvents {
fun onFromChanged(value: String)
fun onToChanged(value: String)
fun swapStations()
fun openDatePicker()
fun search()
// ... total 12 functions here
}
И моя ViewModel реализует это:

Код: Выделить всё

class SuggestionVM(...) : ViewModel(), SearchEvents {
// overrides for all 12 functions
}
Но я не уверен, что это хорошая архитектура в Compose.
Я вижу 3 разных варианта, но не знаю, что выбрать:
Пример варианта
Передать интерфейс с 12 методами (текущий)

onEvent: SearchEvents

Использовать один обработчик событий с запечатанным классом

onEvent: (SearchEvent) -> Unit

Передавать 12 отдельных обратных вызовов

onFromChange, onToChange, ...

Какой вариант рекомендуется в Jetpack Compose для чистой архитектуры и производительности?
Должен ли я:
  • Передавать ViewModel напрямую (не следует этого делать),
  • Передавать интерфейс, например SearchEvents,
  • Использовать обратный вызов одного события с запечатанным классом события
  • Или передать 12 отдельных обратных вызовов?


Подробнее здесь: https://stackoverflow.com/questions/797 ... s-or-12-ca
Ответить

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

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

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

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

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