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

Поделиться
HTML-код
  • Опубликовано: 29 ноя 2024

Комментарии • 42

  • @TimofeyKovalenko
    @TimofeyKovalenko  3 года назад +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

  • @kenchukkk
    @kenchukkk Год назад +1

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

  • @lirjarmuhametova8516
    @lirjarmuhametova8516 2 года назад +1

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

  • @TheDamiankain
    @TheDamiankain Год назад

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

  • @shakhriyarbadalov5628
    @shakhriyarbadalov5628 Год назад

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

  • @moni_panica
    @moni_panica 2 года назад

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

  • @videoedit6672
    @videoedit6672 Год назад

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

  • @andriyshatynskyy5214
    @andriyshatynskyy5214 2 года назад +1

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

  • @dmitrylyalin703
    @dmitrylyalin703 3 года назад

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

  • @alexkoty5877
    @alexkoty5877 3 года назад +2

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

  • @АлексейМандрыкин-ч7е

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

  • @abumusa8887
    @abumusa8887 2 года назад

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

  • @Razo.TR0N
    @Razo.TR0N 2 года назад +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"
    }
    }

  • @spyro2008
    @spyro2008 8 месяцев назад

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

  • @Arman_127
    @Arman_127 2 года назад

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

    • @trolofoks9336
      @trolofoks9336 Год назад

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

    • @Arman_127
      @Arman_127 Год назад

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

  • @IbnSabilAbuAbdullah
    @IbnSabilAbuAbdullah 20 дней назад

    Я думал мы не должны в слое presentation иметь доступ к data слою, все смотрел, ждал, вдруг в этой части будет по другому, но увы ..

  • @stasmois8887
    @stasmois8887 3 года назад +3

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

    • @TimofeyKovalenko
      @TimofeyKovalenko  3 года назад

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

  • @Mecenatt
    @Mecenatt 2 года назад

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

  • @sergiolobanovich
    @sergiolobanovich 2 года назад +1

    super nice

  • @CoRecYT
    @CoRecYT 2 года назад

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

    • @TimofeyKovalenko
      @TimofeyKovalenko  2 года назад +1

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

  • @Стас-с4ю5т
    @Стас-с4ю5т 2 года назад

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

    • @TimofeyKovalenko
      @TimofeyKovalenko  2 года назад

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

  • @dimaplotkin3532
    @dimaplotkin3532 11 месяцев назад

    Привет! Очень нравятся твои видео! Буду благодарен, если ответишь.
    Вопрос такой: как интегрировать в приложение 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  11 месяцев назад

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

    • @dimaplotkin3532
      @dimaplotkin3532 11 месяцев назад

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

    • @TimofeyKovalenko
      @TimofeyKovalenko  11 месяцев назад

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

    • @dimaplotkin3532
      @dimaplotkin3532 11 месяцев назад

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

  • @letoatreidesii8028
    @letoatreidesii8028 3 года назад

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

    • @TimofeyKovalenko
      @TimofeyKovalenko  3 года назад

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

    • @letoatreidesii8028
      @letoatreidesii8028 3 года назад

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

  • @torskandinav4634
    @torskandinav4634 3 года назад

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

  • @jahongirzokirov3453
    @jahongirzokirov3453 2 года назад

    6:48

  • @trolofoks9336
    @trolofoks9336 Год назад

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

    • @trolofoks9336
      @trolofoks9336 Год назад +1

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

  • @yura.kuznetsov
    @yura.kuznetsov 2 года назад +1

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

  • @garifzyanovrr
    @garifzyanovrr Год назад

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