Browse Source

no message

ios
ZHR007 4 months ago
parent
commit
98900e2cd2
4 changed files with 150 additions and 148 deletions
  1. 23
      lib/controller/discover/visitor_controller.dart
  2. 49
      lib/pages/discover/visitor_list_page.dart
  3. 225
      lib/pages/home/recommend_tab.dart
  4. 1
      pubspec.yaml

23
lib/controller/discover/visitor_controller.dart

@ -1,4 +1,5 @@
// controllers/visitor_controller.dart
import 'package:easy_refresh/easy_refresh.dart';
import 'package:get/get.dart';
import 'package:pull_to_refresh/pull_to_refresh.dart';
import '../../model/discover/visitor_model.dart';
@ -8,7 +9,10 @@ class VisitorController extends GetxController {
var visitors = <VisitorModel>[].obs;
// Refresh controllers
final RefreshController refreshController = RefreshController();
final EasyRefreshController refreshController = EasyRefreshController(
controlFinishRefresh: true,
controlFinishLoad: true,
);
// final RefreshController loadMoreController = RefreshController();
//
@ -45,22 +49,19 @@ class VisitorController extends GetxController {
final newVisitors = _generateMockData(1, pageSize);
visitors.assignAll(newVisitors);
refreshController.refreshCompleted();
refreshController.finishRefresh();
refreshController.resetFooter();
hasMore.value = newVisitors.length == pageSize;
if (newVisitors.isEmpty) {
refreshController.loadNoData();
} else {
refreshController.loadComplete();
hasMore.value = false;
}
print(56);
}
//
void onLoadMore() async {
print('onLoadMore');
if (!hasMore.value) {
refreshController.loadNoData();
return;
}
@ -72,11 +73,11 @@ class VisitorController extends GetxController {
if (newVisitors.isEmpty) {
hasMore.value = false;
refreshController.loadNoData();
refreshController.finishLoad(IndicatorResult.noMore);
} else {
visitors.addAll(newVisitors);
refreshController.loadComplete();
hasMore.value = true;
// hasMore.value = true;
refreshController.finishLoad(IndicatorResult.success);
}
}
@ -146,7 +147,7 @@ class VisitorController extends GetxController {
@override
void onClose() {
refreshController.dispose();
// refreshController.dispose();
// loadMoreController.dispose();
super.onClose();
}

49
lib/pages/discover/visitor_list_page.dart

@ -1,10 +1,10 @@
// pages/visitor_list_page.dart
import 'package:cached_network_image/cached_network_image.dart';
import 'package:dating_touchme_app/extension/ex_widget.dart';
import 'package:easy_refresh/easy_refresh.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:pull_to_refresh/pull_to_refresh.dart';
import '../../controller/discover/visitor_controller.dart';
import '../../model/discover/visitor_model.dart';
@ -89,39 +89,30 @@ class _VisitorListPagePageState extends State<VisitorListPage> {
);
}
return SmartRefresher(
return EasyRefresh(
controller: visitorController.refreshController,
enablePullDown: true,
enablePullUp: true,
onRefresh: visitorController.onRefresh,
onLoading: visitorController.onLoadMore,
onLoad: visitorController.onLoadMore,
header: ClassicHeader(
idleText: '下拉刷新',
releaseText: '松开刷新',
refreshingText: '刷新中...',
completeText: '刷新完成',
dragText: '下拉刷新',
armedText: '释放刷新',
readyText: '刷新中...',
processingText: '刷新中...',
processedText: '刷新完成',
failedText: '刷新失败',
height: 60,
noMoreText: '没有更多数据',
messageText: '更新时间 %T',
showMessage: false
),
footer: CustomFooter(
builder: (BuildContext context, LoadStatus? mode) {
Widget body;
if (mode == LoadStatus.idle) {
body = Text("上拉加载更多");
} else if (mode == LoadStatus.loading) {
body = SizedBox(width: 20, height: 20, child: CircularProgressIndicator(strokeWidth: 2,));
} else if (mode == LoadStatus.failed) {
body = Text("加载失败,点击重试");
} else if (mode == LoadStatus.canLoading) {
body = Text("松开加载更多");
} else {
body = Text("没有更多数据了");
}
return SizedBox(
height: 36,
child: Center(child: body),
);
},
footer: ClassicFooter(
dragText: '上拉加载',
armedText: '释放加载',
readyText: '加载中...',
processingText: '加载中...',
processedText: '加载完成',
failedText: '加载失败',
noMoreText: '没有更多数据',
showMessage: false
),
child: ListView.builder(
padding: const EdgeInsets.only(top: 8, right: 10, left: 10),

225
lib/pages/home/recommend_tab.dart

@ -1,6 +1,6 @@
import 'package:easy_refresh/easy_refresh.dart';
import 'package:flutter/material.dart';
import 'package:get/get.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,17 +16,17 @@ class RecommendTab extends StatefulWidget {
class _RecommendTabState extends State<RecommendTab>
with AutomaticKeepAliveClientMixin {
final HomeController controller = Get.find<HomeController>();
late final RefreshController _refreshController;
// late final RefreshController _refreshController;
@override
void initState() {
super.initState();
_refreshController = RefreshController(initialRefresh: false);
// _refreshController = RefreshController(initialRefresh: false);
}
@override
void dispose() {
_refreshController.dispose();
// _refreshController.dispose();
super.dispose();
}
@ -37,118 +37,127 @@ class _RecommendTabState extends State<RecommendTab>
final bottomPadding = MediaQuery.of(context).padding.bottom;
final tabBarHeight = 64.0;
final totalBottomPadding = bottomPadding + tabBarHeight;
return SizedBox(
height: MediaQuery.of(context).size.height - totalBottomPadding,
child: Obx(() {
final List<MarriageData> dataSource = controller.recommendFeed;
return Obx(() {
// final List<MarriageData> dataSource = controller.recommendFeed;
return SmartRefresher(
controller: _refreshController,
enablePullDown: true,
enablePullUp: true,
physics: const ClampingScrollPhysics(),
header: const ClassicHeader(
refreshingText: '正在刷新...',
completeText: '刷新完成',
idleText: '下拉刷新',
releaseText: '释放刷新',
),
footer: ClassicFooter(
idleText: '上拉加载',
loadingText: '正在加载...',
noDataText: '没有更多数据',
canLoadingText: '释放加载',
),
//
onRefresh: () async {
print('推荐列表下拉刷新被触发');
return EasyRefresh(
controller: EasyRefreshController(),
header: const ClassicHeader(
dragText: '下拉刷新',
armedText: '释放刷新',
readyText: '刷新中...',
processingText: '刷新中...',
processedText: '刷新完成',
failedText: '刷新失败',
noMoreText: '没有更多数据',
showMessage: false
),
footer: ClassicFooter(
dragText: '上拉加载',
armedText: '释放加载',
readyText: '加载中...',
processingText: '加载中...',
processedText: '加载完成',
failedText: '加载失败',
noMoreText: '没有更多数据',
showMessage: false
),
//
onRefresh: () async {
print('推荐列表下拉刷新被触发');
try {
await controller.refreshRecommendData();
print(
'推荐列表刷新完成, hasMore: $controller.recommendHasMore.value');
// _refreshController.loadComplete();
} catch (e) {
print('推荐列表刷新失败: $e');
// _refreshController.refreshFailed();
}
},
//
onLoad: () async {
print(
'推荐列表上拉加载被触发, hasMore: $controller.recommendHasMore.value');
if (controller.recommendHasMore.value) {
try {
await controller.refreshRecommendData();
print('推荐列表刷新完成, hasMore: $controller.recommendHasMore.value');
_refreshController.refreshCompleted();
_refreshController.loadComplete();
} catch (e) {
print('推荐列表刷新失败: $e');
_refreshController.refreshFailed();
}
},
//
onLoading: () async {
print('推荐列表上拉加载被触发, hasMore: $controller.recommendHasMore.value');
if (controller.recommendHasMore.value) {
try {
await controller.loadRecommendMoreData();
//
if (controller.recommendHasMore.value) {
_refreshController.loadComplete();
print('推荐列表加载更多成功');
} else {
_refreshController.loadNoData();
print('推荐列表没有更多数据了');
}
} catch (e) {
print('推荐列表加载更多失败: $e');
_refreshController.loadFailed();
await controller.loadRecommendMoreData();
//
if (controller.recommendHasMore.value) {
// _refreshController.loadComplete();
print('推荐列表加载更多成功');
} else {
// _refreshController.loadNoData();
print('推荐列表没有更多数据了');
}
} else {
_refreshController.loadNoData();
print('推荐列表没有更多数据');
} catch (e) {
print('推荐列表加载更多失败: $e');
// _refreshController.loadFailed();
}
},
child: ListView.separated(
// 使
physics: AlwaysScrollableScrollPhysics(), //
// padding AppBar
padding: EdgeInsets.only(
left: 12,
right: 12,
bottom: 12,
),
itemBuilder: (context, index) {
//
if (dataSource.isEmpty && index == 0) {
// 使
if(controller.recommendIsLoading.value){
return SizedBox(
height: MediaQuery.of(context).size.height - totalBottomPadding,
child: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
CircularProgressIndicator(),
SizedBox(height: 16),
Text('加载数据中...'),
],
),
} else {
// _refreshController.loadNoData();
print('推荐列表没有更多数据');
}
},
child: SizedBox(
height: MediaQuery.of(context).size.height - totalBottomPadding,
child: ListView.separated(
// 使
// padding AppBar
padding: EdgeInsets.only(
left: 12,
right: 12,
bottom: 12,
),
itemBuilder: (context, index) {
//
if (controller.recommendFeed.isEmpty && index == 0) {
// 使
if (controller.recommendIsLoading.value) {
return SizedBox(
height: MediaQuery.of(context).size.height - totalBottomPadding,
child: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
CircularProgressIndicator(),
SizedBox(height: 16),
Text('加载数据中...'),
],
),
);
} else {
return SizedBox(
height: MediaQuery.of(context).size.height - totalBottomPadding,
child: const Center(
child: Text(
"暂无数据",
style: TextStyle(fontSize: 14, color: Color(0xFF999999)),
),
),
);
} else {
return SizedBox(
height: MediaQuery
.of(context)
.size
.height - totalBottomPadding,
child: const Center(
child: Text(
"暂无数据",
style: TextStyle(fontSize: 14, color: Color(0xFF999999)),
),
);
}
),
);
}
//
final item = dataSource[index];
return ContentCard(item: item);
},
separatorBuilder: (context, index) {
//
if (dataSource.isEmpty) return const SizedBox.shrink();
return const SizedBox(height: 12);
},
// item
itemCount: dataSource.isEmpty ? 1 : dataSource.length,
}
//
final item = controller.recommendFeed[index];
return ContentCard(item: item);
},
separatorBuilder: (context, index) {
//
if (controller.recommendFeed.isEmpty) return const SizedBox.shrink();
return const SizedBox(height: 12);
},
// item
itemCount: controller.recommendFeed.isEmpty ? 1 : controller.recommendFeed.length,
)
),
);
}),
);
);
});
}
@override

1
pubspec.yaml

@ -53,6 +53,7 @@ dependencies:
permission_handler: ^12.0.1
flustars: ^2.0.1
easy_refresh: ^3.4.0
keframe: ^3.0.0 # 分帧组件
cached_network_image: ^3.4.1 # 图片加载
extended_image: ^9.0.4 # 图片查看器
wechat_assets_picker: ^9.8.0

Loading…
Cancel
Save