Android. Не получается обновить данные с использованием SwipeRefreshLayout + LiveData

В приложении используются принципы Clean Acrhitecture. Данные собираются и эмитятся в data слое. В моем случае используется LiveData Builder + Coroutines. Observer установлен во фрагменте.

После запуска приложения данные присваиваются _profile переменной в ProfileFragmentViewModel. Затем они отображаются в Resource.Status.SUCCESS блоке.

Когда я использую viewModel.refreshProfile(), это не дает ожидаемого эффекта, переменная _profile в ProfileFragmentViewModel не обновляется.

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

ProfileFragment.kt

class ProfileFragment : DaggerFragment() {

    @Inject
    lateinit var viewModel: ProfileFragmentViewModel

    private val observer = Observer<Resource<Profile>> {
        when (it.status) {
            Resource.Status.LOADING -> {
                Timber.i("Loading...")
            }
            Resource.Status.SUCCESS -> {
                Timber.i("Success: %s", it.data)
                srl_profile.isRefreshing = false
            }
            Resource.Status.ERROR -> {
                Timber.i("Error: %s", it.message)
                srl_profile.isRefreshing = false
            }
        }
    };

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        return inflater.inflate(R.layout.fragment_profile, container, false)
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        srl_profile.setOnRefreshListener {
           srl_profile.isRefreshing = true
           viewModel.refreshProfile()
        }
        viewModel.getProfileLive().observe(viewLifecycleOwner, observer)
    }
} 

ProfileFragmentViewModel.kt

class ProfileFragmentViewModel @Inject constructor(
    private val profileUseCase: ProfileUseCase
) : ViewModel() {
    private val _profile = profileUseCase.getProfile()
  
    fun refreshProfile() {
       _profile = profileUseCase.getProfile()
    }
    fun getProfileLive() = _profile
} 

ProfileUseCase.kt

class ProfileUseCase @Inject constructor(
    private val profileRepository: ProfileRepository
) {

    fun getProfile(): LiveData<Resource<Profile>> {
        return profileRepository.getProfile()
    }
}

ProfileRepository.kt

class ProfileRepository @Inject constructor(   
   private val loginUserDao: LoginUserDao,   
   private val profileDao: ProfileDao   
) {

fun getProfile(): LiveData<Resource<Profile>> =
    liveData(Dispatchers.IO)
    {
        emit(Resource.loading(data = null))

        val profile = profileDao.getProfile()

        // Emit Success result...
    }
}

Ответы (0 шт):