Browse Source

no message

ios
ZHR007 4 months ago
parent
commit
43d7f5831b
7 changed files with 163 additions and 166 deletions
  1. 14
      lib/controller/discover/visitor_controller.dart
  2. 1
      lib/controller/home/home_controller.dart
  3. 3
      lib/controller/mine/user_controller.dart
  4. 84
      lib/pages/discover/discover_page.dart
  5. 2
      lib/pages/discover/visitor_list_page.dart
  6. 31
      lib/pages/home/content_card.dart
  7. 194
      lib/pages/home/recommend_tab.dart

14
lib/controller/discover/visitor_controller.dart

@ -9,7 +9,7 @@ class VisitorController extends GetxController {
// Refresh controllers
final RefreshController refreshController = RefreshController();
final RefreshController loadMoreController = RefreshController();
// final RefreshController loadMoreController = RefreshController();
//
var currentPage = 1.obs;
@ -53,12 +53,14 @@ class VisitorController extends GetxController {
} else {
refreshController.loadComplete();
}
print(56);
}
//
void onLoadMore() async {
print('onLoadMore');
if (!hasMore.value) {
loadMoreController.loadNoData();
refreshController.loadNoData();
return;
}
@ -70,11 +72,11 @@ class VisitorController extends GetxController {
if (newVisitors.isEmpty) {
hasMore.value = false;
loadMoreController.loadNoData();
refreshController.loadNoData();
} else {
visitors.addAll(newVisitors);
loadMoreController.loadComplete();
hasMore.value = false;
refreshController.loadComplete();
hasMore.value = true;
}
}
@ -145,7 +147,7 @@ class VisitorController extends GetxController {
@override
void onClose() {
refreshController.dispose();
loadMoreController.dispose();
// loadMoreController.dispose();
super.onClose();
}
}

1
lib/controller/home/home_controller.dart

@ -69,6 +69,7 @@ class HomeController extends GetxController {
final int currentPage = result['current'] ?? 1;
final int totalPages = result['pages'] ?? 1;
recommendHasMore.value = currentPage < totalPages;
print(recommendHasMore.value);
} catch (e) {
_handleError('获取推荐列表异常', e, '推荐列表加载失败,请稍后重试');
} finally {

3
lib/controller/mine/user_controller.dart

@ -2,6 +2,7 @@ import 'package:dating_touchme_app/im/im_manager.dart';
import 'package:dating_touchme_app/oss/oss_manager.dart';
import 'package:get/get.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:get_storage/get_storage.dart';
import '../../model/mine/authentication_data.dart';
import '../../model/mine/user_data.dart';
import '../../network/user_api.dart';
@ -13,6 +14,7 @@ class UserController extends GetxController {
// UserApi实例
late UserApi _userApi;
final storage = GetStorage();
@override
void onInit() {
@ -118,6 +120,7 @@ class UserController extends GetxController {
Get.offAll(() => UserInfoPage());
}
} else if(!isMain){
await storage.write('userId', userId);
Get.offAll(MainPage());
}
}

84
lib/pages/discover/discover_page.dart

@ -5,6 +5,7 @@ import 'package:dating_touchme_app/pages/discover/live_room_page.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:tdesign_flutter/tdesign_flutter.dart';
class DiscoverPage extends StatefulWidget {
const DiscoverPage({super.key});
@ -14,7 +15,7 @@ class DiscoverPage extends StatefulWidget {
}
class _DiscoverPageState extends State<DiscoverPage>
with AutomaticKeepAliveClientMixin {
with AutomaticKeepAliveClientMixin, TickerProviderStateMixin {
late final RoomController roomController;
List<String> topNav = ["相亲", "聚会脱单"];
@ -32,8 +33,6 @@ class _DiscoverPageState extends State<DiscoverPage>
{"isNew": false},
];
List<String> tabList = ["全部", "同城", "相亲视频", "相亲语音"];
int active = 0;
void changeNav(int active) {
@ -63,8 +62,8 @@ class _DiscoverPageState extends State<DiscoverPage>
),
Container(
padding: EdgeInsets.symmetric(horizontal: 12.w),
constraints: BoxConstraints(minHeight: ScreenUtil().setHeight(800)),
height: MediaQuery.of(context).size.height - 64,
// constraints: BoxConstraints(minHeight: ScreenUtil().setHeight(800)),
child: Column(
children: [
HomeAppbar(
@ -94,59 +93,28 @@ class _DiscoverPageState extends State<DiscoverPage>
),
),
),
Container(
width: 351.w,
height: 45.w,
child: SingleChildScrollView(
scrollDirection: Axis.horizontal,
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
...tabList.asMap().entries.map((entry) {
return Container(
margin: EdgeInsets.only(right: 27.w),
child: InkWell(
onTap: () {
active = entry.key;
setState(() {});
},
child: Container(
height: 21.w,
padding: EdgeInsets.symmetric(
horizontal: active == entry.key ? 30.w : 0,
),
decoration: BoxDecoration(
borderRadius: BorderRadius.all(
Radius.circular(21.w),
),
color: Color.fromRGBO(
108,
105,
244,
active == entry.key ? 1 : 0,
),
),
child: Center(
child: Text(
entry.value,
style: TextStyle(
fontSize: 12.w,
color: active == entry.key
? Colors.white
: const Color.fromRGBO(51, 51, 51, .7),
fontWeight: active == entry.key
? FontWeight.w700
: FontWeight.w500,
),
),
),
),
),
);
}),
],
),
),
TDTabBar(
tabs: [
TDTab(child: Padding(padding: EdgeInsets.only(right: 16, left: 16), child: Text('全部'))),
TDTab(child: Padding(padding: EdgeInsets.only(right: 16, left: 16), child: Text('同城'))),
TDTab(child: Padding(padding: EdgeInsets.only(right: 12, left: 12), child: Text('相亲视频'))),
TDTab(child: Padding(padding: EdgeInsets.only(right: 12, left: 12), child: Text('相亲语音')))
],
// width: MediaQuery.of(context).size.width - 64,
backgroundColor: Colors.transparent,
labelPadding: const EdgeInsets.only(right: 4, top: 10, bottom: 10, left: 4),
selectedBgColor: const Color.fromRGBO(108, 105, 244, 1),
unSelectedBgColor: Colors.transparent,
labelColor: Colors.white,
dividerHeight: 0,
tabAlignment: TabAlignment.start,
outlineType: TDTabBarOutlineType.capsule,
controller: TabController(length: 4, vsync: this),
showIndicator: false,
isScrollable: true,
onTap: (index){
print(index);
},
),
Expanded(
child: SingleChildScrollView(

2
lib/pages/discover/visitor_list_page.dart

@ -92,7 +92,7 @@ class _VisitorListPagePageState extends State<VisitorListPage> {
return SmartRefresher(
controller: visitorController.refreshController,
enablePullDown: true,
enablePullUp: visitorController.hasMore.value,
enablePullUp: true,
onRefresh: visitorController.onRefresh,
onLoading: visitorController.onLoadMore,
header: ClassicHeader(

31
lib/pages/home/content_card.dart

@ -36,7 +36,7 @@ class _CardHeader extends StatelessWidget {
child: ClipRRect(
borderRadius: BorderRadius.circular(30),
child: CachedNetworkImage(
imageUrl: item.avatar,
imageUrl: '${item.avatar}?x-oss-process=image/format,webp/resize,w_320',
width: 60,
height: 60,
imageBuilder: (context, imageProvider) => Container(
@ -263,7 +263,7 @@ class _CardHeader extends StatelessWidget {
//
class ContentCard extends StatelessWidget {
final MarriageData item;
const ContentCard({required this.item});
ContentCard({required this.item});
@override
Widget build(BuildContext context) {
@ -382,18 +382,25 @@ class _NetworkImageWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8),
image: DecorationImage(
image: imageUrl.isNotEmpty
? NetworkImage(imageUrl)
: AssetImage(Assets.imagesAvatarsExample) as ImageProvider,
return CachedNetworkImage(
imageUrl: '$imageUrl?x-oss-process=image/format,webp/resize,w_320',
width: double.infinity,
height: double.infinity,
imageBuilder: (context, imageProvider) => Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8),
image: DecorationImage(
image: imageProvider,
fit: BoxFit.cover,
),
),
),
errorWidget: (context, url, error) => Image.asset(
Assets.imagesAvatarsExample,
width: 60,
height: 60,
fit: BoxFit.cover,
),
),
width: double.infinity,
height: double.infinity,
);
}
}

194
lib/pages/home/recommend_tab.dart

@ -37,101 +37,117 @@ 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;
final bool hasMore = controller.recommendHasMore.value;
return SmartRefresher(
controller: _refreshController,
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.refreshCompleted();
print('推荐列表刷新完成');
} catch (e) {
print('推荐列表刷新失败: $e');
_refreshController.refreshFailed();
}
},
//
onLoading: () async {
print('推荐列表上拉加载被触发, hasMore: $hasMore');
if (hasMore && controller.recommendHasMore.value) {
try {
await controller.loadRecommendMoreData();
//
if (controller.recommendHasMore.value) {
_refreshController.loadComplete();
print('推荐列表加载更多成功');
} else {
_refreshController.loadNoData();
print('推荐列表没有更多数据了');
}
} catch (e) {
print('推荐列表加载更多失败: $e');
_refreshController.loadFailed();
}
} else {
_refreshController.loadNoData();
print('推荐列表没有更多数据');
}
},
child: ListView.separated(
// 使
physics: const AlwaysScrollableScrollPhysics(
parent: BouncingScrollPhysics(),
return SmartRefresher(
controller: _refreshController,
enablePullDown: true,
enablePullUp: true,
physics: const ClampingScrollPhysics(),
header: const ClassicHeader(
refreshingText: '正在刷新...',
completeText: '刷新完成',
idleText: '下拉刷新',
releaseText: '释放刷新',
),
// padding AppBar
padding: EdgeInsets.only(
left: 12,
right: 12,
bottom: totalBottomPadding + 12,
footer: ClassicFooter(
idleText: '上拉加载',
loadingText: '正在加载...',
noDataText: '没有更多数据',
canLoadingText: '释放加载',
),
itemBuilder: (context, index) {
//
if (dataSource.isEmpty && index == 0) {
// 使
return SizedBox(
height: MediaQuery.of(context).size.height * 1.2,
child: const Center(
child: Text(
"暂无数据",
style: TextStyle(fontSize: 14, color: Color(0xFF999999)),
),
),
);
//
onRefresh: () async {
print('推荐列表下拉刷新被触发');
try {
await controller.refreshRecommendData();
print('推荐列表刷新完成, hasMore: $controller.recommendHasMore.value');
_refreshController.refreshCompleted();
_refreshController.loadComplete();
} catch (e) {
print('推荐列表刷新失败: $e');
_refreshController.refreshFailed();
}
//
final item = dataSource[index];
return ContentCard(item: item);
},
separatorBuilder: (context, index) {
//
if (dataSource.isEmpty) return const SizedBox.shrink();
return const SizedBox(height: 12);
//
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();
}
} else {
_refreshController.loadNoData();
print('推荐列表没有更多数据');
}
},
// item
itemCount: dataSource.isEmpty ? 1 : dataSource.length,
),
);
});
child: ListView.separated(
// 使
// 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 {
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,
),
);
}),
);
}
@override

Loading…
Cancel
Save