1、报错的图
2、开始的代码
3、LoginActivity调用
val viewModel: LoginViewModel = viewModel()
LoginScreen(viewModel)
4、修改以后的代码
说明:
该代码定义了一个 companion object 中的 provideFactory 方法,用于创建一个 ViewModelProvider.Factory 实例,专门用来生成带有依赖项 UserRepository 的 LoginViewModel。其功能如下:
- 接收 UserRepository 作为依赖
- 返回一个匿名对象实现
ViewModelProvider.Factory - 重写 create 方法,将 LoginViewModel 强制转换为泛型类型
T返回
5、调用的最新代码
// 使用factory创建ViewModel
val viewModel: LoginViewModel = viewModel(
factory = LoginViewModel.provideFactory(repository)
)
val loginState by viewModel.loginState.collectAsState()
// 监听登录状态变化
LaunchedEffect(loginState.isSuccess) {
if (loginState.isSuccess) {
// 登录成功,跳转到MainActivity
val context = applicationContext
val intent = Intent(context, MainActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK)
context.startActivity(intent)
// 关闭当前Activity,防止返回登录页面
finish()
}
}
LoginScreen(viewModel)
说明:
这段代码实现登录状态监听并跳转主界面功能,具体如下:
- 使用 LoginViewModel.provideFactory 创建 LoginViewModel 实例;
- 通过
collectAsState()收集 loginState 状态; - 利用
LaunchedEffect监听loginState.isSuccess变化; - 登录成功后启动 MainActivity 并关闭当前页面。`