From 99224640d86b3737bd827eea23e3e72e66d25d0a Mon Sep 17 00:00:00 2001 From: orz12 Date: Thu, 11 Jul 2024 17:36:47 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=8A=A8=E6=80=81=E4=BE=A7=E6=A0=8F?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=8C=89=E6=9C=80=E5=B8=B8=E8=AE=BF=E9=97=AE?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E6=89=80=E6=9C=89=E5=B7=B2=E5=85=B3=E6=B3=A8?= =?UTF-8?q?Up=E5=8A=9F=E8=83=BD=EF=BC=9B=E6=8A=BD=E5=B1=89=E5=BC=8F?= =?UTF-8?q?=E4=BE=A7=E6=A0=8F=E9=99=90=E5=88=B6=E5=AE=89=E5=85=A8=E5=9F=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/models/dynamics/up.dart | 6 +-- lib/pages/dynamics/controller.dart | 70 ++++++++++++++++++++++++++++ lib/pages/dynamics/view.dart | 17 +++++-- lib/pages/setting/extra_setting.dart | 2 +- lib/pages/setting/style_setting.dart | 7 +++ lib/utils/storage.dart | 1 + 6 files changed, 96 insertions(+), 7 deletions(-) diff --git a/lib/models/dynamics/up.dart b/lib/models/dynamics/up.dart index cfd1fa7d..3f620070 100644 --- a/lib/models/dynamics/up.dart +++ b/lib/models/dynamics/up.dart @@ -73,14 +73,14 @@ class UpItem { UpItem({ this.face, this.hasUpdate, - this.isReserveRecall, + // this.isReserveRecall, this.mid, this.uname, }); String? face; bool? hasUpdate; - bool? isReserveRecall; + // bool? isReserveRecall; int? mid; String? uname; String type = 'up'; @@ -88,7 +88,7 @@ class UpItem { UpItem.fromJson(Map json) { face = json['face']; hasUpdate = json['has_update']; - isReserveRecall = json['is_reserve_recall']; + // isReserveRecall = json['is_reserve_recall']; mid = json['mid']; uname = json['uname']; } diff --git a/lib/pages/dynamics/controller.dart b/lib/pages/dynamics/controller.dart index 13c2783f..f9346fd5 100644 --- a/lib/pages/dynamics/controller.dart +++ b/lib/pages/dynamics/controller.dart @@ -1,5 +1,6 @@ // ignore_for_file: avoid_print +import 'package:PiliPalaX/http/follow.dart'; import 'package:flutter/material.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart'; @@ -17,6 +18,8 @@ import 'package:PiliPalaX/utils/id_utils.dart'; import 'package:PiliPalaX/utils/storage.dart'; import 'package:PiliPalaX/utils/utils.dart'; +import '../../models/follow/result.dart'; + class DynamicsController extends GetxController with GetTickerProviderStateMixin { String? offset = ''; @@ -35,6 +38,10 @@ class DynamicsController extends GetxController var userInfo; RxBool isLoadingDynamic = false.obs; Box setting = GStorage.setting; + List hasUpdatedUps = []; + List allFollowedUps = []; + int allFollowedUpsPage = 1; + int allFollowedUpsTotal = 0; @override void onInit() { @@ -205,6 +212,34 @@ class DynamicsController extends GetxController } } + Future queryFollowing2() async { + if (allFollowedUps.length >= allFollowedUpsTotal) { + SmartDialog.showToast('没有更多了'); + return; + } + var res = await FollowHttp.followings( + vmid: userInfo.mid, + pn: allFollowedUpsPage, + ps: 50, + orderType: 'attention', + ); + if (res['status']) { + allFollowedUps.addAll(res['data'].list.map((FollowItemModel e) => + UpItem( + face: e.face, + mid: e.mid, + uname: e.uname, + hasUpdate: + hasUpdatedUps.any((element) => element.mid == e.mid)))); + allFollowedUpsPage += 1; + allFollowedUpsTotal = res['data'].total; + upData.value.upList = allFollowedUps; + upData.refresh(); + } else { + SmartDialog.showToast(res['msg']); + } + } + Future queryFollowUp({type = 'init'}) async { if (!userLogin.value) { return {'status': false, 'msg': '账号未登录'}; @@ -213,6 +248,41 @@ class DynamicsController extends GetxController upData.value.upList = []; upData.value.liveUsers = LiveUsers(); } + if (setting.get(SettingBoxKey.dynamicsShowAllFollowedUp, + defaultValue: false)) { + allFollowedUpsPage = 1; + Future f1 = DynamicsHttp.followUp(); + Future f2 = FollowHttp.followings( + vmid: userInfo.mid, + pn: allFollowedUpsPage, + ps: 50, + orderType: 'attention'); + List ress = await Future.wait([f1, f2]); + if (!ress[0]['status']) { + SmartDialog.showToast("获取关注动态失败:${ress[0]['msg']}"); + } else { + upData.value.liveUsers = ress[0]['data'].liveUsers; + hasUpdatedUps = ress[0]['data'].upList!; + } + if (!ress[1]['status']) { + SmartDialog.showToast("获取关注列表失败:${ress[1]['msg']}"); + } else { + allFollowedUps = ress[1]['data'] + .list + .map((FollowItemModel e) => UpItem( + face: e.face, + mid: e.mid, + uname: e.uname, + hasUpdate: + hasUpdatedUps.any((element) => element.mid == e.mid))) + .toList(); + allFollowedUpsPage += 1; + allFollowedUpsTotal = ress[1]['data'].total; + } + upData.value.upList = + allFollowedUpsTotal > 0 ? allFollowedUps : hasUpdatedUps; + return ress[0]; + } var res = await DynamicsHttp.followUp(); if (res['status']) { upData.value = res['data']; diff --git a/lib/pages/dynamics/view.dart b/lib/pages/dynamics/view.dart index 001d6535..582de471 100644 --- a/lib/pages/dynamics/view.dart +++ b/lib/pages/dynamics/view.dart @@ -2,6 +2,7 @@ import 'dart:async'; import 'package:PiliPalaX/models/common/dynamics_type.dart'; import 'package:PiliPalaX/models/common/up_panel_position.dart'; +import 'package:easy_debounce/easy_throttle.dart'; import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; import 'package:flutter/services.dart'; @@ -57,6 +58,17 @@ class _DynamicsPageState extends State defaultValue: UpPanelPosition.leftFixed.code)]; print('upPanelPosition: $upPanelPosition'); scrollController = _dynamicsController.scrollController; + if (GStorage.setting + .get(SettingBoxKey.dynamicsShowAllFollowedUp, defaultValue: false)) { + scrollController.addListener(() { + if (scrollController.position.pixels >= + scrollController.position.maxScrollExtent - 300) { + EasyThrottle.throttle('following', const Duration(seconds: 1), () { + _dynamicsController.queryFollowing2(); + }); + } + }); + } } @override @@ -102,7 +114,6 @@ class _DynamicsPageState extends State @override Widget build(BuildContext context) { - print('upPanelPosition1: $upPanelPosition'); super.build(context); return Scaffold( backgroundColor: Colors.transparent, @@ -145,11 +156,11 @@ class _DynamicsPageState extends State })), ), drawer: upPanelPosition == UpPanelPosition.leftDrawer - ? upPanelPart() + ? SafeArea(child: upPanelPart()) : null, drawerEnableOpenDragGesture: true, endDrawer: upPanelPosition == UpPanelPosition.rightDrawer - ? upPanelPart() + ? SafeArea(child: upPanelPart()) : null, endDrawerEnableOpenDragGesture: true, body: Row(children: [ diff --git a/lib/pages/setting/extra_setting.dart b/lib/pages/setting/extra_setting.dart index 58705311..78fb27d9 100644 --- a/lib/pages/setting/extra_setting.dart +++ b/lib/pages/setting/extra_setting.dart @@ -257,7 +257,7 @@ class _ExtraSettingState extends State { return SelectDialog( title: '动态展示', value: defaultDynamicType, - values: DynamicsType.values.map((e) { + values: DynamicsType.values.sublist(0, 4).map((e) { return {'title': e.labels, 'value': e.index}; }).toList()); }, diff --git a/lib/pages/setting/style_setting.dart b/lib/pages/setting/style_setting.dart index face4690..35f94bbd 100644 --- a/lib/pages/setting/style_setting.dart +++ b/lib/pages/setting/style_setting.dart @@ -185,6 +185,13 @@ class _StyleSettingState extends State { } }, ), + const SetSwitchItem( + title: '动态页显示所有已关注Up主', + subTitle: '并以最常访问排序Up', + leading: Icon(Icons.people_alt_outlined), + setKey: SettingBoxKey.dynamicsShowAllFollowedUp, + defaultVal: false, + ), ListTile( dense: false, onTap: () => settingController.setDynamicBadgeMode(context), diff --git a/lib/utils/storage.dart b/lib/utils/storage.dart index acffc0f5..09a1d9cb 100644 --- a/lib/utils/storage.dart +++ b/lib/utils/storage.dart @@ -183,6 +183,7 @@ class SettingBoxKey { 'videoPlayerShowStatusBarBackgroundColor', // 播放页状态栏显示为背景色 dynamicsWaterfallFlow = 'dynamicsWaterfallFlow', // 动态瀑布流 upPanelPosition = 'upPanelPosition', // up主面板位置 + dynamicsShowAllFollowedUp = 'dynamicsShowAllFollowedUp', // 动态显示全部关注up useSideBar = 'useSideBar', enableMYBar = 'enableMYBar', hideSearchBar = 'hideSearchBar', // 收起顶栏