【问题标题】:How shorten Kotlin StateFlow code with Generics?如何使用泛型缩短 Kotlin StateFlow 代码?
【发布时间】:2021-01-18 01:21:27
【问题描述】:

我有这个:

val navigateToMainFragmentEvent: StateFlow<State<Event<Boolean>>>

 if (navigateToMainFragmentEvent.collectAsState().value is State.TriggerState) {
        (viewModel.navigateToMainFragmentEvent.collectAsState().value
                as State.TriggerState).data.getContentIfNotHandled()
            ?.let {
                if (it) {
                    Timber.tag("Nurs").d("collect as state ")
                    navController.popBackStack()
                    navController.navigate(MAIN_SCRENN)
                }
            }
    }

是否可以使用泛型缩短 if 语句?

【问题讨论】:

  • 你能展示State类吗? collectAsState 是什么?

标签: kotlin generics


【解决方案1】:
val state = navigateToMainFragmentEvent.value
if (state is State.TriggerState) {
     state.data.getContentIfNotHandled()?.let {
         // do sth
     }
}

作为建议:您可以在 Event 类中使用 lambda 参数定义 ifNotHandled 方法以缩短时间:

    fun ifNotHandled(callback: () -> T) {
        if (!hasBeenHandled) {
            hasBeenHandled = true
            callback.invoke(content)
        }
    }




  val state = navigateToMainFragmentEvent.value
  if (state is State.TriggerState) {
         state.data.ifNotHandled {
            // do sth
         }
    }

【讨论】:

    猜你喜欢
    • 2023-04-10
    • 2021-12-24
    • 2013-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-31
    • 2013-04-25
    相关资源
    最近更新 更多