Android Hilt на практике с MVVM

Sdílet
Vložit
  • čas přidán 2. 07. 2024
  • Рассказываю простыми словами про Android Hilt на практике. Показываю реальный пример в коде с архитектурой Clean Architecture (Чистая архитектура), а так же разбираем, как использовать Dagger Hilt MVVM.
    Индивидуальные курсы по Android: ✅ KIPARO.COM.
    Документация по Hilt:
    dagger.dev/hilt/
    developer.android.com/trainin...
    СОДЕРЖАНИЕ:
    00:00:00 - введение
    00:00:50 - подключаем Hilt dependency injection
    00:02:16 - создаем App класс для Hilt
    00:04:05 - создаем модули Hilt
    00:09:32 - аннотация для ViewModel (MVVM)
    00:10:25 - аннотация для Activity
    00:11:33 - аннотация InstallIn для модулей в Hilt DI
    00:13:28 - полный обзор примера на практике
    00:15:30 - запускаем пример с Hilt, MVVM и clean architecture
    В плейлисте есть видео по MVVM и clean architecture.
    Так же, найти меня можно вот тут:
    ✅ Linkedin: / timofeykovalenko
    ✅ Instagram: / ttimofey
    ✅ На моем сайте: kiparo.com/teacher/timofey-ko...
    ✅ FB с анонсами видео: / kiparocom
    #android #hilt #kiparo

