-
Notifications
You must be signed in to change notification settings - Fork 4
/
LottieRefreshIndicatorSample.kt
115 lines (105 loc) · 3.71 KB
/
LottieRefreshIndicatorSample.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
package com.king.ultraswiperefresh.app.sample
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.material.Divider
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableIntStateOf
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import com.king.ultraswiperefresh.NestedScrollMode
import com.king.ultraswiperefresh.UltraSwipeRefresh
import com.king.ultraswiperefresh.app.component.ColumnItem
import com.king.ultraswiperefresh.indicator.lottie.LottieRefreshFooter
import com.king.ultraswiperefresh.indicator.lottie.LottieRefreshHeader
import com.king.ultraswiperefresh.rememberUltraSwipeRefreshState
import kotlinx.coroutines.delay
/**
* Lottie动画刷新样式示例
*
* @author <a href="mailto:[email protected]">Jenly</a>
* <p>
* <a href="https://github.com/jenly1314">Follow me</a>
*/
@Composable
fun LottieRefreshIndicatorSample() {
val state = rememberUltraSwipeRefreshState()
var itemCount by remember { mutableIntStateOf(20) }
var hasMoreData by remember { mutableStateOf(true) }
LaunchedEffect(state.isRefreshing) {
if (state.isRefreshing) {
delay(2000)
itemCount = 20
hasMoreData = true
state.isRefreshing = false
}
}
LaunchedEffect(state.isLoading) {
if (state.isLoading) {
delay(2000)
itemCount += 20
state.isLoading = false
}
}
LaunchedEffect(state.isFinishing) {
if (itemCount > 50 && !state.isFinishing) {
hasMoreData = false
}
}
UltraSwipeRefresh(
state = state,
onRefresh = {
state.isRefreshing = true
},
onLoadMore = {
state.isLoading = true
},
headerScrollMode = NestedScrollMode.FixedBehind,
footerScrollMode = NestedScrollMode.FixedBehind,
loadMoreEnabled = hasMoreData,
modifier = Modifier.background(color = Color(0x7FEEEEEE)),
headerIndicator = {
LottieRefreshHeader(it)
},
footerIndicator = {
LottieRefreshFooter(it)
}
) {
LazyColumn(Modifier.background(color = Color.White)) {
repeat(itemCount) {
item {
val title = "UltraSwipeRefresh列表标题${it + 1}"
val content = "UltraSwipeRefresh列表内容${it + 1}"
ColumnItem(title = title, content = content)
Divider(
modifier = Modifier.padding(horizontal = 16.dp),
color = Color(0xFFF2F3F6)
)
}
}
if (!hasMoreData) {
item {
Box(modifier = Modifier.fillMaxWidth(), contentAlignment = Alignment.Center) {
Text(
text = "没有更多数据了",
color = Color(0xFF999999),
fontSize = 15.sp,
modifier = Modifier.padding(vertical = 16.dp)
)
}
}
}
}
}
}