From 79aa50c0df2df17f98dd03b4ac124d6d2b267c2a Mon Sep 17 00:00:00 2001 From: guozhigq Date: Wed, 9 Aug 2023 18:07:43 +0800 Subject: [PATCH] =?UTF-8?q?mod:=20=E7=95=AA=E5=89=A7=E6=A0=B7=E5=BC=8F?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bangumi/introduction/controller.dart | 37 ++-- lib/pages/bangumi/introduction/view.dart | 29 ++- lib/pages/bangumi/view.dart | 204 +++++++++--------- lib/pages/bangumi/widgets/bangumi_panel.dart | 23 +- 4 files changed, 149 insertions(+), 144 deletions(-) diff --git a/lib/pages/bangumi/introduction/controller.dart b/lib/pages/bangumi/introduction/controller.dart index 1b1599cb..eeedfee6 100644 --- a/lib/pages/bangumi/introduction/controller.dart +++ b/lib/pages/bangumi/introduction/controller.dart @@ -36,7 +36,6 @@ class BangumiIntroController extends GetxController { RxBool isLoading = false.obs; // 视频详情 请求返回 - Rx videoDetail = VideoDetailData().obs; Rx bangumiDetail = BangumiInfoModel().obs; // 请求返回的信息 @@ -89,11 +88,6 @@ class BangumiIntroController extends GetxController { // 获取番剧简介&选集 Future queryBangumiIntro() async { - var result = await SearchHttp.bangumiInfo(seasonId: seasonId, epId: epId); - if (result['status']) { - bangumiDetail.value = result['data']; - epId = bangumiDetail.value.episodes!.first.id; - } if (userLogin) { // 获取点赞状态 queryHasLikeVideo(); @@ -102,6 +96,11 @@ class BangumiIntroController extends GetxController { // 获取收藏状态 queryHasFavVideo(); } + var result = await SearchHttp.bangumiInfo(seasonId: seasonId, epId: epId); + if (result['status']) { + bangumiDetail.value = result['data']; + epId = bangumiDetail.value.episodes!.first.id; + } return result; } @@ -132,15 +131,10 @@ class BangumiIntroController extends GetxController { Future actionLikeVideo() async { var result = await VideoHttp.likeVideo(bvid: bvid, type: !hasLike.value); if (result['status']) { - if (!hasLike.value) { - SmartDialog.showToast('点赞成功 👍'); - hasLike.value = true; - videoDetail.value.stat!.like = videoDetail.value.stat!.like! + 1; - } else if (hasLike.value) { - SmartDialog.showToast('取消赞'); - hasLike.value = false; - videoDetail.value.stat!.like = videoDetail.value.stat!.like! - 1; - } + SmartDialog.showToast(!hasLike.value ? '点赞成功 👍' : '取消赞'); + hasLike.value = !hasLike.value; + bangumiDetail.value.stat!['likes'] = + bangumiDetail.value.stat!['likes'] + (!hasLike.value ? 1 : -1); hasLike.refresh(); } else { SmartDialog.showToast(result['msg']); @@ -193,8 +187,8 @@ class BangumiIntroController extends GetxController { if (res['status']) { SmartDialog.showToast('投币成功 👏'); hasCoin.value = true; - videoDetail.value.stat!.coin = - videoDetail.value.stat!.coin! + _tempThemeValue; + bangumiDetail.value.stat!['coins'] = + bangumiDetail.value.stat!['coins'] + _tempThemeValue; } else { SmartDialog.showToast(res['msg']); } @@ -287,4 +281,13 @@ class BangumiIntroController extends GetxController { await VideoHttp.bangumiDel(seasonId: bangumiDetail.value.seasonId); SmartDialog.showToast(result['msg']); } + + Future queryVideoInFolder() async { + var result = await VideoHttp.videoInFolder( + mid: user.get(UserBoxKey.userMid), rid: IdUtils.bv2av(bvid)); + if (result['status']) { + favFolderData.value = result['data']; + } + return result; + } } diff --git a/lib/pages/bangumi/introduction/view.dart b/lib/pages/bangumi/introduction/view.dart index 9769f8d2..96657398 100644 --- a/lib/pages/bangumi/introduction/view.dart +++ b/lib/pages/bangumi/introduction/view.dart @@ -33,6 +33,7 @@ class _BangumiIntroPanelState extends State final BangumiIntroController bangumiIntroController = Get.put(BangumiIntroController(), tag: Get.arguments['heroTag']); BangumiInfoModel? bangumiDetail; + late Future _futureBuilderFuture; // 添加页面缓存 @override @@ -44,13 +45,14 @@ class _BangumiIntroPanelState extends State bangumiIntroController.bangumiDetail.listen((value) { bangumiDetail = value; }); + _futureBuilderFuture = bangumiIntroController.queryBangumiIntro(); } @override Widget build(BuildContext context) { super.build(context); return FutureBuilder( - future: bangumiIntroController.queryBangumiIntro(), + future: _futureBuilderFuture, builder: (context, snapshot) { if (snapshot.connectionState == ConnectionState.done) { if (snapshot.data['status']) { @@ -356,10 +358,10 @@ class _BangumiInfoState extends State { selectIcon: const Icon(FontAwesomeIcons.solidThumbsUp), onTap: () => bangumiIntroController.actionLikeVideo(), selectStatus: bangumiIntroController.hasLike.value, - loadingStatus: widget.loadingStatus, + loadingStatus: false, text: !widget.loadingStatus ? widget.bangumiDetail!.stat!['likes']!.toString() - : '-'), + : bangumiItem!.stat!['likes']!.toString()), ), Obx( () => ActionItem( @@ -367,10 +369,10 @@ class _BangumiInfoState extends State { selectIcon: const Icon(FontAwesomeIcons.b), onTap: () => bangumiIntroController.actionCoinVideo(), selectStatus: bangumiIntroController.hasCoin.value, - loadingStatus: widget.loadingStatus, + loadingStatus: false, text: !widget.loadingStatus ? widget.bangumiDetail!.stat!['coins']!.toString() - : '-'), + : bangumiItem!.stat!['coins']!.toString()), ), Obx( () => ActionItem( @@ -378,29 +380,29 @@ class _BangumiInfoState extends State { selectIcon: const Icon(FontAwesomeIcons.solidStar), onTap: () => showFavBottomSheet(), selectStatus: bangumiIntroController.hasFav.value, - loadingStatus: widget.loadingStatus, + loadingStatus: false, text: !widget.loadingStatus ? widget.bangumiDetail!.stat!['favorite']!.toString() - : '-'), + : bangumiItem!.stat!['favorite']!.toString()), ), ActionItem( icon: const Icon(FontAwesomeIcons.comment), selectIcon: const Icon(FontAwesomeIcons.reply), - onTap: () => videoDetailCtr!.tabCtr!.animateTo(1), + onTap: () => videoDetailCtr.tabCtr!.animateTo(1), selectStatus: false, - loadingStatus: widget.loadingStatus, + loadingStatus: false, text: !widget.loadingStatus ? widget.bangumiDetail!.stat!['reply']!.toString() - : '-', + : bangumiItem!.stat!['reply']!.toString(), ), ActionItem( icon: const Icon(FontAwesomeIcons.shareFromSquare), onTap: () => bangumiIntroController.actionShareVideo(), selectStatus: false, - loadingStatus: widget.loadingStatus, + loadingStatus: false, text: !widget.loadingStatus ? widget.bangumiDetail!.stat!['share']!.toString() - : '-'), + : bangumiItem!.stat!['share']!.toString()), ], ), ), @@ -464,9 +466,6 @@ class _BangumiInfoState extends State { onTap: () => videoIntroController.actionShareVideo(), selectStatus: false, loadingStatus: widget.loadingStatus, - // text: !widget.loadingStatus - // ? widget.videoDetail!.stat!.share!.toString() - // : '-', text: '转发'), ]); } diff --git a/lib/pages/bangumi/view.dart b/lib/pages/bangumi/view.dart index 158e3b22..d357c7cd 100644 --- a/lib/pages/bangumi/view.dart +++ b/lib/pages/bangumi/view.dart @@ -65,121 +65,119 @@ class _BangumiPageState extends State decoration: const BoxDecoration( borderRadius: BorderRadius.all(StyleString.imgRadius), ), - child: Expanded( - child: RefreshIndicator( - onRefresh: () async { - await _bangumidController.queryBangumiListFeed(type: 'init'); - return _bangumidController.queryBangumiFollow(); - }, - child: CustomScrollView( - controller: _bangumidController.scrollController, - slivers: [ - SliverToBoxAdapter( - child: Obx( - () => Visibility( - visible: _bangumidController.userLogin.value, - child: Column( - children: [ - Padding( - padding: const EdgeInsets.only( - top: 10, bottom: 10, left: 6), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - '最近追番', - style: Theme.of(context).textTheme.titleMedium, - ), - ], - ), + child: RefreshIndicator( + onRefresh: () async { + await _bangumidController.queryBangumiListFeed(type: 'init'); + return _bangumidController.queryBangumiFollow(); + }, + child: CustomScrollView( + controller: _bangumidController.scrollController, + slivers: [ + SliverToBoxAdapter( + child: Obx( + () => Visibility( + visible: _bangumidController.userLogin.value, + child: Column( + children: [ + Padding( + padding: + const EdgeInsets.only(top: 10, bottom: 10, left: 6), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + '最近追番', + style: Theme.of(context).textTheme.titleMedium, + ), + ], ), - SizedBox( - height: 254, - child: FutureBuilder( - future: _bangumidController.queryBangumiFollow(), - builder: (context, snapshot) { - if (snapshot.connectionState == - ConnectionState.done) { - Map data = snapshot.data as Map; - 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( - right: index < - _bangumidController - .bangumiFollowList - .length - - 1 - ? StyleString.safeSpace - : 0), - child: BangumiCardV( - bangumiItem: _bangumidController - .bangumiFollowList[index], - ), - ); - }, - ), - ); - } else { - return SizedBox(); - } + ), + SizedBox( + height: 254, + child: FutureBuilder( + future: _bangumidController.queryBangumiFollow(), + builder: (context, snapshot) { + if (snapshot.connectionState == + ConnectionState.done) { + Map data = snapshot.data as Map; + 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( + right: index < + _bangumidController + .bangumiFollowList + .length - + 1 + ? StyleString.safeSpace + : 0), + child: BangumiCardV( + bangumiItem: _bangumidController + .bangumiFollowList[index], + ), + ); + }, + ), + ); } else { return SizedBox(); } - }, - ), + } else { + return SizedBox(); + } + }, ), - ], - ), - ), - ), - ), - SliverToBoxAdapter( - child: Padding( - padding: const EdgeInsets.only(top: 10, bottom: 10, left: 6), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - '推荐', - style: Theme.of(context).textTheme.titleMedium, ), ], ), ), ), - SliverPadding( - padding: EdgeInsets.zero, - sliver: FutureBuilder( - future: _futureBuilderFuture, - builder: (context, snapshot) { - if (snapshot.connectionState == ConnectionState.done) { - Map data = snapshot.data as Map; - if (data['status']) { - return Obx(() => contentGrid(_bangumidController, - _bangumidController.bangumiList)); - } else { - return HttpError( - errMsg: data['msg'], - fn: () => {}, - ); - } - } else { - return contentGrid(_bangumidController, []); - } - }, + ), + SliverToBoxAdapter( + child: Padding( + padding: const EdgeInsets.only(top: 10, bottom: 10, left: 6), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + '推荐', + style: Theme.of(context).textTheme.titleMedium, + ), + ], ), ), - const LoadingMore() - ], - ), + ), + SliverPadding( + padding: EdgeInsets.zero, + sliver: FutureBuilder( + future: _futureBuilderFuture, + builder: (context, snapshot) { + if (snapshot.connectionState == ConnectionState.done) { + Map data = snapshot.data as Map; + if (data['status']) { + return Obx(() => contentGrid(_bangumidController, + _bangumidController.bangumiList)); + } else { + return HttpError( + errMsg: data['msg'], + fn: () => {}, + ); + } + } else { + return contentGrid(_bangumidController, []); + } + }, + ), + ), + const LoadingMore() + ], ), ), ); diff --git a/lib/pages/bangumi/widgets/bangumi_panel.dart b/lib/pages/bangumi/widgets/bangumi_panel.dart index 85e70d19..83e39d00 100644 --- a/lib/pages/bangumi/widgets/bangumi_panel.dart +++ b/lib/pages/bangumi/widgets/bangumi_panel.dart @@ -37,10 +37,10 @@ class _BangumiPanelState extends State { color: Theme.of(context).colorScheme.background, child: Column( children: [ - Container( - height: 45, - padding: const EdgeInsets.only(left: 14, right: 14), - child: Row( + AppBar( + toolbarHeight: 45, + automaticallyImplyLeading: false, + title: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( @@ -53,10 +53,7 @@ class _BangumiPanelState extends State { ), ], ), - ), - Divider( - height: 1, - color: Theme.of(context).dividerColor.withOpacity(0.1), + titleSpacing: 10, ), Expanded( child: Material( @@ -66,8 +63,15 @@ class _BangumiPanelState extends State { return ListTile( onTap: () => changeFucCall(widget.pages[index], index), dense: false, + leading: index == currentIndex + ? Image.asset( + 'assets/images/live.gif', + color: Theme.of(context).colorScheme.primary, + height: 12, + ) + : null, title: Text( - widget.pages[index].longTitle!, + '第${index + 1}话 ${widget.pages[index].longTitle!}', style: TextStyle( fontSize: 14, color: index == currentIndex @@ -148,6 +152,7 @@ class _BangumiPanelState extends State { child: ListView.builder( scrollDirection: Axis.horizontal, itemCount: widget.pages.length, + itemExtent: 150, itemBuilder: ((context, i) { return Container( width: 150,