mirror of
https://github.com/HChaZZY/PiliPlus.git
synced 2025-12-06 09:13:48 +08:00
opt: view invalid user space
Closes #414 Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
@@ -21,6 +21,10 @@ abstract class CommonController extends GetxController {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool handleError(String? errMsg) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// void handleSuccess(List currentList, List dataList) {}
|
// void handleSuccess(List currentList, List dataList) {}
|
||||||
|
|
||||||
Future queryData([bool isRefresh = true]) async {
|
Future queryData([bool isRefresh = true]) async {
|
||||||
@@ -45,7 +49,8 @@ abstract class CommonController extends GetxController {
|
|||||||
}
|
}
|
||||||
currentPage++;
|
currentPage++;
|
||||||
} else {
|
} else {
|
||||||
if (isRefresh) {
|
if (isRefresh &&
|
||||||
|
handleError(response is Error ? response.errMsg : null).not) {
|
||||||
loadingState.value = response;
|
loadingState.value = response;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -254,7 +254,12 @@ class _MediaPageState extends State<MediaPage>
|
|||||||
if (loadingState is Error) {
|
if (loadingState is Error) {
|
||||||
return SizedBox(
|
return SizedBox(
|
||||||
height: 160,
|
height: 160,
|
||||||
child: Center(child: Text(loadingState.errMsg)),
|
child: Center(
|
||||||
|
child: Text(
|
||||||
|
loadingState.errMsg,
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
),
|
||||||
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return const SizedBox();
|
return const SizedBox();
|
||||||
|
|||||||
@@ -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/pages/member/new/controller.dart';
|
||||||
import 'package:PiliPlus/utils/extension.dart';
|
import 'package:PiliPlus/utils/extension.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
|
import 'package:PiliPlus/models/space/data.dart' as space;
|
||||||
|
|
||||||
class MemberBangumiCtr extends CommonController {
|
class MemberBangumiCtr extends CommonController {
|
||||||
MemberBangumiCtr({
|
MemberBangumiCtr({
|
||||||
@@ -17,17 +18,22 @@ class MemberBangumiCtr extends CommonController {
|
|||||||
|
|
||||||
final int mid;
|
final int mid;
|
||||||
final String? heroTag;
|
final String? heroTag;
|
||||||
late final int count;
|
int? count;
|
||||||
late final _ctr = Get.find<MemberControllerNew>(tag: heroTag);
|
late final _ctr = Get.find<MemberControllerNew>(tag: heroTag);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onInit() {
|
void onInit() {
|
||||||
super.onInit();
|
super.onInit();
|
||||||
|
dynamic response = (_ctr.loadingState.value as Success).response;
|
||||||
|
if (response is space.Data) {
|
||||||
currentPage = 2;
|
currentPage = 2;
|
||||||
dynamic res = (_ctr.loadingState.value as Success).response.season;
|
dynamic res = response.season;
|
||||||
loadingState.value = LoadingState.success(res.item);
|
loadingState.value = LoadingState.success(res.item);
|
||||||
count = res.count;
|
count = res.count;
|
||||||
isEnd = res.item!.length >= count;
|
isEnd = res.item!.length >= count;
|
||||||
|
} else {
|
||||||
|
queryData();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -40,7 +46,7 @@ class MemberBangumiCtr extends CommonController {
|
|||||||
data.item ??= <Item>[];
|
data.item ??= <Item>[];
|
||||||
data.item!.insertAll(0, (loadingState.value as Success).response);
|
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;
|
isEnd = true;
|
||||||
}
|
}
|
||||||
loadingState.value = LoadingState.success(data.item);
|
loadingState.value = LoadingState.success(data.item);
|
||||||
|
|||||||
@@ -55,20 +55,12 @@ class _MemberFavoriteState extends State<MemberFavorite>
|
|||||||
slivers: [
|
slivers: [
|
||||||
SliverToBoxAdapter(
|
SliverToBoxAdapter(
|
||||||
child: Obx(
|
child: Obx(
|
||||||
() => _controller.first.value.mediaListResponse?.list
|
() => _buildItem(_controller.first.value, true),
|
||||||
?.isNotEmpty ==
|
|
||||||
true
|
|
||||||
? _buildItem(_controller.first.value, true)
|
|
||||||
: const SizedBox.shrink(),
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
SliverToBoxAdapter(
|
SliverToBoxAdapter(
|
||||||
child: Obx(
|
child: Obx(
|
||||||
() => _controller.second.value.mediaListResponse?.list
|
() => _buildItem(_controller.second.value, false),
|
||||||
?.isNotEmpty ==
|
|
||||||
true
|
|
||||||
? _buildItem(_controller.second.value, false)
|
|
||||||
: const SizedBox.shrink(),
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
SliverToBoxAdapter(
|
SliverToBoxAdapter(
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import 'package:PiliPlus/http/loading_state.dart';
|
|||||||
import 'package:PiliPlus/http/member.dart';
|
import 'package:PiliPlus/http/member.dart';
|
||||||
import 'package:PiliPlus/http/video.dart';
|
import 'package:PiliPlus/http/video.dart';
|
||||||
import 'package:PiliPlus/models/space/data.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/models/space/tab2.dart';
|
||||||
import 'package:PiliPlus/pages/common/common_controller.dart';
|
import 'package:PiliPlus/pages/common/common_controller.dart';
|
||||||
import 'package:PiliPlus/utils/storage.dart';
|
import 'package:PiliPlus/utils/storage.dart';
|
||||||
@@ -29,7 +30,7 @@ class MemberControllerNew extends CommonController
|
|||||||
RxBool isFollow = false.obs;
|
RxBool isFollow = false.obs;
|
||||||
RxInt relation = 1.obs;
|
RxInt relation = 1.obs;
|
||||||
TabController? tabController;
|
TabController? tabController;
|
||||||
late final List<Tab> tabs;
|
late List<Tab> tabs;
|
||||||
List<Tab2>? tab2;
|
List<Tab2>? tab2;
|
||||||
RxInt contributeInitialIndex = 0.obs;
|
RxInt contributeInitialIndex = 0.obs;
|
||||||
double? top;
|
double? top;
|
||||||
@@ -112,6 +113,29 @@ class MemberControllerNew extends CommonController
|
|||||||
return true;
|
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
|
@override
|
||||||
Future<LoadingState> customGetData() => MemberHttp.space(mid: mid);
|
Future<LoadingState> customGetData() => MemberHttp.space(mid: mid);
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import 'dart:math';
|
|||||||
import 'package:PiliPlus/common/widgets/dynamic_sliver_appbar.dart';
|
import 'package:PiliPlus/common/widgets/dynamic_sliver_appbar.dart';
|
||||||
import 'package:PiliPlus/common/widgets/loading_widget.dart';
|
import 'package:PiliPlus/common/widgets/loading_widget.dart';
|
||||||
import 'package:PiliPlus/http/loading_state.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/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/content/favorite/member_favorite.dart';
|
||||||
import 'package:PiliPlus/pages/member/new/content/member_contribute/member_contribute.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),
|
padding: EdgeInsets.only(top: _userController.top ?? 0),
|
||||||
child: const BackButton(),
|
child: const BackButton(),
|
||||||
),
|
),
|
||||||
title: Obx(() => _userController.scrollRatio.value == 1 &&
|
title: IgnorePointer(
|
||||||
|
child: Obx(() => _userController.scrollRatio.value == 1 &&
|
||||||
_userController.username != null
|
_userController.username != null
|
||||||
? Padding(
|
? Padding(
|
||||||
padding: EdgeInsets.only(top: _userController.top ?? 0),
|
padding: EdgeInsets.only(top: _userController.top ?? 0),
|
||||||
child: Text(_userController.username!),
|
child: Text(_userController.username!),
|
||||||
)
|
)
|
||||||
: const SizedBox.shrink()),
|
: const SizedBox.shrink()),
|
||||||
|
),
|
||||||
pinned: true,
|
pinned: true,
|
||||||
flexibleSpace:
|
flexibleSpace:
|
||||||
_buildUserInfo(_userController.loadingState.value, isV),
|
_buildUserInfo(_userController.loadingState.value, isV),
|
||||||
@@ -312,7 +315,8 @@ class _MemberPageNewState extends State<MemberPageNew>
|
|||||||
Widget _buildUserInfo(LoadingState userState, [bool isV = true]) {
|
Widget _buildUserInfo(LoadingState userState, [bool isV = true]) {
|
||||||
return switch (userState) {
|
return switch (userState) {
|
||||||
Loading() => const CircularProgressIndicator(),
|
Loading() => const CircularProgressIndicator(),
|
||||||
Success() => Obx(
|
Success() => userState.response is Data
|
||||||
|
? Obx(
|
||||||
() => Padding(
|
() => Padding(
|
||||||
padding: EdgeInsets.only(
|
padding: EdgeInsets.only(
|
||||||
bottom: (_userController.tab2?.length ?? 0) > 1 ? 48 : 0),
|
bottom: (_userController.tab2?.length ?? 0) > 1 ? 48 : 0),
|
||||||
@@ -329,6 +333,11 @@ class _MemberPageNewState extends State<MemberPageNew>
|
|||||||
endTime: _userController.endTime,
|
endTime: _userController.endTime,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
)
|
||||||
|
: GestureDetector(
|
||||||
|
onTap: _userController.onReload,
|
||||||
|
behavior: HitTestBehavior.opaque,
|
||||||
|
child: SizedBox(height: 56, width: double.infinity),
|
||||||
),
|
),
|
||||||
Error() => _errorWidget(userState.errMsg),
|
Error() => _errorWidget(userState.errMsg),
|
||||||
LoadingState() => throw UnimplementedError(),
|
LoadingState() => throw UnimplementedError(),
|
||||||
|
|||||||
@@ -83,7 +83,10 @@ class _MemberSearchPageState extends State<MemberSearchPage> {
|
|||||||
heightFactor: 0.5,
|
heightFactor: 0.5,
|
||||||
widthFactor: 1.0,
|
widthFactor: 1.0,
|
||||||
child: Center(
|
child: Center(
|
||||||
child: Text('搜索「${_memberSearchCtr.uname.value}」的动态、视频'),
|
child: Text(
|
||||||
|
'搜索「${_memberSearchCtr.uname.value}」的动态、视频',
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|||||||
Reference in New Issue
Block a user