我想在检查用户是否经过身份验证后执行一段代码。类似这样的东西:
inline fun <T : Any, R> T?.isUserAuthenticated(callback: (T) -> R) {
FirebaseAuth.getInstance().currentUser?.let {
//Function call
} ?: kotlin.run {
FirebaseAuth.getInstance().signInAnonymously().addOnSuccessListener {
//Function call
}
}
这种方法不起作用,但有其他选择吗?
在以下情况下,Kotlin中的内联函数应用于常规函数:
- 您迫切需要更有效地分配内存
- 当一个函数接受另一个函数或lambda作为参数时
- 您需要防止创建对象并拥有更好的控制流
否则,内联可能会导致生成的代码增长。很可能还有其他情况值得使用内联函数,但我只添加了其中的一些(重要的(函数。
当涉及到检查用户是否经过身份验证时,我宁愿创建一个如下所示的常规函数:
fun getAuthState() = auth.currentUser != null
并使用它:
val isAuthenticated = getAuthState()
if(!isAuthenticated) {
auth.signInAnonymously().addOnCompleteListener(/*...*/)
}
或者如果使用Kotlin Coroutine:
if(!isAuthenticated) {
auth.signInAnonymously().await()
}
所以这是一种或另一种方法。
我会在存储库类中添加这个函数,这样它就可以在整个项目中使用。
如果你有兴趣查看一些代码,我建议你查看以下资源:
- 如何使用JetpackCompose在干净的架构中处理Firebase身份验证
这是相应的回购。