Compose 组合项

编程入门 行业动态 更新时间:2024-10-23 09:23:01

Compose <a href=https://www.elefans.com/category/jswz/34/1769978.html style=组合项"/>

Compose 组合项

一、概念

1.1 修饰符 Modifier.pullRefresh()

功能实现采用的是 Modifier 修饰符而不是一个单独的组合项,所以需要提供一个父容器来存放内容和下拉指示器。需求是下拉指示器显示在内容之上,因此选择 Box,注意内容必须具备纵向滑动能力否则无法触发(非LazyColumn可设置Modifier.verticalScroll)。

fun Modifier.pullRefresh(
    state: PullRefreshState,        //下拉刷新的状态管理
    enabled: Boolean = true        //是否启用
)

1.2 状态管理 rememberPullRefreshState()

用于管理刷新状态和刷新业务。通过实例.progress可以获取进度来自定义指示器或动画。

fun rememberPullRefreshState(
    refreshing: Boolean,        //是否在刷新
    onRefresh: () -> Unit,        //处理刷新的业务逻辑,结束后将刷新状态设为false
    refreshThreshold: Dp = PullRefreshDefaults.RefreshThreshold,
    refreshingOffset: Dp = PullRefreshDefaults.RefreshingOffset,
): PullRefreshState

1.3 下拉指示器 PullRefreshIndicator

fun PullRefreshIndicator(
    refreshing: Boolean,        //是否在刷新
    state: PullRefreshState,        //下拉刷新的状态管理
    modifier: Modifier = Modifier,
    backgroundColor: Color = MaterialTheme.colors.surface,
    contentColor: Color = contentColorFor(backgroundColor),
    scale: Boolean = false
)

二、代码示例

2.1 简单封装

@Composable
fun Demo(onRefreshing: () -> Unit,    //刷新时的回调modifier: Modifier = Modifier,content: @Composable () -> Unit,    //包裹的内容(必须具备纵向滑动否则无法触发)
) {//是否在刷新var isRefreshing by remember{ mutableStateOf(false) }//下拉刷新的状态管理val pullRefreshState = rememberPullRefreshState(refreshing = isRefreshing,onRefresh = { isRefreshing = true })//刷新时的业务处理if (isRefreshing) {onRefreshing()isRefreshing = false    //刷新业务执行完毕后修改状态}Box(modifier = modifier.fillMaxSize().pullRefresh(state = pullRefreshState)) {content()PullRefreshIndicator(refreshing = isRefreshing,state = pullRefreshState,modifier = Modifier.align(Alignment.TopCenter))}
}

2.2 结合 Paging 使用

@Composable
fun DemoScreen(viewModel: DemoViewModel = viewModel()
) {val lazyPagingItems = viewModel.pagingDataFlow.collectAsLazyPagingItems() //获取Paging数据Demo(onRefreshing = { lazyPagingItems.refresh() } //刷新Paging) {Content(lazyPagingItems = lazyPagingItems)}
}@Composable
fun Content(lazyPagingItems: LazyPagingItems<...>,lazyListState: LazyListState = rememberLazyListState(),modifier: Modifier = Modifier
) {LazyColumn(modifier = modifier.fillMaxSize(),state = lazyListState) {items(count = lazyPagingItems.itemCount,key = lazyPagingItems.itemKey { it.id }) { index ->val bean = lazyPagingItems[index]if (bean != null) {Item(...)    //为Item设置内容} else {Text("")    //内容为空时显示的占位Item}}}
}

更多推荐

Compose 组合项

本文发布于:2023-11-16 23:50:21,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1634452.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:组合   Compose

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!