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
相关产品推荐
相关产品推荐