Komentáře • 41

  • @TimofeyKovalenko
    @TimofeyKovalenko  Před 2 lety +3

    СОДЕРЖАНИЕ:
    00:00:00 - введение
    00:00:50 - подключаем Hilt dependency injection
    00:02:16 - создаем App класс для Hilt
    00:04:05 - создаем модули Hilt
    00:09:32 - аннотация для ViewModel (MVVM)
    00:10:25 - аннотация для Activity
    00:11:33 - аннотация InstallIn для модулей в Hilt DI
    00:13:28 - полный обзор примера на практике
    00:15:30 - запускаем пример с Hilt, MVVM и clean architecture

  • @andriyshatynskyy5214
    @andriyshatynskyy5214 Před 2 lety +1

    Спасибо за уроки!!!

  • @user-bu7zr1kd1j
    @user-bu7zr1kd1j Před 2 lety

    Спасибо за ваш труд!

  • @TheDamiankain
    @TheDamiankain Před rokem

    Просто изумительный плейлст!

  • @moni_panica
    @moni_panica Před rokem

    Очень полезное видео, особенно после того, как прочёл документацию, сделал кодлабу и все равно мало что понял. А вот теперь посмотрел и hilt лег куда надо. Спасибо👏

  • @lirjarmuhametova8516
    @lirjarmuhametova8516 Před rokem +1

    Отличный курс! Тимофей, у Вас талант объяснять сложные вещи. Спасибо большое 👍🔥

  • @kenchukkk
    @kenchukkk Před 9 měsíci +1

    супер! спасибо за понятные и разжеванные обьяснения, хотелось бы видео про многопоточность: Coroutines, RxJava

  • @shakhriyarbadalov5628
    @shakhriyarbadalov5628 Před 9 měsíci

    Спасибо за видео про зависимости))

  • @abumusa8887
    @abumusa8887 Před 2 lety

    Спасибо за урок,
    если есть возможность ждем уроки про Socket )))

  • @videoedit6672
    @videoedit6672 Před 11 měsíci

    Спасибо, круто объясняете! Ждем уроки про многопоточность: Coroutines, RxJava))

  • @alexkoty5877
    @alexkoty5877 Před 2 lety +2

    Спасибо, очень круто!
    Расскажите пожалуйста про assisted injection во второй части :)

  • @spyro2008
    @spyro2008 Před 3 měsíci

    Спасибо!!!!!!!!

  • @sergiolobanovich
    @sergiolobanovich Před 2 lety +1

    super nice

  • @dmitrylyalin703
    @dmitrylyalin703 Před 2 lety

    В плейлисте этот ролик стоит первым.

  • @user-tg1yr1dt4n
    @user-tg1yr1dt4n Před 2 lety

    Большое спасибо
    Мне из всех больше понравился Hilt
    1.Он простой
    2.Проверка при компиляции

    • @trolofoks9336
      @trolofoks9336 Před rokem

      Только проверка просто Божеская, ошибка [Hilt] и ВСЕ, никаких указаний где что не так

    • @user-tg1yr1dt4n
      @user-tg1yr1dt4n Před rokem

      @@trolofoks9336 Можно сделать более подробный лог об ошибке в build.gradle в официальное документации про Hilt об этом говорят
      kapt {
      correctErrorTypes true
      }

  • @Mecenatt
    @Mecenatt Před rokem

    Спасиб. Только у меня почему-то у меня hilt попросил добавить @Inject constructor в дате слое в имплементаторе интерфейса юскейсов. Добавил и все заработало

  • @CoRecYT
    @CoRecYT Před 2 lety

    Огромное спасибо! Два вопроса: как использовать один и тот же ViewModel на двух (и более) фрагментах? Должен ли я на каждом фрагменте писать AndroidEntryPoint для инициализации вью модели?

    • @TimofeyKovalenko
      @TimofeyKovalenko  Před 2 lety +1

      Для этого нужно получить view model, которая привязана к жизненному циклу активити, а не фрагментов. Нужно использовать: by activityViewModels() вместо by viewModels().

  • @stasmois8887
    @stasmois8887 Před 2 lety +3

    Спасибо за уроки! Очень доходчиво. Планируете что-нибудь такое же по юнит тестам?

    • @TimofeyKovalenko
      @TimofeyKovalenko  Před 2 lety

      да, как раз следующее видео будет по тестам.

  • @user-xw3ek8sf9t
    @user-xw3ek8sf9t Před 2 lety

    При прикручивании hilt к своему проекту столкнулся со странной проблемой, у меня room через репозиторй возвращает flow , Flow примерно так. Когда создаю репозиторий во viewModel вручную flow.collect отлично отрабатывает и обновляет данные при изменении бд. а если инжекчу репозиторий через @Inject constructor, то collect отрабатывает только один раз. Мне кажеться это как то связанно с viewmodelScope.

    • @TimofeyKovalenko
      @TimofeyKovalenko  Před 2 lety

      Продебаж те жизненный цикл вью модели, станет понятно почему нет евентов после первого. Так сложно сказать что у вас не так, может с подпиской, что то не так.

  • @letoatreidesii8028
    @letoatreidesii8028 Před 2 lety

    Отличные туториалы! вопрос по архитектуре: если приложение работает с микрофоном(speechToText), то логику работы с ним нужно выносить в VM, оставлять в Activity или делать отдельным пакетом (что то типа service и провайдить в DI, а сервис использовать в VM или Activity)?

    • @TimofeyKovalenko
      @TimofeyKovalenko  Před 2 lety

      Я бы сделал это вообще отдельным модулем, который можно подключить к presentation, к фича модулю либо к тому где нужно использовать этот функционал. И дальше у модуля будет публичный API(интерфейсы, методы), а за ними уже спрятана реализация. Получится что-то вроди небольшого плагина.

    • @letoatreidesii8028
      @letoatreidesii8028 Před 2 lety

      @@TimofeyKovalenko Спасибо. я чет про модуль не додумал.

  • @dimaplotkin3532
    @dimaplotkin3532 Před 6 měsíci

    Привет! Очень нравятся твои видео! Буду благодарен, если ответишь.
    Вопрос такой: как интегрировать в приложение androidx:navigation с помощью Hilt Dagger? Да и в целом, можно ли вообще это сделать? То есть я не могу получить объект активности, чтобы прописать findNavController().navigate(fragmentID). Такая же проблема с AllertDialog моими кастомными. Там тоже требуется активность. При попытке её заинджектить в ActivityModule с помощью @InstallIn(ActivityComponent:: class) мне выдаёт ошибку Hilt типа такого: ActivityRepository cannot be provided without an @Provides-annotated method.
    А если нельзя никак активность получить в Hilt, то как тогда работать со всеми функциями, которые её требуют? Если идти через view model напрямую, то будет не соответствовать clean architecture, поэтому я уже не знаю, что делать, кучу вариантов испробовал, ничего не могу понять(

    • @TimofeyKovalenko
      @TimofeyKovalenko  Před 6 měsíci

      Во первых, использовать androidx:navigation c XML это полная дичь на мой взгяд, это библиотека совершенно не подходит для XML, но для compose отлично. Во вторых, тема навигации - это очень сложная вещь, у нас на курсе занятие по навигации 8 часов идет, а потом еще задание на несколько недель, и даже этого может быть мало, поэтому в комментарии сложно вам ответить. Но ссылка на активити не должна покидать активити.

    • @dimaplotkin3532
      @dimaplotkin3532 Před 6 měsíci

      @@TimofeyKovalenkoСпасибо большое за такой скорый ответ! Если не сложно, подскажите ещё, что использовать в качестве переходов между фрагментами с XML? Стандартный FragmentManager или что другое?

    • @TimofeyKovalenko
      @TimofeyKovalenko  Před 6 měsíci

      Я бы использовал стандартный FragmentManager. В этом случае придется его глубоко изучить, со всеми тонкостями, но оно того стоит.

    • @dimaplotkin3532
      @dimaplotkin3532 Před 6 měsíci

      @@TimofeyKovalenko Спасибо большое ещё раз! Будем пробовать)

  • @torskandinav4634
    @torskandinav4634 Před 2 lety

    а где ссылки обещанные ?

  • @trolofoks9336
    @trolofoks9336 Před rokem

    видимо видос уже неактуален, а жаль, все повторил 1 в 1, но хилт выдет ошибку
    [Hilt]
    и это вся ошибка, нету ничего, ни через дебажные билды ни как еще, он просто не хочет билдится и это самое неприятное

    • @trolofoks9336
      @trolofoks9336 Před rokem +1

      решилось все просто по имплементации через Доки, там теперь все по другому, лучше напиши гдето в описании что имплементировать в gradle сейчас нужно как написано в доках а не как ты показал

  • @yura.kuznetsov
    @yura.kuznetsov Před 2 lety +1

    root build.gradle - во время вашей демонстрации файл выглядит вовсе по другому, с чем это связано?!

  • @UbisoftRus
    @UbisoftRus Před rokem +2

    Если у вас появляется ошибка "Plugin [id: 'dagger.hilt.android.plugin'] was not found in any of the following sources" добавьте в корневой build.gradle (Project) вот эти строки:
    buildscript {
    /* ... */
    dependencies {
    classpath 'com.android.tools.build:gradle:7.0.3'
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.31"
    classpath "com.google.dagger:hilt-android-gradle-plugin:2.42"
    }
    }

  • @garifzyanovrr
    @garifzyanovrr Před rokem

    Тимофей привет!
    Все перепроверил два раза и всё равно выдает ошибку
    public final class MainActivity extends androidx.appcompat.app.AppCompatActivity {
    ^
    @EntryPoint ru.rayanis.cleanarchitecturelearnapp.presentation.MainActivity must also be annotated with @InstallIn
    Пробовал решения из стэковерфлоу
    ставил AndroidEndtryPoint вместо Entrypoint,
    и @InstallIn пробовал, только без параметра.
    Не помогает.