Browse Source

refactor(home): 替换下拉刷新组件库并优化刷新逻辑

- 将 easy_refresh 组件替换为 pull_to_refresh
- 更新 NearbyTab 和 RecommendTab 中的刷新控制器初始化方式
- 修改下拉刷新和上拉加载的回调方法命名和调用逻辑
- 调整刷新状态管理方法,如 refreshCompleted、loadComplete 等
- 更新 pubspec.yaml 添加 pull_to_refresh依赖并移除旧依赖配置
-优化刷新 Header 和 Footer 的提示文本显示效果
- 调整 SmartRefresher 的启用选项和物理滚动行为配置
ios
Jolie 4 months ago
parent
commit
2ffb3b8c05
4 changed files with 59 additions and 34 deletions
  1. 42
      lib/pages/home/nearby_tab.dart
  2. 42
      lib/pages/home/recommend_tab.dart
  3. 8
      pubspec.lock
  4. 1
      pubspec.yaml

42
lib/pages/home/nearby_tab.dart

@ -1,6 +1,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.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/controller/home/home_controller.dart';
import 'package:dating_touchme_app/model/home/marriage_data.dart'; import 'package:dating_touchme_app/model/home/marriage_data.dart';
import 'package:dating_touchme_app/pages/home/content_card.dart'; import 'package:dating_touchme_app/pages/home/content_card.dart';
@ -16,15 +16,12 @@ class NearbyTab extends StatefulWidget {
class _NearbyTabState extends State<NearbyTab> class _NearbyTabState extends State<NearbyTab>
with AutomaticKeepAliveClientMixin { with AutomaticKeepAliveClientMixin {
final HomeController controller = Get.find<HomeController>(); final HomeController controller = Get.find<HomeController>();
late final EasyRefreshController _refreshController;
late final RefreshController _refreshController;
@override @override
void initState() { void initState() {
super.initState(); super.initState();
_refreshController = EasyRefreshController(
controlFinishRefresh: true,
controlFinishLoad: true,
);
_refreshController = RefreshController(initialRefresh: false);
} }
@override @override
@ -46,46 +43,57 @@ class _NearbyTabState extends State<NearbyTab>
final bool isLoading = controller.nearbyIsLoading.value; final bool isLoading = controller.nearbyIsLoading.value;
final bool hasMore = controller.nearbyHasMore.value; final bool hasMore = controller.nearbyHasMore.value;
return EasyRefresh(
return SmartRefresher(
controller: _refreshController, 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 { onRefresh: () async {
print('同城列表下拉刷新被触发'); print('同城列表下拉刷新被触发');
try { try {
await controller.refreshNearbyData(); await controller.refreshNearbyData();
_refreshController.finishRefresh(IndicatorResult.success);
_refreshController.refreshCompleted();
print('同城列表刷新完成'); print('同城列表刷新完成');
} catch (e) { } catch (e) {
print('同城列表刷新失败: $e'); print('同城列表刷新失败: $e');
_refreshController.finishRefresh(IndicatorResult.fail);
_refreshController.refreshFailed();
} }
}, },
// //
onLoad: () async {
onLoading: () async {
print('同城列表上拉加载被触发, hasMore: $hasMore'); print('同城列表上拉加载被触发, hasMore: $hasMore');
if (hasMore && controller.nearbyHasMore.value) { if (hasMore && controller.nearbyHasMore.value) {
try { try {
await controller.loadNearbyMoreData(); await controller.loadNearbyMoreData();
// //
if (controller.nearbyHasMore.value) { if (controller.nearbyHasMore.value) {
_refreshController.finishLoad(IndicatorResult.success);
_refreshController.loadComplete();
print('同城列表加载更多成功'); print('同城列表加载更多成功');
} else { } else {
_refreshController.finishLoad(IndicatorResult.noMore);
_refreshController.loadNoData();
print('同城列表没有更多数据了'); print('同城列表没有更多数据了');
} }
} catch (e) { } catch (e) {
print('同城列表加载更多失败: $e'); print('同城列表加载更多失败: $e');
_refreshController.finishLoad(IndicatorResult.fail);
_refreshController.loadFailed();
} }
} else { } else {
_refreshController.finishLoad(IndicatorResult.noMore);
_refreshController.loadNoData();
print('同城列表没有更多数据'); print('同城列表没有更多数据');
} }
}, },
// EasyRefresh child Widget
child: ListView.separated( child: ListView.separated(
// 使 // 使
physics: const AlwaysScrollableScrollPhysics( physics: const AlwaysScrollableScrollPhysics(

42
lib/pages/home/recommend_tab.dart

@ -1,6 +1,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.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/controller/home/home_controller.dart';
import 'package:dating_touchme_app/model/home/marriage_data.dart'; import 'package:dating_touchme_app/model/home/marriage_data.dart';
import 'package:dating_touchme_app/pages/home/content_card.dart'; import 'package:dating_touchme_app/pages/home/content_card.dart';
@ -16,15 +16,12 @@ class RecommendTab extends StatefulWidget {
class _RecommendTabState extends State<RecommendTab> class _RecommendTabState extends State<RecommendTab>
with AutomaticKeepAliveClientMixin { with AutomaticKeepAliveClientMixin {
final HomeController controller = Get.find<HomeController>(); final HomeController controller = Get.find<HomeController>();
late final EasyRefreshController _refreshController;
late final RefreshController _refreshController;
@override @override
void initState() { void initState() {
super.initState(); super.initState();
_refreshController = EasyRefreshController(
controlFinishRefresh: true,
controlFinishLoad: true,
);
_refreshController = RefreshController(initialRefresh: false);
} }
@override @override
@ -46,46 +43,57 @@ class _RecommendTabState extends State<RecommendTab>
final bool isLoading = controller.recommendIsLoading.value; final bool isLoading = controller.recommendIsLoading.value;
final bool hasMore = controller.recommendHasMore.value; final bool hasMore = controller.recommendHasMore.value;
return EasyRefresh(
return SmartRefresher(
controller: _refreshController, 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 { onRefresh: () async {
print('推荐列表下拉刷新被触发'); print('推荐列表下拉刷新被触发');
try { try {
await controller.refreshRecommendData(); await controller.refreshRecommendData();
_refreshController.finishRefresh(IndicatorResult.success);
_refreshController.refreshCompleted();
print('推荐列表刷新完成'); print('推荐列表刷新完成');
} catch (e) { } catch (e) {
print('推荐列表刷新失败: $e'); print('推荐列表刷新失败: $e');
_refreshController.finishRefresh(IndicatorResult.fail);
_refreshController.refreshFailed();
} }
}, },
// //
onLoad: () async {
onLoading: () async {
print('推荐列表上拉加载被触发, hasMore: $hasMore'); print('推荐列表上拉加载被触发, hasMore: $hasMore');
if (hasMore && controller.recommendHasMore.value) { if (hasMore && controller.recommendHasMore.value) {
try { try {
await controller.loadRecommendMoreData(); await controller.loadRecommendMoreData();
// //
if (controller.recommendHasMore.value) { if (controller.recommendHasMore.value) {
_refreshController.finishLoad(IndicatorResult.success);
_refreshController.loadComplete();
print('推荐列表加载更多成功'); print('推荐列表加载更多成功');
} else { } else {
_refreshController.finishLoad(IndicatorResult.noMore);
_refreshController.loadNoData();
print('推荐列表没有更多数据了'); print('推荐列表没有更多数据了');
} }
} catch (e) { } catch (e) {
print('推荐列表加载更多失败: $e'); print('推荐列表加载更多失败: $e');
_refreshController.finishLoad(IndicatorResult.fail);
_refreshController.loadFailed();
} }
} else { } else {
_refreshController.finishLoad(IndicatorResult.noMore);
_refreshController.loadNoData();
print('推荐列表没有更多数据'); print('推荐列表没有更多数据');
} }
}, },
// EasyRefresh child Widget
child: ListView.separated( child: ListView.separated(
// 使 // 使
physics: const AlwaysScrollableScrollPhysics( physics: const AlwaysScrollableScrollPhysics(

8
pubspec.lock

@ -1157,6 +1157,14 @@ packages:
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.5.0" 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: rational:
dependency: transitive dependency: transitive
description: description:

1
pubspec.yaml

@ -66,6 +66,7 @@ dependencies:
fluwx: ^5.7.5 fluwx: ^5.7.5
tobias: ^5.3.1 tobias: ^5.3.1
agora_rtc_engine: ^6.5.3 agora_rtc_engine: ^6.5.3
pull_to_refresh: ^2.0.0
dev_dependencies: dev_dependencies:
flutter_test: flutter_test:

Loading…
Cancel
Save