【问题标题】:Firebase authentication with MVVM kotlin使用 MVVM kotlin 进行 Firebase 身份验证
【发布时间】:2021-12-26 17:22:04
【问题描述】:

我是 MVVM 和 jetpack 库的新手。我有一个简单的 firebase 身份验证、注册和登录应用程序。我尝试了很多代码,但我没有获得视图模型和曲目的流程。因此任何人都可以将此代码与视图模型及其工作方式进行转换。

这是登录代码

  auth = FirebaseAuth.getInstance()

  fun login(view: View){
        var email:String = binding.editTxtEmail.text.toString()
        var password:String = binding.editTxtPassword.text.toString()

        auth.signInWithEmailAndPassword(email,password).addOnCompleteListener { task ->
                if(task.isSuccessful){
                    val intent= Intent(this,MainActivity::class.java)
                    startActivity(intent)
                    finish()
                }
            }.addOnFailureListener { exception ->
                Toast.makeText(applicationContext,exception.localizedMessage, Toast.LENGTH_LONG).show()
            }
        }

【问题讨论】:

标签: android firebase kotlin mvvm android-jetpack


【解决方案1】:

首先,您需要添加一个 ViewModel,然后在 ViewModel 中添加两个接受电子邮件和密码的方法。

class AuthViewModel: ViewModel() {

fun handleSignIn(email: String, password: String) {

}

fun handleSignUp(email: String, password: String, confirmPassword: String) {

}
}

然后您需要添加一个枚举或密封类来表示您的登录流程的可能状态,这里是一个示例:

sealed class AuthState {
object Idle : AuthState()
object Loading : AuthState()
object Success : AuthState()
class AuthError(val message: String? = null) : AuthState()
}

然后您需要添加一个可观察状态并将其公开为 LiveData,如下所示:

 private val _authState by lazy { MutableLiveData<AuthState>(AuthState.Idle) }
val authState: LiveData<AuthState> = _authState

添加后,您现在可以更新处理注册和注册的方法,如下所示:

fun handleSignUp(email: String, password: String, confirmPassword: String) {
    if (!isEmailValid(email)) {
        _authState.value = AuthState.AuthError("Invalid email")
        return
    }
    if (password != confirmPassword) {
        _authState.value = AuthState.AuthError("Password does not match")
        return
    }
    FirebaseAuth.getInstance().createUserWithEmailAndPassword(
        email, password)
        .addOnCompleteListener { task ->
            if (task.isSuccessful) {
                Log.i(TAG,"Email signup is successful")
                _authState.value = AuthState.Success
            } else {
                task.exception?.let {
                    Log.i(TAG,"Email signup failed with error ${it.localizedMessage}")
                    _authState.value = AuthState.AuthError(it.localizedMessage)
                }
            }
        }
}

然后您可以收听列表

val authState by viewModel.authState.observeAsState(AuthState.Idle)

祝你好运。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-09
    • 2017-03-11
    • 2018-10-19
    • 2021-05-26
    • 2017-09-12
    • 2021-07-20
    • 1970-01-01
    • 2017-11-03
    相关资源
    最近更新 更多