Ответ
Сейчас работаю над приложением для доставки еды. Основные технологии: Kotlin, Jetpack Compose, Retrofit, Room, Dagger Hilt.
Пример фрагмента кода с ViewModel:
@HiltViewModel
class RestaurantViewModel @Inject constructor(
private val repository: RestaurantRepository
) : ViewModel() {
private val _restaurants = MutableStateFlow<List<Restaurant>>(emptyList())
val restaurants: StateFlow<List<Restaurant>> = _restaurants
init {
viewModelScope.launch {
repository.fetchRestaurants().collect { _restaurants.value = it }
}
}
}
Приложение включает онлайн-заказ, кэширование данных и push-уведомления.
Ответ 18+ 🔞
Боже, сижу тут, ебать мои старые костыли, пилю это приложение для доставки еды. Чувак, понимаешь, все хотят жрать, но чтобы из дома не выходить — вот и весь бизнес-план, ёпта.
Технологии выбрал, вроде, стандартные, но без них нихуя не работает. Kotlin, Jetpack Compose — ну, современно же, блядь. Не на каких-то древних вьюхах с кучей бойлерплейта. Retrofit для того, чтобы с сервером общаться, Room — чтобы кэшировать, если интернет накрылся медным тазом. А Dagger Hilt... Ну, это такая хитрая жопа, которая зависимости внедряет. Сначала охуевал от него, но потом привык — удобная штука, хоть и выглядит как пиздопроебибна магия.
Вот смотри, кусочек кода из ViewModel. Это такая штука, которая данные хранит и логикой управляет, даже когда экран свернули.
@HiltViewModel
class RestaurantViewModel @Inject constructor(
private val repository: RestaurantRepository
) : ViewModel() {
private val _restaurants = MutableStateFlow<List<Restaurant>>(emptyList())
val restaurants: StateFlow<List<Restaurant>> = _restaurants
init {
viewModelScope.launch {
repository.fetchRestaurants().collect { _restaurants.value = it }
}
}
}
Видишь, @HiltViewModel и @Inject constructor? Это Hilt работает, он сам понимает, откуда этот RestaurantRepository взять и впендюрить его сюда. Без этого пришлось бы вручную всё собирать, терпения ноль ебать. А тут — красота. В init блоке просто запускаем корутину, загружаем список ресторанов из репозитория и кладём в StateFlow. Композ сам будет следить за этим потоком и интерфейс обновлять. Удобно, бля.
В самом приложении, конечно, овердохуища всего: онлайн-заказ, чтобы деньги с карты списывало, кэширование — чтобы, если сеть лагает, последние заказы и меню показывало, а не белый экран. Ну и пуш-уведомления, это святое. «Ваш шашлык уже у подъезда, выходите, пока курьер не съел». Без этого вообще никак, чувак.
В общем, сижу, бля, пашу. Иногда кажется, что проще самому сходить в магазин, чем эту всю хуйню с апишками и базой данных отлаживать. Но зато когда всё работает — прям волнение ебать, приятно.