currentBackStackEntry?.Сохраненное состояние?.getLiveData не получает уведомления об изменениях при попытке переместить данные в обратном направлении

#android #navigation #android-livedata

Вопрос:

У меня есть следующий фрагмент кода, который переходит к месту назначения фрагмента диалога —

 Navigation.findNavController(binding.root).navigate(DashboardFragmentDirections.actionDashboardFragmentToSettingsPasswordDialog())
 

Вот мой фрагмент диалога —

 class SettingsPasswordDialog : DialogFragment() {

    //UI Related
    private lateinit var binding: DialogSettingsPasswordBinding
    private lateinit var navController: NavController

    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
        binding = DialogSettingsPasswordBinding.inflate(LayoutInflater.from(context))
        val builder = AlertDialog.Builder(requireContext())
        builder.setView(binding.root)
        isCancelable = true
        initListeners()
        val dialog = builder.create()
        dialog.window!!.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
        return dialog
    }

    private fun initListeners() {
        navController = Navigation.findNavController(requireParentFragment().requireView())
        hideKeyboard()
        dismiss()
        binding.dialogSettingsPasswordDialogSubmitButton.setOnClickListener {
            val password = binding.dialogSettingsPasswordDialogTextInputEditText.text.toString()
            if (password != sharedPreferences.settingsPassword) {
                shortToast(requireContext(), getString(R.string.incorrect_password))
                return@setOnClickListener
            }
            navController.popBackStack()
            navController.currentBackStackEntry?.savedStateHandle?.set(CORRECT_SETTINGS_PASSWORD, "")
            hideKeyboard()
        }
    }


}
 

Как вы можете видеть, я использую объект savedStateHandle LiveData для возврата значения обратно в мой фрагмент. Но, наблюдая за данными, я никогда ничего не получаю взамен —

  private fun handleResultFromSettingsDialog() {
        Navigation.findNavController(binding.root).currentBackStackEntry?.savedStateHandle?.getLiveData<String>(CORRECT_SETTINGS_PASSWORD)?.observe(viewLifecycleOwner) {
            binding.mainActivityToolbar.title = getString(R.string.settings)
            popToRootFragmentIfNotViewingIt(navController, "name", id)
            navController.navigate(FragmentDirections.actionFragmentToMainSettingsFragment())
        }
    }
 

Очевидно, мне чего-то не хватает, чтобы это сработало. Чего мне не хватает?