diff --git a/lib/http/video.dart b/lib/http/video.dart index 5d3098d7..f67702f0 100644 --- a/lib/http/video.dart +++ b/lib/http/video.dart @@ -138,7 +138,12 @@ class VideoHttp { 'data': PlayUrlModel.fromJson(res.data['data']) }; } else { - return {'status': false, 'data': []}; + return { + 'status': false, + 'data': [], + 'code': res.data['code'], + 'msg': res.data['message'], + }; } } catch (err) { return {'status': false, 'data': [], 'msg': err}; @@ -155,13 +160,14 @@ class VideoHttp { Map errMap = { -400: '请求错误', -403: '权限不足', - -404: '无视频', + -404: '视频资源失效', 62002: '稿件不可见', 62004: '稿件审核中', }; return { 'status': false, 'data': null, + 'code': result.code, 'msg': errMap[result.code] ?? '请求异常', }; } diff --git a/lib/models/user/info.dart b/lib/models/user/info.dart index 8baad042..c520443f 100644 --- a/lib/models/user/info.dart +++ b/lib/models/user/info.dart @@ -130,7 +130,6 @@ class LevelInfo { currentLevel = json['current_level']; currentMin = json['current_min']; currentExp = json['current_exp']; - // nextExp = json['next_exp']; nextExp = json['current_level'] == 6 ? json['current_exp'] : json['next_exp']; } diff --git a/lib/pages/bangumi/controller.dart b/lib/pages/bangumi/controller.dart index 73b56625..09afc43a 100644 --- a/lib/pages/bangumi/controller.dart +++ b/lib/pages/bangumi/controller.dart @@ -50,7 +50,11 @@ class BangumiController extends GetxController { // 我的订阅 Future queryBangumiFollow() async { - var result = await BangumiHttp.bangumiFollow(mid: 17340771); + userInfo = userInfo ?? userInfoCache.get('userInfoCache'); + if (userInfo == null) { + return; + } + var result = await BangumiHttp.bangumiFollow(mid: userInfo.mid); if (result['status']) { bangumiFollowList.value = result['data'].list; } else {} diff --git a/lib/pages/bangumi/view.dart b/lib/pages/bangumi/view.dart index a5ea84c0..3032bb4d 100644 --- a/lib/pages/bangumi/view.dart +++ b/lib/pages/bangumi/view.dart @@ -23,6 +23,7 @@ class _BangumiPageState extends State with AutomaticKeepAliveClientMixin { final BangumiController _bangumidController = Get.put(BangumiController()); late Future? _futureBuilderFuture; + late Future? _futureBuilderFutureFollow; late ScrollController scrollController; @override @@ -35,6 +36,7 @@ class _BangumiPageState extends State StreamController mainStream = Get.find().bottomBarStream; _futureBuilderFuture = _bangumidController.queryBangumiListFeed(); + _futureBuilderFutureFollow = _bangumidController.queryBangumiFollow(); scrollController.addListener( () async { if (scrollController.position.pixels >= @@ -89,43 +91,61 @@ class _BangumiPageState extends State '最近追番', style: Theme.of(context).textTheme.titleMedium, ), + IconButton( + onPressed: () { + setState(() { + _futureBuilderFutureFollow = + _bangumidController.queryBangumiFollow(); + }); + }, + icon: const Icon( + Icons.refresh, + size: 20, + ), + ), ], ), ), SizedBox( height: 258, child: FutureBuilder( - future: _bangumidController.queryBangumiFollow(), + future: _futureBuilderFutureFollow, builder: (context, snapshot) { if (snapshot.connectionState == ConnectionState.done) { Map data = snapshot.data as Map; + List list = _bangumidController.bangumiFollowList; if (data['status']) { return Obx( - () => ListView.builder( - scrollDirection: Axis.horizontal, - itemCount: _bangumidController - .bangumiFollowList.length, - itemBuilder: (context, index) { - return Container( - width: Get.size.width / 3, - height: 254, - margin: EdgeInsets.only( - left: StyleString.safeSpace, - right: index == - _bangumidController - .bangumiFollowList - .length - - 1 - ? StyleString.safeSpace - : 0), - child: BangumiCardV( - bangumiItem: _bangumidController - .bangumiFollowList[index], + () => list.isNotEmpty + ? ListView.builder( + scrollDirection: Axis.horizontal, + itemCount: list.length, + itemBuilder: (context, index) { + return Container( + width: Get.size.width / 3, + height: 254, + margin: EdgeInsets.only( + left: StyleString.safeSpace, + right: index == + _bangumidController + .bangumiFollowList + .length - + 1 + ? StyleString.safeSpace + : 0), + child: BangumiCardV( + bangumiItem: _bangumidController + .bangumiFollowList[index], + ), + ); + }, + ) + : const SizedBox( + child: Center( + child: Text('还没有追番'), + ), ), - ); - }, - ), ); } else { return const SizedBox(); diff --git a/lib/pages/favDetail/view.dart b/lib/pages/favDetail/view.dart index 88c2cb5f..d90d4f11 100644 --- a/lib/pages/favDetail/view.dart +++ b/lib/pages/favDetail/view.dart @@ -61,6 +61,7 @@ class _FavDetailPageState extends State { SliverAppBar( expandedHeight: 260 - MediaQuery.of(context).padding.top, pinned: true, + titleSpacing: 0, title: StreamBuilder( stream: titleStreamC.stream, initialData: false, diff --git a/lib/pages/mine/view.dart b/lib/pages/mine/view.dart index e084d96b..4c71869d 100644 --- a/lib/pages/mine/view.dart +++ b/lib/pages/mine/view.dart @@ -6,6 +6,7 @@ import 'package:get/get.dart'; import 'package:pilipala/common/constants.dart'; import 'package:pilipala/common/widgets/network_img_layer.dart'; import 'package:pilipala/models/common/theme_type.dart'; +import 'package:pilipala/models/user/info.dart'; import 'package:pilipala/utils/event_bus.dart'; import 'controller.dart'; @@ -160,10 +161,11 @@ class _MinePageState extends State { ])) ], ), - const SizedBox(height: 5), + const SizedBox(height: 25), if (_mineController.userInfo.value.levelInfo != null) ...[ LayoutBuilder( builder: (context, BoxConstraints box) { + LevelInfo levelInfo = _mineController.userInfo.value.levelInfo; return SizedBox( width: box.maxWidth, height: 24, @@ -172,48 +174,27 @@ class _MinePageState extends State { Positioned( top: 0, right: 0, - child: SizedBox( - height: 22, + bottom: 0, + child: Container( + color: Theme.of(context).colorScheme.primary, + height: 24, + constraints: + const BoxConstraints(minWidth: 100), // 设置最小宽度为100 width: box.maxWidth * - (1 - - (_mineController - .userInfo.value.levelInfo!.currentExp! / - _mineController - .userInfo.value.levelInfo!.nextExp!)), + (1 - (levelInfo.currentExp! / levelInfo.nextExp!)), child: Center( child: Text( - (_mineController - .userInfo.value.levelInfo!.nextExp! - - _mineController - .userInfo.value.levelInfo!.currentExp!) - .toString(), + '${levelInfo.currentExp!}/${levelInfo.nextExp!}', style: TextStyle( - color: Theme.of(context).colorScheme.primary, + color: Theme.of(context).colorScheme.onPrimary, fontSize: 12, ), ), ), ), ), - ], - ), - ); - }, - ), - LayoutBuilder( - builder: (context, BoxConstraints box) { - return Container( - width: box.maxWidth, - height: 1, - clipBehavior: Clip.hardEdge, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(4), - color: Theme.of(context).colorScheme.onInverseSurface, - ), - child: Stack( - children: [ Positioned( - top: 0, + top: 23, left: 0, bottom: 0, child: Container( @@ -224,7 +205,6 @@ class _MinePageState extends State { .userInfo.value.levelInfo!.nextExp!), height: 1, decoration: BoxDecoration( - borderRadius: BorderRadius.circular(4), color: Theme.of(context).colorScheme.primary, ), ), @@ -234,6 +214,36 @@ class _MinePageState extends State { ); }, ), + // LayoutBuilder( + // builder: (context, BoxConstraints box) { + // return Container( + // width: box.maxWidth, + // height: 1, + // color: Theme.of(context).colorScheme.onInverseSurface, + // child: Stack( + // children: [ + // Positioned( + // top: 0, + // left: 0, + // bottom: 0, + // child: Container( + // width: box.maxWidth * + // (_mineController + // .userInfo.value.levelInfo!.currentExp! / + // _mineController + // .userInfo.value.levelInfo!.nextExp!), + // height: 1, + // decoration: BoxDecoration( + // borderRadius: BorderRadius.circular(4), + // color: Theme.of(context).colorScheme.primary, + // ), + // ), + // ), + // ], + // ), + // ); + // }, + // ), ], const SizedBox(height: 30), Padding( diff --git a/lib/pages/preview/view.dart b/lib/pages/preview/view.dart index 23d23dfb..42eb0b69 100644 --- a/lib/pages/preview/view.dart +++ b/lib/pages/preview/view.dart @@ -34,9 +34,6 @@ class _ImagePreviewState extends State super.initState(); // animationController = AnimationController( // vsync: this, duration: const Duration(milliseconds: 400)); - SystemChrome.setEnabledSystemUIMode( - SystemUiMode.immersiveSticky, - ); _doubleClickAnimationController = AnimationController( duration: const Duration(milliseconds: 250), vsync: this); } @@ -96,7 +93,6 @@ class _ImagePreviewState extends State // animationController.dispose(); _doubleClickAnimationController.dispose(); clearGestureDetailsCache(); - exitFullScreen(); super.dispose(); } @@ -108,7 +104,7 @@ class _ImagePreviewState extends State primary: false, toolbarHeight: 0, backgroundColor: Colors.black, - systemOverlayStyle: SystemUiOverlayStyle.light, + systemOverlayStyle: SystemUiOverlayStyle.dark, ), body: Stack( children: [ diff --git a/lib/pages/video/detail/controller.dart b/lib/pages/video/detail/controller.dart index c788e6ae..0157006d 100644 --- a/lib/pages/video/detail/controller.dart +++ b/lib/pages/video/detail/controller.dart @@ -274,6 +274,9 @@ class VideoDetailController extends GetxController // duration: data.timeLength ?? 0, // ); } else { + if (result['code'] == -404) { + isShowCover.value = false; + } SmartDialog.showToast(result['msg'].toString()); } return result; diff --git a/lib/pages/video/detail/introduction/controller.dart b/lib/pages/video/detail/introduction/controller.dart index 70f8af98..0817a046 100644 --- a/lib/pages/video/detail/introduction/controller.dart +++ b/lib/pages/video/detail/introduction/controller.dart @@ -30,9 +30,6 @@ class VideoIntroController extends GetxController { // 视频详情 请求返回 Rx videoDetail = VideoDetailData().obs; - // 请求返回的信息 - String responseMsg = '请求异常'; - // up主粉丝数 Map userStat = {'follower': '-'}; @@ -79,7 +76,7 @@ class VideoIntroController extends GetxController { videoItem!['owner'] = args.owner; } } - userLogin = userInfo == null; + userLogin = userInfo != null; lastPlayCid.value = int.parse(Get.parameters['cid']!); } @@ -96,8 +93,6 @@ class VideoIntroController extends GetxController { .value = ['简介', '评论 ${result['data']!.stat!.reply}']; // 获取到粉丝数再返回 await queryUserStat(); - } else { - responseMsg = result['msg']; } if (userLogin) { // 获取点赞状态 @@ -329,6 +324,9 @@ class VideoIntroController extends GetxController { // 查询关注状态 Future queryFollowStatus() async { + if (videoDetail.value.owner == null) { + return; + } var result = await VideoHttp.hasFollow(mid: videoDetail.value.owner!.mid!); if (result['status']) { followStatus.value = result['data']; diff --git a/lib/pages/video/detail/introduction/view.dart b/lib/pages/video/detail/introduction/view.dart index dad038db..5f99dd9b 100644 --- a/lib/pages/video/detail/introduction/view.dart +++ b/lib/pages/video/detail/introduction/view.dart @@ -71,6 +71,10 @@ class _VideoIntroPanelState extends State // 请求错误 return HttpError( errMsg: snapshot.data['msg'], + btnText: snapshot.data['code'] == -404 || + snapshot.data['code'] == 62002 + ? '返回上一页' + : null, fn: () => Get.back(), ); }