From fb92e40e4d89b5d86a16d5a062b4edae5e9876b6 Mon Sep 17 00:00:00 2001 From: guozhigq Date: Sun, 4 Aug 2024 00:35:42 +0800 Subject: [PATCH] =?UTF-8?q?mod:=20=E8=A1=A5=E5=85=85=E5=90=88=E9=9B=86?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/http/api.dart | 2 ++ lib/http/member.dart | 36 ++++++++++++++++++++ lib/models/member/seasons.dart | 13 ++++++++ lib/pages/member/widgets/seasons.dart | 23 +++++++++++-- lib/pages/member_seasons/controller.dart | 42 +++++++++++++++++++++--- lib/pages/member_seasons/view.dart | 7 ++-- 6 files changed, 114 insertions(+), 9 deletions(-) diff --git a/lib/http/api.dart b/lib/http/api.dart index 46bbb6ac..31e5a38b 100644 --- a/lib/http/api.dart +++ b/lib/http/api.dart @@ -487,6 +487,8 @@ class Api { static const getSeasonDetailApi = '/x/polymer/web-space/seasons_archives_list'; + static const getSeriesDetailApi = '/x/series/archives'; + /// 获取未读动态数 static const getUnreadDynamic = '/x/web-interface/dynamic/entrance'; diff --git a/lib/http/member.dart b/lib/http/member.dart index 0fb010b0..e87aa42e 100644 --- a/lib/http/member.dart +++ b/lib/http/member.dart @@ -520,4 +520,40 @@ class MemberHttp { }; } } + + static Future getSeriesDetail({ + required int mid, + required int currentMid, + required int seriesId, + required int pn, + }) async { + var res = await Request().get( + Api.getSeriesDetailApi, + data: { + 'mid': mid, + 'series_id': seriesId, + 'only_normal': true, + 'sort': 'desc', + 'pn': pn, + 'ps': 30, + 'current_mid': currentMid, + }, + ); + if (res.data['code'] == 0) { + try { + return { + 'status': true, + 'data': MemberSeasonsDataModel.fromJson(res.data['data']) + }; + } catch (err) { + print(err); + } + } else { + return { + 'status': false, + 'data': [], + 'msg': res.data['message'], + }; + } + } } diff --git a/lib/models/member/seasons.dart b/lib/models/member/seasons.dart index 88b93c78..275466a6 100644 --- a/lib/models/member/seasons.dart +++ b/lib/models/member/seasons.dart @@ -2,10 +2,12 @@ class MemberSeasonsDataModel { MemberSeasonsDataModel({ this.page, this.seasonsList, + this.seriesList, }); Map? page; List? seasonsList; + List? seriesList; MemberSeasonsDataModel.fromJson(Map json) { page = json['page']; @@ -19,6 +21,11 @@ class MemberSeasonsDataModel { .map((e) => MemberSeasonsList.fromJson(e)) .toList() : []; + seriesList = json['archives'] != null + ? json['archives'] + .map((e) => MemberArchiveItem.fromJson(e)) + .toList() + : []; seasonsList = [...tempList1, ...tempList2]; } @@ -93,6 +100,8 @@ class MamberMeta { this.ptime, this.seasonId, this.total, + this.seriesId, + this.category, }); String? cover; @@ -102,6 +111,8 @@ class MamberMeta { int? ptime; int? seasonId; int? total; + int? seriesId; + int? category; MamberMeta.fromJson(Map json) { cover = json['cover']; @@ -111,5 +122,7 @@ class MamberMeta { ptime = json['ptime']; seasonId = json['season_id']; total = json['total']; + seriesId = json['series_id']; + category = json['category']; } } diff --git a/lib/pages/member/widgets/seasons.dart b/lib/pages/member/widgets/seasons.dart index 1367d6bd..1749ff45 100644 --- a/lib/pages/member/widgets/seasons.dart +++ b/lib/pages/member/widgets/seasons.dart @@ -24,8 +24,27 @@ class MemberSeasonsPanel extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ ListTile( - onTap: () => Get.toNamed( - '/memberSeasons?mid=${item.meta!.mid}&seasonId=${item.meta!.seasonId}&seasonName=${item.meta!.name}'), + onTap: () { + final int category = item.meta!.category!; + Map parameters = {}; + if (category == 0) { + parameters = { + 'category': '0', + 'mid': item.meta!.mid.toString(), + 'seasonId': item.meta!.seasonId.toString(), + 'seasonName': item.meta!.name!, + }; + } + if (category == 1) { + parameters = { + 'category': '1', + 'mid': item.meta!.mid.toString(), + 'seriesId': item.meta!.seriesId.toString(), + 'seasonName': item.meta!.name!, + }; + } + Get.toNamed('/memberSeasons', parameters: parameters); + }, title: Text( item.meta!.name!, maxLines: 1, diff --git a/lib/pages/member_seasons/controller.dart b/lib/pages/member_seasons/controller.dart index 82ef0af0..58a9035f 100644 --- a/lib/pages/member_seasons/controller.dart +++ b/lib/pages/member_seasons/controller.dart @@ -6,7 +6,9 @@ import 'package:pilipala/models/member/seasons.dart'; class MemberSeasonsController extends GetxController { final ScrollController scrollController = ScrollController(); late int mid; - late int seasonId; + int? seasonId; + int? seriesId; + late String category; int pn = 1; int ps = 30; int count = 0; @@ -17,17 +19,23 @@ class MemberSeasonsController extends GetxController { void onInit() { super.onInit(); mid = int.parse(Get.parameters['mid']!); - seasonId = int.parse(Get.parameters['seasonId']!); + category = Get.parameters['category']!; + if (category == '0') { + seasonId = int.parse(Get.parameters['seriesId']!); + } + if (category == '1') { + seriesId = int.parse(Get.parameters['seriesId']!); + } } - // 获取专栏详情 + // 获取专栏详情 0: 专栏 1: 系列 Future getSeasonDetail(type) async { if (type == 'onRefresh') { pn = 1; } var res = await MemberHttp.getSeasonDetail( mid: mid, - seasonId: seasonId, + seasonId: seasonId!, pn: pn, ps: ps, sortReverse: false, @@ -40,8 +48,32 @@ class MemberSeasonsController extends GetxController { return res; } + // 获取系列详情 0: 专栏 1: 系列 + Future getSeriesDetail(type) async { + if (type == 'onRefresh') { + pn = 1; + } + var res = await MemberHttp.getSeriesDetail( + mid: mid, + seriesId: seriesId!, + pn: pn, + currentMid: 17340771, + ); + if (res['status']) { + seasonsList.addAll(res['data'].seriesList); + page = res['data'].page; + pn += 1; + } + return res; + } + // 上拉加载 Future onLoad() async { - getSeasonDetail('onLoad'); + if (category == '0') { + getSeasonDetail('onLoad'); + } + if (category == '1') { + getSeriesDetail('onLoad'); + } } } diff --git a/lib/pages/member_seasons/view.dart b/lib/pages/member_seasons/view.dart index 556e2ec5..b8c0407d 100644 --- a/lib/pages/member_seasons/view.dart +++ b/lib/pages/member_seasons/view.dart @@ -17,12 +17,15 @@ class _MemberSeasonsPageState extends State { Get.put(MemberSeasonsController()); late Future _futureBuilderFuture; late ScrollController scrollController; + late String category; @override void initState() { super.initState(); - _futureBuilderFuture = - _memberSeasonsController.getSeasonDetail('onRefresh'); + category = Get.parameters['category']!; + _futureBuilderFuture = category == '0' + ? _memberSeasonsController.getSeasonDetail('onRefresh') + : _memberSeasonsController.getSeriesDetail('onRefresh'); scrollController = _memberSeasonsController.scrollController; scrollController.addListener( () {