Jetpack Compose中MainActivity传AndroidItem至Nav函数报错求助
核心问题分析
当前报错No value passed for parameter 'data'的直接原因是调用Nav(data = )时未传入实际的AndroidItem实例,且错误使用了命名参数语法却未赋值。同时代码还存在几处额外问题需要修正:
AndroidItem数据类被错误标记为@Composable,数据类无需该注解MyCard函数调用时缺失scaffoldState参数Search_Screen_Details中Android类定义不明确,需补充继承关系
具体修复步骤
1. 修正AndroidItem数据类
移除@Composable注解,数据类不需要该修饰符:
data class AndroidItem( val ID: Int?, val ItemType: String?, val Price: Int?, )
2. 在MainActivity中正确传递参数
Nav函数的第一个参数就是data: AndroidItem,直接传入合法实例即可,无需使用命名参数:
class MainActivity : ComponentActivity() { @OptIn(ExperimentalMaterialApi::class) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { Diwaanka2022Theme { Surface( modifier = Modifier.fillMaxSize(), color = MaterialTheme.colors.background ) { // 创建非空AndroidItem实例,可根据需求替换为真实数据 val initialItem = AndroidItem(ID = 1, ItemType = "测试类型", Price = 100) Nav(initialItem) // 直接传参,无需data= } } } } }
3. 修复MyCard函数的调用缺失参数问题
MyCard需要三个参数,补充缺失的scaffoldState:
// 在Search_Screen_Details的LazyColumn中 items(data.value) { item -> MyCard( data = item, navController = navController, scaffoldState = scaffoldState // 补充该参数 ) }
4. 明确Android类的定义
如果Android是用来存储列表的自定义类,补充继承关系:
// 在合适位置定义(如文件顶部) class Android : ArrayList<AndroidItem>()
额外说明
若你需要从网络请求后再传递AndroidItem给Nav,则不能在MainActivity的onCreate中直接硬编码实例,需通过remember和mutableStateOf管理状态,待请求完成后更新状态触发UI重组,再传递参数。
内容的提问来源于stack exchange,提问作者Mohammed
相关产品推荐
相关产品推荐

