PullToRefreshContainer не загружаетAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 PullToRefreshContainer не загружает

Сообщение Anonymous »

Код: Выделить всё

  fun ProductsListScreen(
navHostController: NavHostController,
cartViewModel: CartViewModel = hiltViewModel(),
`enter code here`productViewModel: ProductViewModel = hiltViewModel()
) {
val products by productViewModel.products.collectAsState()
val isLoading by productViewModel.isLoading.collectAsState()
val errorMessage by productViewModel.errorMessage.collectAsState()
var showDetailsBottomSheet by remember { mutableStateOf(false) }
var selectedProduct by remember { mutableStateOf
(null) }

val lazyListState: LazyGridState = rememberLazyGridState()
var isRefreshing by remember {
mutableStateOf(false)
}
val pullToRefreshState = rememberPullToRefreshState(enabled = { isRefreshing })
val scope = rememberCoroutineScope()

Scaffold(modifier = Modifier.fillMaxSize(), topBar = {
Box(
modifier = Modifier
.statusBarsPadding()
.padding(10.dp)
) {
SearchBox(onClick = {
navHostController.navigate(NavDestination.Search.route)
})
}

}) { paddingValues ->

Box(
Modifier
.verticalScroll(rememberScrollState())
.nestedScroll(pullToRefreshState.nestedScrollConnection)
.fillMaxSize()
.padding(paddingValues)
) {

if (isLoading && products.isEmpty()) {
CircularProgressIndicator(Modifier.align(Alignment.Center))
} else if (errorMessage != null || products.isEmpty()) {

EmptyState(modifier = Modifier.align(Alignment.Center))
} else {
LazyVerticalGrid(
state = lazyListState,
modifier = Modifier
.fillMaxSize()
.padding(10.dp)
.padding(bottom = paddingValues.calculateBottomPadding()),
columns = GridCells.Fixed(2),
contentPadding = PaddingValues(5.dp)
) {
item(span = { GridItemSpan(2) }) {
ImageBanner(itemsList = products.flatMap { it.product_image })
}
item(span = { GridItemSpan(2) }) {
Spacer(modifier = Modifier.height(10.dp))
}

items(products) { product ->
ProductItem(product = product) { _selectedProduct ->
selectedProduct = _selectedProduct
showDetailsBottomSheet = true
}
}
}
}

if (pullToRefreshState.isRefreshing) {
LaunchedEffect(true) {
scope.launch {
isRefreshing = true
productViewModel.loadProducts(forceRefresh = true)
isRefreshing = false
}
}
}
LaunchedEffect(isRefreshing) {
if (isRefreshing) {
pullToRefreshState.startRefresh()
} else {
pullToRefreshState.endRefresh()
}
}

PullToRefreshContainer(
state = pullToRefreshState,
modifier = Modifier
.align(Alignment.TopCenter),
)

}

if (selectedProduct != null &&  showDetailsBottomSheet) {
ProductDetailsBottomSheet(product = selectedProduct!!,
onDismissRequest = { showDetailsBottomSheet = false },
onAddToCart = { product, quantity ->
cartViewModel.addToCart(
CartItem(
id = product.product_id,
price = product.product_price,
quantity = quantity,
product = product
)
)
})
}

}

}
Я вижу индикатор PullRefreshIndicator сверху, но он не тянет. Я пытался использовать pullToRefreshState с LazyGrid и Box, но безрезультатно. Я пытался отобразить индикатор из MainScreen с помощью функции Unit на ProductsScreen, но тоже безрезультатно, и я пытался следовать этим руководствам Medium, YouTube, но безрезультатно.


Подробнее здесь: https://stackoverflow.com/questions/792 ... ot-pulling
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»