From c15646867cbbd8d7233cd683099059d7d94d1e27 Mon Sep 17 00:00:00 2001 From: guozhigq Date: Mon, 28 Aug 2023 18:21:09 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20issues=20#42=20=E6=94=B6=E8=97=8F?= =?UTF-8?q?=E5=A4=B9=E5=8F=AA=E6=98=BE=E7=A4=BA=E5=89=8D50=E4=B8=AA?= =?UTF-8?q?=E8=A7=86=E9=A2=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/pages/favDetail/controller.dart | 16 +++++++++-- lib/pages/favDetail/view.dart | 41 ++++++++++++++++++----------- 2 files changed, 39 insertions(+), 18 deletions(-) diff --git a/lib/pages/favDetail/controller.dart b/lib/pages/favDetail/controller.dart index 5229ee87..8b772716 100644 --- a/lib/pages/favDetail/controller.dart +++ b/lib/pages/favDetail/controller.dart @@ -15,6 +15,8 @@ class FavDetailController extends GetxController { bool isLoadingMore = false; RxMap favInfo = {}.obs; RxList favList = [FavDetailItemData()].obs; + RxString loadingText = '加载中...'.obs; + int mediaCount = 0; @override void onInit() { @@ -27,6 +29,11 @@ class FavDetailController extends GetxController { } Future queryUserFavFolderDetail({type = 'init'}) async { + if (type == 'onLoad' && favList.length >= mediaCount) { + loadingText.value = '没有更多了'; + return; + } + isLoadingMore = true; var res = await await UserHttp.userFavFolderDetail( pn: currentPage, ps: 20, @@ -36,11 +43,16 @@ class FavDetailController extends GetxController { favInfo.value = res['data'].info; if (currentPage == 1 && type == 'init') { favList.value = res['data'].medias; - } else if (type == 'onload') { + mediaCount = res['data'].info['media_count']; + } else if (type == 'onLoad') { favList.addAll(res['data'].medias); } + if (favList.length >= mediaCount) { + loadingText.value = '没有更多了'; + } } currentPage += 1; + isLoadingMore = false; return res; } @@ -64,6 +76,6 @@ class FavDetailController extends GetxController { } onLoad() { - queryUserFavFolderDetail(type: 'onload'); + queryUserFavFolderDetail(type: 'onLoad'); } } diff --git a/lib/pages/favDetail/view.dart b/lib/pages/favDetail/view.dart index a99d1c03..426bfa8f 100644 --- a/lib/pages/favDetail/view.dart +++ b/lib/pages/favDetail/view.dart @@ -1,9 +1,12 @@ import 'dart:async'; +import 'package:easy_debounce/easy_throttle.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; +import 'package:pilipala/common/skeleton/video_card_h.dart'; import 'package:pilipala/common/widgets/http_error.dart'; import 'package:pilipala/common/widgets/network_img_layer.dart'; +import 'package:pilipala/common/widgets/no_data.dart'; import 'package:pilipala/pages/favDetail/index.dart'; import 'widget/fav_video_card.dart'; @@ -37,10 +40,9 @@ class _FavDetailPageState extends State { if (_controller.position.pixels >= _controller.position.maxScrollExtent - 200) { - if (!_favDetailController.isLoadingMore) { - _favDetailController.isLoadingMore = true; + EasyThrottle.throttle('favDetail', const Duration(seconds: 1), () { _favDetailController.onLoad(); - } + }); } }, ); @@ -183,12 +185,7 @@ class _FavDetailPageState extends State { Map data = snapshot.data; if (data['status']) { if (_favDetailController.item!.mediaCount == 0) { - return const SliverToBoxAdapter( - child: SizedBox( - height: 300, - child: Center(child: Text('没有内容')), - ), - ); + return const NoData(); } else { return Obx( () => SliverList( @@ -207,18 +204,30 @@ class _FavDetailPageState extends State { ); } } else { - return const SliverToBoxAdapter( - child: SizedBox( - height: 300, - child: Center(child: Text('加载中')), - ), + // 骨架屏 + return SliverList( + delegate: SliverChildBuilderDelegate((context, index) { + return const VideoCardHSkeleton(); + }, childCount: 10), ); } }, ), SliverToBoxAdapter( - child: SizedBox( - height: MediaQuery.of(context).padding.bottom + 20, + child: Container( + height: MediaQuery.of(context).padding.bottom + 60, + padding: EdgeInsets.only( + bottom: MediaQuery.of(context).padding.bottom), + child: Center( + child: Obx( + () => Text( + _favDetailController.loadingText.value, + style: TextStyle( + color: Theme.of(context).colorScheme.outline, + fontSize: 13), + ), + ), + ), ), ) ],