diff --git a/lib/http/member.dart b/lib/http/member.dart index 20a2c728..0fb010b0 100644 --- a/lib/http/member.dart +++ b/lib/http/member.dart @@ -96,7 +96,14 @@ class MemberHttp { 'dm_img_str': dmImgStr.substring(0, dmImgStr.length - 2), 'dm_cover_img_str': dmCoverImgStr.substring(0, dmCoverImgStr.length - 2), 'dm_img_inter': '{"ds":[],"wh":[0,0,0],"of":[0,0,0]}', + ...order == 'charge' + ? { + 'order': 'pubdate', + 'special_type': 'charging', + } + : {} }); + var res = await Request().get( Api.memberArchive, data: params, diff --git a/lib/pages/member_archive/controller.dart b/lib/pages/member_archive/controller.dart index 4c41de4c..667d16c5 100644 --- a/lib/pages/member_archive/controller.dart +++ b/lib/pages/member_archive/controller.dart @@ -9,12 +9,14 @@ class MemberArchiveController extends GetxController { int pn = 1; int count = 0; RxMap currentOrder = {}.obs; - List> orderList = [ + RxList> orderList = [ {'type': 'pubdate', 'label': '最新发布'}, {'type': 'click', 'label': '最多播放'}, {'type': 'stow', 'label': '最多收藏'}, - ]; + {'type': 'charge', 'label': '充电专属'}, + ].obs; RxList archivesList = [].obs; + RxBool isLoading = false.obs; @override void onInit() { @@ -27,6 +29,8 @@ class MemberArchiveController extends GetxController { Future getMemberArchive(type) async { if (type == 'init') { pn = 1; + archivesList.clear(); + isLoading.value = true; } var res = await MemberHttp.memberArchive( mid: mid, @@ -43,6 +47,7 @@ class MemberArchiveController extends GetxController { count = res['data'].page['count']; pn += 1; } + isLoading.value = false; return res; } diff --git a/lib/pages/member_archive/view.dart b/lib/pages/member_archive/view.dart index f38ca0cb..898aa915 100644 --- a/lib/pages/member_archive/view.dart +++ b/lib/pages/member_archive/view.dart @@ -1,6 +1,8 @@ import 'package:easy_debounce/easy_throttle.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; +import 'package:pilipala/common/skeleton/video_card_h.dart'; +import 'package:pilipala/common/widgets/no_data.dart'; import 'package:pilipala/common/widgets/video_card_h.dart'; import 'package:pilipala/utils/utils.dart'; import '../../common/widgets/http_error.dart'; @@ -47,14 +49,29 @@ class _MemberArchivePageState extends State { appBar: AppBar( titleSpacing: 0, centerTitle: false, - title: Text('他的投稿', style: Theme.of(context).textTheme.titleMedium), + title: Obx( + () => Text( + '他的投稿 - ${_memberArchivesController.currentOrder['label']}', + style: Theme.of(context).textTheme.titleMedium), + ), actions: [ - Obx( - () => TextButton.icon( - icon: const Icon(Icons.sort, size: 20), - onPressed: _memberArchivesController.toggleSort, - label: Text(_memberArchivesController.currentOrder['label']!), - ), + // Obx( + PopupMenuButton( + icon: const Icon(Icons.more_vert), + onSelected: (value) { + // 这里处理选择逻辑 + _memberArchivesController.currentOrder.value = value; + _memberArchivesController.getMemberArchive('init'); + }, + itemBuilder: (BuildContext context) => + _memberArchivesController.orderList.map( + (e) { + return PopupMenuItem( + value: e, + child: Text(e['label']!), + ); + }, + ).toList(), ), const SizedBox(width: 6), ], @@ -85,7 +102,14 @@ class _MemberArchivePageState extends State { childCount: list.length, ), ) - : const SliverToBoxAdapter(), + : _memberArchivesController.isLoading.value + ? SliverList( + delegate: SliverChildBuilderDelegate( + (context, index) { + return const VideoCardHSkeleton(); + }, childCount: 10), + ) + : const NoData(), ); } else { return HttpError( @@ -100,7 +124,11 @@ class _MemberArchivePageState extends State { ); } } else { - return const SliverToBoxAdapter(); + return SliverList( + delegate: SliverChildBuilderDelegate((context, index) { + return const VideoCardHSkeleton(); + }, childCount: 10), + ); } }, ),