Browse Source

feat(discover): 实现相亲页面下拉刷新功能

- 移除废弃的图片资源引用
- 新增等待状态图片资源
- 集成 easy_refresh 库实现下拉刷新
- 使用 GridView 替代 Wrap 布局优化列表展示
- 添加刷新控制器管理刷新状态
- 优化直播间等待占位符样式
- 移除无用的全局控制器导入
ios
Jolie 4 months ago
parent
commit
8708b90124
5 changed files with 49 additions and 13 deletions
  1. BIN
      assets/images/waitting.png
  2. 2
      lib/generated/assets.dart
  3. 52
      lib/pages/discover/dating_page.dart
  4. 1
      lib/pages/discover/party_page.dart
  5. 7
      lib/widget/live/live_room_anchor_showcase.dart

BIN
assets/images/waitting.png

Before After
Width: 258  |  Height: 274  |  Size: 7.6 KiB

2
lib/generated/assets.dart

@ -99,7 +99,6 @@ class Assets {
static const String imagesEditAvatarsIcon = 'assets/images/edit_avatars_icon.png';
static const String imagesEmoji = 'assets/images/emoji.png';
static const String imagesEmojiTab = 'assets/images/emoji_tab.png';
static const String imagesExampleContent = 'assets/images/example_content.png';
static const String imagesFemale = 'assets/images/female.png';
static const String imagesFireIcon = 'assets/images/fire_icon.png';
static const String imagesFirstPay = 'assets/images/first_pay.png';
@ -188,6 +187,7 @@ class Assets {
static const String imagesVoiceBgMessage = 'assets/images/voice_bg_message.png';
static const String imagesVoiceBgMessageSelf = 'assets/images/voice_bg_message_self.png';
static const String imagesVoiceIcon = 'assets/images/voice_icon.png';
static const String imagesWaitting = 'assets/images/waitting.png';
static const String imagesWallet = 'assets/images/wallet.png';
static const String imagesWechatPay = 'assets/images/wechat_pay.png';
static const String imagesWomenIcon = 'assets/images/women_icon.png';

52
lib/pages/discover/dating_page.dart

@ -1,6 +1,7 @@
import 'package:dating_touchme_app/controller/discover/discover_controller.dart';
import 'package:dating_touchme_app/extension/ex_widget.dart';
import 'package:dating_touchme_app/pages/discover/live_item_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';
@ -21,6 +22,8 @@ class _DatingPageState extends State<DatingPage>
late final DiscoverController discoverController;
late final TabController _tabController;
late final RoomController roomController;
late final EasyRefreshController _refreshController;
@override
void initState() {
super.initState();
@ -35,12 +38,17 @@ class _DatingPageState extends State<DatingPage>
roomController = Get.put(RoomController());
}
_tabController = TabController(length: 4, vsync: this);
_refreshController = EasyRefreshController(
controlFinishRefresh: true,
controlFinishLoad: true,
);
discoverController.loadRtcChannelPage();
}
@override
void dispose() {
_tabController.dispose();
_refreshController.dispose();
super.dispose();
}
@ -114,20 +122,48 @@ class _DatingPageState extends State<DatingPage>
),
);
}
return SingleChildScrollView(
padding: EdgeInsets.symmetric(vertical: 5.w),
child: Wrap(
spacing: 7.w,
runSpacing: 7.w,
children: discoverController.rtcChannelList.map((channel) {
return EasyRefresh(
controller: _refreshController,
header: const ClassicHeader(
dragText: '下拉刷新',
armedText: '释放刷新',
readyText: '刷新中...',
processingText: '刷新中...',
processedText: '刷新完成',
failedText: '刷新失败',
noMoreText: '没有更多数据',
showMessage: false,
),
onRefresh: () async {
print('相亲页面下拉刷新被触发');
try {
await discoverController.refreshRtcChannelPage();
_refreshController.finishRefresh(IndicatorResult.success);
print('相亲页面刷新完成');
} catch (e) {
print('相亲页面刷新失败: $e');
_refreshController.finishRefresh(IndicatorResult.fail);
}
},
child: GridView.builder(
padding: EdgeInsets.symmetric(vertical: 5.w, horizontal: 0),
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2, // 2
crossAxisSpacing: 7.w, //
mainAxisSpacing: 7.w, //
childAspectRatio: 1, //
),
itemCount: discoverController.rtcChannelList.length,
itemBuilder: (context, index) {
final channel = discoverController.rtcChannelList[index];
print('渲染频道: ${channel.channelId}, ${channel.channelName}');
return LiveItemWidget(
channel: channel,
channelId: channel.channelId,
).onTap(() async{
).onTap(() async {
await roomController.joinChannel(channel.channelId);
});
}).toList(),
},
),
);
}),

1
lib/pages/discover/party_page.dart

@ -1,5 +1,6 @@
import 'package:dating_touchme_app/controller/discover/discover_controller.dart';
import 'package:dating_touchme_app/pages/discover/live_item_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';

7
lib/widget/live/live_room_anchor_showcase.dart

@ -1,6 +1,5 @@
import 'package:agora_rtc_engine/agora_rtc_engine.dart';
import 'package:dating_touchme_app/controller/discover/room_controller.dart';
import 'package:dating_touchme_app/controller/global.dart';
import 'package:dating_touchme_app/generated/assets.dart';
import 'package:dating_touchme_app/model/rtc/rtc_channel_detail.dart';
import 'package:dating_touchme_app/rtc/rtc_manager.dart';
@ -131,8 +130,7 @@ class _LiveRoomAnchorShowcaseState extends State<LiveRoomAnchorShowcase> {
if (_roomController.rtcChannelDetail.value?.anchorInfo == null || engine == null) {
return _buildWaitingPlaceholder();
}
print('joined: $joined');
ClientRoleType role = _rtcManager.clientRole;
Get.log("buildAnchorVideo");
return ClipRRect(
borderRadius: BorderRadius.all(Radius.circular(9.w)),
child: SizedBox(
@ -161,12 +159,13 @@ class _LiveRoomAnchorShowcaseState extends State<LiveRoomAnchorShowcase> {
}
Widget _buildWaitingPlaceholder() {
Get.log("buildWaitingPlaceholder");
return Container(
width: 177.w,
height: 175.w,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(9.w)),
color: const Color.fromRGBO(47, 10, 94, 1),
color: Colors.grey.withOpacity(0.5),
),
child: Center(
child: Text(

Loading…
Cancel
Save