From 2ffb3b8c059fefd5333e62ebbfff62268a8a3e1c Mon Sep 17 00:00:00 2001 From: Jolie <412895109@qq.com> Date: Thu, 13 Nov 2025 16:46:19 +0800 Subject: [PATCH] =?UTF-8?q?refactor(home):=20=E6=9B=BF=E6=8D=A2=E4=B8=8B?= =?UTF-8?q?=E6=8B=89=E5=88=B7=E6=96=B0=E7=BB=84=E4=BB=B6=E5=BA=93=E5=B9=B6?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=88=B7=E6=96=B0=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将 easy_refresh 组件替换为 pull_to_refresh - 更新 NearbyTab 和 RecommendTab 中的刷新控制器初始化方式 - 修改下拉刷新和上拉加载的回调方法命名和调用逻辑 - 调整刷新状态管理方法,如 refreshCompleted、loadComplete 等 - 更新 pubspec.yaml 添加 pull_to_refresh依赖并移除旧依赖配置 -优化刷新 Header 和 Footer 的提示文本显示效果 - 调整 SmartRefresher 的启用选项和物理滚动行为配置 --- lib/pages/home/nearby_tab.dart | 42 ++++++++++++++++++------------- lib/pages/home/recommend_tab.dart | 42 ++++++++++++++++++------------- pubspec.lock | 8 ++++++ pubspec.yaml | 1 + 4 files changed, 59 insertions(+), 34 deletions(-) diff --git a/lib/pages/home/nearby_tab.dart b/lib/pages/home/nearby_tab.dart index e0d0464..99a534d 100644 --- a/lib/pages/home/nearby_tab.dart +++ b/lib/pages/home/nearby_tab.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; -import 'package:easy_refresh/easy_refresh.dart'; +import 'package:pull_to_refresh/pull_to_refresh.dart'; import 'package:dating_touchme_app/controller/home/home_controller.dart'; import 'package:dating_touchme_app/model/home/marriage_data.dart'; import 'package:dating_touchme_app/pages/home/content_card.dart'; @@ -16,15 +16,12 @@ class NearbyTab extends StatefulWidget { class _NearbyTabState extends State with AutomaticKeepAliveClientMixin { final HomeController controller = Get.find(); - late final EasyRefreshController _refreshController; + late final RefreshController _refreshController; @override void initState() { super.initState(); - _refreshController = EasyRefreshController( - controlFinishRefresh: true, - controlFinishLoad: true, - ); + _refreshController = RefreshController(initialRefresh: false); } @override @@ -46,46 +43,57 @@ class _NearbyTabState extends State final bool isLoading = controller.nearbyIsLoading.value; final bool hasMore = controller.nearbyHasMore.value; - return EasyRefresh( + return SmartRefresher( controller: _refreshController, - header: MaterialHeader(backgroundColor: Colors.red.withOpacity(0.9)), - footer: MaterialFooter(backgroundColor: Colors.red.withOpacity(0.9)), + enablePullDown: true, + enablePullUp: true, + header: const ClassicHeader( + refreshingText: '正在刷新...', + completeText: '刷新完成', + idleText: '下拉刷新', + releaseText: '释放刷新', + ), + footer: ClassicFooter( + idleText: '上拉加载', + loadingText: '正在加载...', + noDataText: '没有更多数据', + canLoadingText: '释放加载', + ), // 下拉刷新 onRefresh: () async { print('同城列表下拉刷新被触发'); try { await controller.refreshNearbyData(); - _refreshController.finishRefresh(IndicatorResult.success); + _refreshController.refreshCompleted(); print('同城列表刷新完成'); } catch (e) { print('同城列表刷新失败: $e'); - _refreshController.finishRefresh(IndicatorResult.fail); + _refreshController.refreshFailed(); } }, // 上拉加载更多 - onLoad: () async { + onLoading: () async { print('同城列表上拉加载被触发, hasMore: $hasMore'); if (hasMore && controller.nearbyHasMore.value) { try { await controller.loadNearbyMoreData(); // 完成加载,根据是否有更多数据决定 if (controller.nearbyHasMore.value) { - _refreshController.finishLoad(IndicatorResult.success); + _refreshController.loadComplete(); print('同城列表加载更多成功'); } else { - _refreshController.finishLoad(IndicatorResult.noMore); + _refreshController.loadNoData(); print('同城列表没有更多数据了'); } } catch (e) { print('同城列表加载更多失败: $e'); - _refreshController.finishLoad(IndicatorResult.fail); + _refreshController.loadFailed(); } } else { - _refreshController.finishLoad(IndicatorResult.noMore); + _refreshController.loadNoData(); print('同城列表没有更多数据'); } }, - // EasyRefresh 的 child 必须始终是可滚动的 Widget child: ListView.separated( // 关键:始终允许滚动,即使内容不足 physics: const AlwaysScrollableScrollPhysics( diff --git a/lib/pages/home/recommend_tab.dart b/lib/pages/home/recommend_tab.dart index 20b05b3..d906b31 100644 --- a/lib/pages/home/recommend_tab.dart +++ b/lib/pages/home/recommend_tab.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; -import 'package:easy_refresh/easy_refresh.dart'; +import 'package:pull_to_refresh/pull_to_refresh.dart'; import 'package:dating_touchme_app/controller/home/home_controller.dart'; import 'package:dating_touchme_app/model/home/marriage_data.dart'; import 'package:dating_touchme_app/pages/home/content_card.dart'; @@ -16,15 +16,12 @@ class RecommendTab extends StatefulWidget { class _RecommendTabState extends State with AutomaticKeepAliveClientMixin { final HomeController controller = Get.find(); - late final EasyRefreshController _refreshController; + late final RefreshController _refreshController; @override void initState() { super.initState(); - _refreshController = EasyRefreshController( - controlFinishRefresh: true, - controlFinishLoad: true, - ); + _refreshController = RefreshController(initialRefresh: false); } @override @@ -46,46 +43,57 @@ class _RecommendTabState extends State final bool isLoading = controller.recommendIsLoading.value; final bool hasMore = controller.recommendHasMore.value; - return EasyRefresh( + return SmartRefresher( controller: _refreshController, - header: MaterialHeader(backgroundColor: Colors.red.withOpacity(0.9)), - footer: MaterialFooter(backgroundColor: Colors.red.withOpacity(0.9)), + enablePullDown: true, + enablePullUp: true, + header: const ClassicHeader( + refreshingText: '正在刷新...', + completeText: '刷新完成', + idleText: '下拉刷新', + releaseText: '释放刷新', + ), + footer: ClassicFooter( + idleText: '上拉加载', + loadingText: '正在加载...', + noDataText: '没有更多数据', + canLoadingText: '释放加载', + ), // 下拉刷新 onRefresh: () async { print('推荐列表下拉刷新被触发'); try { await controller.refreshRecommendData(); - _refreshController.finishRefresh(IndicatorResult.success); + _refreshController.refreshCompleted(); print('推荐列表刷新完成'); } catch (e) { print('推荐列表刷新失败: $e'); - _refreshController.finishRefresh(IndicatorResult.fail); + _refreshController.refreshFailed(); } }, // 上拉加载更多 - onLoad: () async { + onLoading: () async { print('推荐列表上拉加载被触发, hasMore: $hasMore'); if (hasMore && controller.recommendHasMore.value) { try { await controller.loadRecommendMoreData(); // 完成加载,根据是否有更多数据决定 if (controller.recommendHasMore.value) { - _refreshController.finishLoad(IndicatorResult.success); + _refreshController.loadComplete(); print('推荐列表加载更多成功'); } else { - _refreshController.finishLoad(IndicatorResult.noMore); + _refreshController.loadNoData(); print('推荐列表没有更多数据了'); } } catch (e) { print('推荐列表加载更多失败: $e'); - _refreshController.finishLoad(IndicatorResult.fail); + _refreshController.loadFailed(); } } else { - _refreshController.finishLoad(IndicatorResult.noMore); + _refreshController.loadNoData(); print('推荐列表没有更多数据'); } }, - // EasyRefresh 的 child 必须始终是可滚动的 Widget child: ListView.separated( // 关键:始终允许滚动,即使内容不足 physics: const AlwaysScrollableScrollPhysics( diff --git a/pubspec.lock b/pubspec.lock index 78bcaf9..1f3099d 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1157,6 +1157,14 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "1.5.0" + pull_to_refresh: + dependency: "direct main" + description: + name: pull_to_refresh + sha256: bbadd5a931837b57739cf08736bea63167e284e71fb23b218c8c9a6e042aad12 + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.0.0" rational: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index db85418..178247a 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -66,6 +66,7 @@ dependencies: fluwx: ^5.7.5 tobias: ^5.3.1 agora_rtc_engine: ^6.5.3 + pull_to_refresh: ^2.0.0 dev_dependencies: flutter_test: