mirror of
https://github.com/bggRGjQaUbCoE/PiliPlus.git
synced 2026-05-31 08:08:19 +08:00
handle relation url
Closes #1566 Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
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';
|
||||
@@ -14,6 +15,11 @@ class FollowChildController
|
||||
final FollowController? controller;
|
||||
final int? tagid;
|
||||
final int mid;
|
||||
int? total;
|
||||
|
||||
late final loadSameFollow = controller?.isOwner == false;
|
||||
late final Rx<LoadingState<List<FollowItemModel>?>> sameState =
|
||||
LoadingState<List<FollowItemModel>?>.loading().obs;
|
||||
|
||||
late final Rx<FollowOrderType> orderType = FollowOrderType.def.obs;
|
||||
|
||||
@@ -21,13 +27,24 @@ class FollowChildController
|
||||
void onInit() {
|
||||
super.onInit();
|
||||
queryData();
|
||||
if (loadSameFollow) {
|
||||
_loadSameFollow();
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
List<FollowItemModel>? 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<FollowData> response) {
|
||||
if (controller != null) {
|
||||
@@ -57,4 +74,11 @@ class FollowChildController
|
||||
orderType: orderType.value.type,
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> _loadSameFollow() async {
|
||||
final res = await UserHttp.sameFollowing(mid: mid);
|
||||
if (res.isSuccess) {
|
||||
sameState.value = Success(res.data.list);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import 'package:PiliPlus/common/skeleton/msg_feed_top.dart';
|
||||
import 'package:PiliPlus/common/widgets/button/more_btn.dart';
|
||||
import 'package:PiliPlus/common/widgets/loading_widget/http_error.dart';
|
||||
import 'package:PiliPlus/common/widgets/refresh_indicator.dart';
|
||||
import 'package:PiliPlus/http/loading_state.dart';
|
||||
@@ -42,7 +43,24 @@ class _FollowChildPageState extends State<FollowChildPage>
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
super.build(context);
|
||||
final colorScheme = ColorScheme.of(context);
|
||||
final padding = MediaQuery.viewPaddingOf(context);
|
||||
Widget sliver = Obx(
|
||||
() => _buildBody(_followController.loadingState.value),
|
||||
);
|
||||
if (_followController.loadSameFollow) {
|
||||
sliver = SliverMainAxisGroup(
|
||||
slivers: [
|
||||
Obx(
|
||||
() => _buildSameFollowing(
|
||||
colorScheme,
|
||||
_followController.sameState.value,
|
||||
),
|
||||
),
|
||||
sliver,
|
||||
],
|
||||
);
|
||||
}
|
||||
Widget child = refreshIndicator(
|
||||
onRefresh: _followController.onRefresh,
|
||||
child: CustomScrollView(
|
||||
@@ -55,9 +73,7 @@ class _FollowChildPageState extends State<FollowChildPage>
|
||||
right: padding.right,
|
||||
bottom: padding.bottom + 100,
|
||||
),
|
||||
sliver: Obx(
|
||||
() => _buildBody(_followController.loadingState.value),
|
||||
),
|
||||
sliver: sliver,
|
||||
),
|
||||
],
|
||||
),
|
||||
@@ -122,6 +138,68 @@ class _FollowChildPageState extends State<FollowChildPage>
|
||||
};
|
||||
}
|
||||
|
||||
Widget _buildSameFollowing(
|
||||
ColorScheme colorScheme,
|
||||
LoadingState<List<FollowItemModel>?> state,
|
||||
) {
|
||||
return switch (state) {
|
||||
Success(:var response) =>
|
||||
response?.isNotEmpty == true
|
||||
? SliverMainAxisGroup(
|
||||
slivers: [
|
||||
SliverToBoxAdapter(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.only(
|
||||
left: 16,
|
||||
right: 16,
|
||||
bottom: 6,
|
||||
),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Text(
|
||||
'我们的共同关注',
|
||||
style: TextStyle(
|
||||
color: colorScheme.onSurfaceVariant,
|
||||
),
|
||||
),
|
||||
moreTextButton(
|
||||
onTap: () => Get.toNamed(
|
||||
'/sameFollowing?mid=${_followController.mid}&name=${widget.controller?.name.value}',
|
||||
),
|
||||
color: colorScheme.outline,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
SliverList.builder(
|
||||
itemCount: response!.length,
|
||||
itemBuilder: (_, index) =>
|
||||
FollowItem(item: response[index]),
|
||||
),
|
||||
SliverToBoxAdapter(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.only(
|
||||
left: 16,
|
||||
top: 16,
|
||||
bottom: 6,
|
||||
),
|
||||
child: Text(
|
||||
'全部关注',
|
||||
style: TextStyle(
|
||||
color: colorScheme.onSurfaceVariant,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
)
|
||||
: const SliverToBoxAdapter(),
|
||||
_ => const SliverToBoxAdapter(),
|
||||
};
|
||||
}
|
||||
|
||||
@override
|
||||
bool get wantKeepAlive =>
|
||||
widget.onSelect != null || widget.controller?.tabController != null;
|
||||
|
||||
Reference in New Issue
Block a user