opt: view invalid user space

Closes #414

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2025-03-10 15:03:55 +08:00
parent b75fda3596
commit 2ce79d21b5
7 changed files with 89 additions and 45 deletions

View File

@@ -21,6 +21,10 @@ abstract class CommonController extends GetxController {
return false;
}
bool handleError(String? errMsg) {
return false;
}
// void handleSuccess(List currentList, List dataList) {}
Future queryData([bool isRefresh = true]) async {
@@ -45,7 +49,8 @@ abstract class CommonController extends GetxController {
}
currentPage++;
} else {
if (isRefresh) {
if (isRefresh &&
handleError(response is Error ? response.errMsg : null).not) {
loadingState.value = response;
}
}

View File

@@ -254,7 +254,12 @@ class _MediaPageState extends State<MediaPage>
if (loadingState is Error) {
return SizedBox(
height: 160,
child: Center(child: Text(loadingState.errMsg)),
child: Center(
child: Text(
loadingState.errMsg,
textAlign: TextAlign.center,
),
),
);
}
return const SizedBox();

View File

@@ -8,6 +8,7 @@ import 'package:PiliPlus/pages/member/new/content/member_contribute/member_contr
import 'package:PiliPlus/pages/member/new/controller.dart';
import 'package:PiliPlus/utils/extension.dart';
import 'package:get/get.dart';
import 'package:PiliPlus/models/space/data.dart' as space;
class MemberBangumiCtr extends CommonController {
MemberBangumiCtr({
@@ -17,17 +18,22 @@ class MemberBangumiCtr extends CommonController {
final int mid;
final String? heroTag;
late final int count;
int? count;
late final _ctr = Get.find<MemberControllerNew>(tag: heroTag);
@override
void onInit() {
super.onInit();
dynamic response = (_ctr.loadingState.value as Success).response;
if (response is space.Data) {
currentPage = 2;
dynamic res = (_ctr.loadingState.value as Success).response.season;
dynamic res = response.season;
loadingState.value = LoadingState.success(res.item);
count = res.count;
isEnd = res.item!.length >= count;
} else {
queryData();
}
}
@override
@@ -40,7 +46,7 @@ class MemberBangumiCtr extends CommonController {
data.item ??= <Item>[];
data.item!.insertAll(0, (loadingState.value as Success).response);
}
if (data.item!.length >= count) {
if (isEnd.not && count != null && data.item!.length >= count!) {
isEnd = true;
}
loadingState.value = LoadingState.success(data.item);

View File

@@ -55,20 +55,12 @@ class _MemberFavoriteState extends State<MemberFavorite>
slivers: [
SliverToBoxAdapter(
child: Obx(
() => _controller.first.value.mediaListResponse?.list
?.isNotEmpty ==
true
? _buildItem(_controller.first.value, true)
: const SizedBox.shrink(),
() => _buildItem(_controller.first.value, true),
),
),
SliverToBoxAdapter(
child: Obx(
() => _controller.second.value.mediaListResponse?.list
?.isNotEmpty ==
true
? _buildItem(_controller.second.value, false)
: const SizedBox.shrink(),
() => _buildItem(_controller.second.value, false),
),
),
SliverToBoxAdapter(

View File

@@ -4,6 +4,7 @@ import 'package:PiliPlus/http/loading_state.dart';
import 'package:PiliPlus/http/member.dart';
import 'package:PiliPlus/http/video.dart';
import 'package:PiliPlus/models/space/data.dart';
import 'package:PiliPlus/models/space/item.dart';
import 'package:PiliPlus/models/space/tab2.dart';
import 'package:PiliPlus/pages/common/common_controller.dart';
import 'package:PiliPlus/utils/storage.dart';
@@ -29,7 +30,7 @@ class MemberControllerNew extends CommonController
RxBool isFollow = false.obs;
RxInt relation = 1.obs;
TabController? tabController;
late final List<Tab> tabs;
late List<Tab> tabs;
List<Tab2>? tab2;
RxInt contributeInitialIndex = 0.obs;
double? top;
@@ -112,6 +113,29 @@ class MemberControllerNew extends CommonController
return true;
}
@override
bool handleError(String? errMsg) {
tab2 = [
Tab2(title: '动态', param: 'dynamic'),
Tab2(
title: '投稿',
param: 'contribute',
items: [Item(title: '视频', param: 'video')],
),
Tab2(title: '收藏', param: 'favorite'),
Tab2(title: '追番', param: 'bangumi'),
];
tabs = tab2!.map((item) => Tab(text: item.title)).toList();
tabController = TabController(
vsync: this,
length: tabs.length,
);
scrollRatio.value = 1;
username = errMsg;
loadingState.value = LoadingState.success(null);
return true;
}
@override
Future<LoadingState> customGetData() => MemberHttp.space(mid: mid);

View File

@@ -3,6 +3,7 @@ import 'dart:math';
import 'package:PiliPlus/common/widgets/dynamic_sliver_appbar.dart';
import 'package:PiliPlus/common/widgets/loading_widget.dart';
import 'package:PiliPlus/http/loading_state.dart';
import 'package:PiliPlus/models/space/data.dart';
import 'package:PiliPlus/pages/member/new/content/member_contribute/content/bangumi/member_bangumi.dart';
import 'package:PiliPlus/pages/member/new/content/member_contribute/content/favorite/member_favorite.dart';
import 'package:PiliPlus/pages/member/new/content/member_contribute/member_contribute.dart';
@@ -197,13 +198,15 @@ class _MemberPageNewState extends State<MemberPageNew>
padding: EdgeInsets.only(top: _userController.top ?? 0),
child: const BackButton(),
),
title: Obx(() => _userController.scrollRatio.value == 1 &&
title: IgnorePointer(
child: Obx(() => _userController.scrollRatio.value == 1 &&
_userController.username != null
? Padding(
padding: EdgeInsets.only(top: _userController.top ?? 0),
child: Text(_userController.username!),
)
: const SizedBox.shrink()),
),
pinned: true,
flexibleSpace:
_buildUserInfo(_userController.loadingState.value, isV),
@@ -312,7 +315,8 @@ class _MemberPageNewState extends State<MemberPageNew>
Widget _buildUserInfo(LoadingState userState, [bool isV = true]) {
return switch (userState) {
Loading() => const CircularProgressIndicator(),
Success() => Obx(
Success() => userState.response is Data
? Obx(
() => Padding(
padding: EdgeInsets.only(
bottom: (_userController.tab2?.length ?? 0) > 1 ? 48 : 0),
@@ -329,6 +333,11 @@ class _MemberPageNewState extends State<MemberPageNew>
endTime: _userController.endTime,
),
),
)
: GestureDetector(
onTap: _userController.onReload,
behavior: HitTestBehavior.opaque,
child: SizedBox(height: 56, width: double.infinity),
),
Error() => _errorWidget(userState.errMsg),
LoadingState() => throw UnimplementedError(),

View File

@@ -83,7 +83,10 @@ class _MemberSearchPageState extends State<MemberSearchPage> {
heightFactor: 0.5,
widthFactor: 1.0,
child: Center(
child: Text('搜索「${_memberSearchCtr.uname.value}」的动态、视频'),
child: Text(
'搜索「${_memberSearchCtr.uname.value}」的动态、视频',
textAlign: TextAlign.center,
),
),
),
),