opt handle res

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2025-05-25 11:16:35 +08:00
parent f29385ccef
commit fd55383778
91 changed files with 957 additions and 387 deletions

View File

@@ -1,8 +1,11 @@
import 'package:PiliPlus/http/loading_state.dart';
import 'package:PiliPlus/http/member.dart';
import 'package:PiliPlus/models/member_ss/item.dart';
import 'package:PiliPlus/models/member_ss/season.dart';
import 'package:PiliPlus/pages/common/common_list_controller.dart';
class SeasonSeriesController extends CommonListController {
class SeasonSeriesController
extends CommonListController<MemberSsData, MemberSsModel> {
SeasonSeriesController(this.mid);
final int mid;
int? count;
@@ -14,9 +17,10 @@ class SeasonSeriesController extends CommonListController {
}
@override
List? getDataList(response) {
return ((response['seasons_list'] as List?) ?? []) +
((response['series_list'] as List?) ?? []);
List<MemberSsModel>? getDataList(MemberSsData response) {
count = response.page?.total;
return (response.seasonsList ?? <MemberSsModel>[]) +
(response.seriesList ?? <MemberSsModel>[]);
}
@override
@@ -27,13 +31,8 @@ class SeasonSeriesController extends CommonListController {
}
@override
bool customHandleResponse(bool isRefresh, Success response) {
count = response.response['page']?['total'];
return false;
}
@override
Future<LoadingState> customGetData() => MemberHttp.seasonSeriesList(
Future<LoadingState<MemberSsData>> customGetData() =>
MemberHttp.seasonSeriesList(
mid: mid,
pn: page,
);

View File

@@ -3,6 +3,7 @@ import 'package:PiliPlus/common/skeleton/video_card_h.dart';
import 'package:PiliPlus/common/widgets/loading_widget/http_error.dart';
import 'package:PiliPlus/http/loading_state.dart';
import 'package:PiliPlus/models/common/member/contribute_type.dart';
import 'package:PiliPlus/models/member_ss/season.dart' show MemberSsModel;
import 'package:PiliPlus/pages/member_season_series/controller.dart';
import 'package:PiliPlus/pages/member_season_series/widget/season_series_card.dart';
import 'package:PiliPlus/pages/member_video/view.dart';
@@ -52,7 +53,7 @@ class _SeasonSeriesPageState extends State<SeasonSeriesPage>
);
}
Widget _buildBody(LoadingState<List<dynamic>?> loadingState) {
Widget _buildBody(LoadingState<List<MemberSsModel>?> loadingState) {
return switch (loadingState) {
Loading() => SliverGrid(
gridDelegate: Grid.videoCardHDelegate(context),
@@ -71,18 +72,17 @@ class _SeasonSeriesPageState extends State<SeasonSeriesPage>
if (index == response.length - 1) {
_controller.onLoadMore();
}
dynamic item = response[index];
MemberSsModel item = response[index];
return SeasonSeriesCard(
item: item,
onTap: () {
bool isSeason = item['meta']['season_id'] != null;
dynamic id = isSeason
? item['meta']['season_id']
: item['meta']['series_id'];
bool isSeason = item.meta!.seasonId != null;
dynamic id =
isSeason ? item.meta!.seasonId : item.meta!.seriesId;
Get.to(
Scaffold(
appBar: AppBar(
title: Text(item['meta']['name']),
title: Text(item.meta!.name!),
),
body: SafeArea(
top: false,
@@ -95,7 +95,7 @@ class _SeasonSeriesPageState extends State<SeasonSeriesPage>
mid: widget.mid,
seasonId: isSeason ? id : null,
seriesId: isSeason ? null : id,
title: item['meta']['name'],
title: item.meta!.name,
),
),
),
@@ -106,9 +106,7 @@ class _SeasonSeriesPageState extends State<SeasonSeriesPage>
childCount: response!.length,
),
)
: HttpError(
onReload: _controller.onReload,
),
: HttpError(onReload: _controller.onReload),
Error(:var errMsg) => HttpError(
errMsg: errMsg,
onReload: _controller.onReload,

View File

@@ -2,6 +2,7 @@ import 'package:PiliPlus/common/constants.dart';
import 'package:PiliPlus/common/widgets/badge.dart';
import 'package:PiliPlus/common/widgets/image/image_save.dart';
import 'package:PiliPlus/common/widgets/image/network_img_layer.dart';
import 'package:PiliPlus/models/member_ss/season.dart';
import 'package:PiliPlus/utils/utils.dart';
import 'package:flutter/material.dart';
@@ -11,15 +12,15 @@ class SeasonSeriesCard extends StatelessWidget {
required this.item,
required this.onTap,
});
final dynamic item;
final MemberSsModel item;
final VoidCallback onTap;
@override
Widget build(BuildContext context) {
return InkWell(
onLongPress: () => imageSaveDialog(
title: item['meta']['name'],
cover: item['meta']['cover'],
title: item.meta!.name,
cover: item.meta!.cover,
),
onTap: onTap,
child: Padding(
@@ -41,13 +42,13 @@ class SeasonSeriesCard extends StatelessWidget {
clipBehavior: Clip.none,
children: [
NetworkImgLayer(
src: item['meta']['cover'],
src: item.meta!.cover,
width: maxWidth,
height: maxHeight,
),
PBadge(
text:
'${item['meta']['season_id'] != null ? '合集' : '列表'}: ${item['meta']['total']}',
'${item.meta!.seasonId != null ? '合集' : '列表'}: ${item.meta!.total}',
bottom: 6.0,
right: 6.0,
),
@@ -71,7 +72,7 @@ class SeasonSeriesCard extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
item['meta']['name'],
item.meta!.name!,
textAlign: TextAlign.start,
style: TextStyle(
fontSize: theme.textTheme.bodyMedium!.fontSize,
@@ -83,7 +84,7 @@ class SeasonSeriesCard extends StatelessWidget {
),
const Spacer(),
Text(
Utils.dateFormat(item['meta']['ptime']),
Utils.dateFormat(item.meta!.ptime),
maxLines: 1,
style: TextStyle(
fontSize: 12,