import 'package:PiliPlus/http/follow.dart'; import 'package:PiliPlus/http/loading_state.dart'; import 'package:PiliPlus/http/member.dart'; import 'package:PiliPlus/http/user.dart'; import 'package:PiliPlus/models/common/follow_order_type.dart'; import 'package:PiliPlus/models_new/follow/data.dart'; import 'package:PiliPlus/models_new/follow/list.dart'; import 'package:PiliPlus/pages/common/common_list_controller.dart'; import 'package:PiliPlus/pages/follow/controller.dart'; import 'package:PiliPlus/utils/storage.dart'; import 'package:PiliPlus/utils/storage_key.dart'; import 'package:PiliPlus/utils/storage_pref.dart'; import 'package:get/get.dart'; class FollowChildController extends CommonListController { FollowChildController(this.controller, this.mid, this.tagid); final FollowController? controller; final int? tagid; final int mid; int? total; late final loadSameFollow = controller?.isOwner == false; late final Rx?>> sameState = LoadingState?>.loading().obs; late final Rx orderType = Pref.followOrderType.obs; void setOrderType(FollowOrderType type) { orderType.value = type; GStorage.setting.put(SettingBoxKey.followOrderType, type.index); } @override void onInit() { super.onInit(); queryData(); if (loadSameFollow) { _loadSameFollow(); } } @override List? getDataList(FollowData response) { total = response.total; return response.list; } @override void checkIsEnd(int length) { if (total != null && length >= total!) { isEnd = true; } } @override bool customHandleResponse(bool isRefresh, Success response) { if (controller != null) { try { if (controller!.isOwner && tagid == null && isRefresh && controller!.followState.value.isSuccess) { controller!.tabs ..[0].count = response.response.total ..refresh(); } } catch (_) {} } return false; } @override Future> customGetData() { if (tagid != null) { return MemberHttp.followUpGroup(mid: mid, tagid: tagid, pn: page); } return FollowHttp.followings( vmid: mid, pn: page, orderType: orderType.value.type, ); } Future _loadSameFollow() async { final res = await UserHttp.sameFollowing(mid: mid); if (res case Success(:final response)) { sameState.value = Success(response.list); } } }