如何在Composable中获取Intent传递的数据
直接从Composable读取Intent数据的实现方案
方案1:通过LocalContext直接读取(无额外依赖)
Compose 内置的LocalContext可以获取当前组件所在的上下文,强转为启动页的Activity后即可直接拿到Intent对象:
import androidx.compose.runtime.Composable import androidx.compose.ui.platform.LocalContext import android.app.Activity @Composable fun TargetPage() { // 直接获取当前Activity的Intent val intent = (LocalContext.current as Activity).intent // 读取对应key的数据,按实际传递的类型选择对应的get方法 val userId = intent.getStringExtra("user_id") ?: "" val isVip = intent.getBooleanExtra("is_vip", false) // 后续业务逻辑 }
如果你的Composable可能在非Activity上下文场景使用,可以增加安全判断避免强转崩溃:
val intent = remember { val context = LocalContext.current if (context is Activity) context.intent else null }
方案2:封装为可复用扩展函数
把读取逻辑封装成通用扩展,后续任意Composable都可以直接调用读取参数:
@Composable fun <T> rememberIntentExtra(key: String, defaultValue: T): T { val context = LocalContext.current return remember(key, defaultValue) { val intent = (context as? Activity)?.intent ?: return@remember defaultValue @Suppress("UNCHECKED_CAST") intent.extras?.get(key) as? T ?: defaultValue } } // 使用示例 @Composable fun OrderDetailPage() { val orderId = rememberIntentExtra("order_id", "") val orderPrice = rememberIntentExtra("order_price", 0L) }
注意事项
- 该方案支持读取所有Intent可传递的类型,包括基础类型、Parcelable对象、Serializable对象等
- 如果你的Composable依附于Fragment使用,逻辑完全通用,Fragment依附的Activity同样可以拿到启动时传入的Intent
内容的提问来源于stack exchange,提问作者S Haque
相关产品推荐
相关产品推荐

