经验之谈-登录之后再跳转到目标页面

139 阅读1分钟

日常开发中经常会遇到这样的场景:在点赞、收藏、进入商店页之前要先让用户登录,登录完成后再继续目标操作。

常规逻辑是点击功能入口时先判断是否登录,未登录则跳转登录页面,在onActivityResult中检测登录成功,再继续目标任务执行。

如果app中有多个功能都需要登录,那么每个地方都得写一段这样相似的逻辑,不免让人恼火。

一个易想到的方案便是把这段逻辑提取到BaseActivity/BaseFragment中。

封装代码示例:

//BaseActivity 代码片段
val LOGIN_REQUEST_CODE = 100

fun runAfterLogin(task: Runnable){ //如果需要向登录页面传递信息,可以再这里增加对应的参数
    if (UserModel.instance.isLogin) { //已登录直接执行任务
        task.run()
    } else {
        loginSuccessTask.add(task) //未登录先保存任务,等后续登录成功再执行
        val intent = Intent(this, LoginActivity::class.java)
        startActivityForResult(intent, LOGIN_REQUEST_CODE)
    }
}

//也可以使用 registerForActivityResult实现
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    if(requestCode == LOGIN_REQUEST_CODE){
        val loginSuccess = resultCode == Activity.RESULT_OK
        if(loginSuccess){
            for (item in loginSuccessTask) {
                item.run()
            }
        }
        loginSuccessTask.clear()
    }
}
//BaseFragment代码片段
fun runAfterLogin(task: Runnable?) {
    (activity as? BaseActivity)?.runAfterLogin(task)
}

使用代码示例:

//activity或fragment中使用示例
storeEntryView.setOnclickListener{
    runAfterLogin{ //登录成功后自动进入商店页
        startActivity(Intent(context, StoreActivity::class.java))
    }
}

这样用起来就清爽些啦!