Closed tgyuuAn closed 5 months ago
var previousChatTime by remember { mutableStateOf("") } LaunchedEffect(chatLog.size) { if (previousChatTime != (chatLog.lastOrNull()?.createdAt ?: "")) { coroutineScope.launch { listState.scrollToItem(chatLog.size) previousChatTime = chatLog.last().createdAt } } } LaunchedEffect(listState.firstVisibleItemIndex) { if (listState.firstVisibleItemIndex <= 3 && !isFirstPage) { getPreviousMessages() } }
λ΄κ° λ³΄κ³ μλ μ±ν μ°½μ LazyColumn μ Item μΈλ±μ€κ° 3μ΄νμΌ κ²½μ°,
LazyColumn
Item
3
μλ‘κ² μ΄μ μ±ν λ°μ΄ν°λ₯Ό νΈμΆν΄μ 30κ° μ λλ₯Ό νΈμΆνλ €κ³ νλλ°.
30κ°
κ·Όλ°, μ΄κ±Έ κ³μ νΈμΆν΄λ²λ¦¬λκΉ λκ°μ μ±ν λ°μ΄ν°λ₯Ό μ¬λ¬ λ² λ°μλ²λ¦¬λλΌκ³ μ..
κ·Έλμ μΌλ¨ μλ μ²λΌ atomicBooleanμ μ¨μ μ€λ³΅ νΈμΆμ λ§μλ¬μ ν΄κ²°νκΈ΄ νλλ°,,,
atomicBoolean
μ‘°κΈ λ μ’μ κ²½μ°κ° μλ μ§λ κ³μν΄μ νμν΄λ΄μΌ μ κ² κ°λ°.
fun getPreviousMessages() = viewModelScope.launch { if (!isLoading.get()) { isLoading.getAndSet(true) getPreviousMentoringMessagesUseCase( _roomId.value, _pagingTimeStamp.value, ) .onSuccess { if (it.size < PAGING_SIZE) { _isFirstPage.value = true } chatLog.addAll(0, it) if (it.size != 0) { _pagingTimeStamp.value = chatLog[0].createdAt } } .onFailure { Log.d("test", "onFailure : " + it.toString()) } .also { isLoading.getAndSet(false) } } }
κΈ°λ₯μ°¬ firestore μ±ν λ°© λ νΌλ°μ€
1. π κ΄λ ¨λ μ΄μ λ° μκ°
2. π₯λ³κ²½λ μ
3. πΈ μ€ν¬λ¦°μ·(μ ν)
4. π‘μκ²λ νΉμ κΆκΈν μ¬νλ€
νμ΄μ§μ μ μ©ν΄μ ν¨μλ₯Ό νΈμΆνλ €κ³ νλλ°, μκ°λλ‘ μλλλ°μ ?
λ΄κ° λ³΄κ³ μλ μ±ν μ°½μ
LazyColumn
μItem
μΈλ±μ€κ°3
μ΄νμΌ κ²½μ°,μλ‘κ² μ΄μ μ±ν λ°μ΄ν°λ₯Ό νΈμΆν΄μ
30κ°
μ λλ₯Ό νΈμΆνλ €κ³ νλλ°.κ·Όλ°, μ΄κ±Έ κ³μ νΈμΆν΄λ²λ¦¬λκΉ λκ°μ μ±ν λ°μ΄ν°λ₯Ό μ¬λ¬ λ² λ°μλ²λ¦¬λλΌκ³ μ..
κ·Έλμ μΌλ¨ μλ μ²λΌ
atomicBoolean
μ μ¨μ μ€λ³΅ νΈμΆμ λ§μλ¬μ ν΄κ²°νκΈ΄ νλλ°,,,μ‘°κΈ λ μ’μ κ²½μ°κ° μλ μ§λ κ³μν΄μ νμν΄λ΄μΌ μ κ² κ°λ°.
κΈ°λ₯μ°¬ firestore μ±ν λ°© λ νΌλ°μ€