Над каким приложением работаешь

Ответ

Сейчас работаю над приложением для доставки еды. Основные технологии: 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. Композ сам будет следить за этим потоком и интерфейс обновлять. Удобно, бля.

В самом приложении, конечно, овердохуища всего: онлайн-заказ, чтобы деньги с карты списывало, кэширование — чтобы, если сеть лагает, последние заказы и меню показывало, а не белый экран. Ну и пуш-уведомления, это святое. «Ваш шашлык уже у подъезда, выходите, пока курьер не съел». Без этого вообще никак, чувак.

В общем, сижу, бля, пашу. Иногда кажется, что проще самому сходить в магазин, чем эту всю хуйню с апишками и базой данных отлаживать. Но зато когда всё работает — прям волнение ебать, приятно.