You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jetpack Compose中LazyColumn的items无法接收列表变量问题求助

Jetpack Compose LazyColumn无法接收列表变量展示二维码历史记录

我是Jetpack Compose新手,已完成数据库与二维码生成功能开发,现想用LazyColumn展示二维码历史记录,但LazyListScope的items无法接收对应列表变量。以下是获取二维码列表的相关代码文件:

QrCodeDao.kt

@Dao
interface QRCodeDao {
    @Query("SELECT * FROM qrCodes ORDER BY qr_timestamp DESC")
    fun getAllQrCodes(): Flow<List<QrCodeModel>>
}

QrCodeRepository.kt

@Singleton
class QrRepository @Inject constructor(private val qrCodeDao: QRCodeDao) {

    fun getAllQrCodes() : Flow<List<QrCodeModel>>{
        return qrCodeDao.getAllQrCodes()
    }
}

HistoryViewModel.kt

@HiltViewModel
class HistoryViewModel @Inject constructor(
    private val qrRepository: QrRepository
) : ViewModel(){

    val getQrCodes by mutableStateOf(qrRepository.getAllQrCodes())
}

HistoryScreen.kt

@Composable
fun HistoryScreen(
    navController: NavController,
    viewModel: HistoryViewModel = hiltViewModel()
) {
    val scaffoldState = rememberScaffoldState()
    val scope = rememberCoroutineScope()
    val context = LocalContext.current

    val qrCodes = viewModel.getQrCodes

    Scaffold(
        scaffoldState = scaffoldState
    ) {
        Column(
            modifier = Modifier
                .fillMaxSize()
                .background(offWhite)
                .padding(top = 25.dp, start = 25.dp, end = 25.dp)
        ) {
            LazyColumn(
                modifier = Modifier.fillMaxWidth(),
                contentPadding = PaddingValues(vertical = 10.dp)
            ) {
                items(items = qrCodes) { qrCode ->
                    var qrImageBmp
                    scope.launch {
                        qrImageBmp = viewModel.processQrCode(qrCode)
                    }
                    SingleQrListItem(qrCodeModel = qrCode, imageBitmap = qrImageBmp)
                }
            }
        }
    }
}

@Composable
fun SingleQrListItem(
    qrCodeModel: QrCodeModel,
    imageBitmap: ImageBitmap
) {
    Card(
        modifier = Modifier
            .height(120.dp)
            .fillMaxWidth(),
        shape = RoundedCornerShape(8.dp),
        elevation = 8.dp,
        backgroundColor = colorPrimary
    ) {
        Row(
            modifier = Modifier
                .padding(start = 5.dp)
                .fillMaxSize()
        ) {
            Image(
                bitmap = imageBitmap,
                contentDescription = null,
                modifier = Modifier
                    .fillMaxHeight()
                    .background(offWhite)
            )
            Column(
                modifier = Modifier
                    .fillMaxHeight()
                    .background(offWhite)
                    .padding(start = 10.dp),
                verticalArrangement = Arrangement.Center
            ) {
                Text(
                    text = "Data: ${qrCodeModel.qrData}",
                    modifier = Modifier
                        .fillMaxWidth()
                        .padding(10.dp),
                    fontFamily = LatoBold,
                    fontSize = 16.sp,
                )
                Text(
                    text = "Type: ${qrCodeModel.qrType}",
                    modifier = Modifier
                        .fillMaxWidth()
                        .padding(10.dp),
                    fontFamily = LatoBold,
                    fontSize = 16.sp,
                )
                Text(
                    text = "Created at: ${qrCodeModel.qrTimestamp}",
                    modifier = Modifier
                        .fillMaxWidth()
                        .padding(10.dp),
                    fontFamily = LatoBold,
                    fontSize = 16.sp,
                )
            }
        }
    }
}

已导入androidx.compose.foundation.lazy.items,此前使用RecyclerView开发,尝试过其他方案未解决。

更新:已通过在HistoryScreen中添加val allQrCodesState by viewModel.allQrCodesFlow.collectAsState(emptyList())解决问题。

内容的提问来源于stack exchange,提问作者Pranay Das

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 14:29:56