diff --git a/lib/common/skeleton/video_card_h.dart b/lib/common/skeleton/video_card_h.dart index 55dfa68ad..05a18c4ed 100644 --- a/lib/common/skeleton/video_card_h.dart +++ b/lib/common/skeleton/video_card_h.dart @@ -8,79 +8,88 @@ class VideoCardHSkeleton extends StatelessWidget { @override Widget build(BuildContext context) { return Skeleton( - child: LayoutBuilder( - builder: (context, boxConstraints) { - double width = - (boxConstraints.maxWidth - StyleString.cardSpace * 6) / 2; - return SizedBox( - height: width / StyleString.aspectRatio, - child: Row( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - AspectRatio( - aspectRatio: StyleString.aspectRatio, - child: LayoutBuilder( - builder: (context, boxConstraints) { - return Container( - decoration: BoxDecoration( + child: Padding( + padding: const EdgeInsets.symmetric( + horizontal: StyleString.safeSpace, + vertical: 5, + ), + child: LayoutBuilder( + builder: (context, boxConstraints) { + double width = + (boxConstraints.maxWidth - StyleString.cardSpace * 6) / 2; + return SizedBox( + height: width / StyleString.aspectRatio, + child: Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + AspectRatio( + aspectRatio: StyleString.aspectRatio, + child: LayoutBuilder( + builder: (context, boxConstraints) { + return Container( + decoration: BoxDecoration( + color: + Theme.of(context).colorScheme.onInverseSurface, + borderRadius: + BorderRadius.circular(StyleString.imgRadius.x), + ), + ); + }, + ), + ), + // VideoContent(videoItem: videoItem) + Expanded( + child: Padding( + padding: const EdgeInsets.fromLTRB(10, 4, 6, 4), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( color: Theme.of(context).colorScheme.onInverseSurface, - borderRadius: - BorderRadius.circular(StyleString.imgRadius.x), + width: 200, + height: 11, + margin: const EdgeInsets.only(bottom: 5), ), - ); - }, - ), - ), - // VideoContent(videoItem: videoItem) - Expanded( - child: Padding( - padding: const EdgeInsets.fromLTRB(10, 4, 6, 4), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Container( - color: Theme.of(context).colorScheme.onInverseSurface, - width: 200, - height: 11, - margin: const EdgeInsets.only(bottom: 5), - ), - Container( - color: Theme.of(context).colorScheme.onInverseSurface, - width: 150, - height: 13, - ), - const Spacer(), - Container( - color: Theme.of(context).colorScheme.onInverseSurface, - width: 100, - height: 13, - margin: const EdgeInsets.only(bottom: 5), - ), - Row( - children: [ - Container( - color: - Theme.of(context).colorScheme.onInverseSurface, - width: 40, - height: 13, - margin: const EdgeInsets.only(right: 8), - ), - Container( - color: - Theme.of(context).colorScheme.onInverseSurface, - width: 40, - height: 13, - ), - ], - ) - ], - ), - )), - ], - ), - ); - }, + Container( + color: Theme.of(context).colorScheme.onInverseSurface, + width: 150, + height: 13, + ), + const Spacer(), + Container( + color: Theme.of(context).colorScheme.onInverseSurface, + width: 100, + height: 13, + margin: const EdgeInsets.only(bottom: 5), + ), + Row( + children: [ + Container( + color: Theme.of(context) + .colorScheme + .onInverseSurface, + width: 40, + height: 13, + margin: const EdgeInsets.only(right: 8), + ), + Container( + color: Theme.of(context) + .colorScheme + .onInverseSurface, + width: 40, + height: 13, + ), + ], + ) + ], + ), + )), + ], + ), + ); + }, + ), ), ); } diff --git a/lib/common/widgets/video_card_h.dart b/lib/common/widgets/video_card_h.dart index 8560bd9fe..69066a1d2 100644 --- a/lib/common/widgets/video_card_h.dart +++ b/lib/common/widgets/video_card_h.dart @@ -56,7 +56,6 @@ class VideoCardH extends StatelessWidget { label: item.title.isEmpty ? 'label' : item.title): item.onTap!, }, child: InkWell( - borderRadius: BorderRadius.circular(12), onLongPress: longPress, onTap: () async { if (onTap != null) { @@ -76,56 +75,58 @@ class VideoCardH extends StatelessWidget { SmartDialog.showToast(err.toString()); } }, - child: LayoutBuilder( - builder: (BuildContext context, BoxConstraints boxConstraints) { - return Row( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - AspectRatio( - aspectRatio: StyleString.aspectRatio, - child: LayoutBuilder( - builder: (BuildContext context, - BoxConstraints boxConstraints) { - final double maxWidth = boxConstraints.maxWidth; - final double maxHeight = boxConstraints.maxHeight; - return Stack( - children: [ - Hero( - tag: heroTag, - child: NetworkImgLayer( - src: videoItem.pic as String, - width: maxWidth, - height: maxHeight, - ), + child: Padding( + padding: const EdgeInsets.symmetric( + horizontal: StyleString.safeSpace, + vertical: 5, + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + AspectRatio( + aspectRatio: StyleString.aspectRatio, + child: LayoutBuilder( + builder: + (BuildContext context, BoxConstraints boxConstraints) { + final double maxWidth = boxConstraints.maxWidth; + final double maxHeight = boxConstraints.maxHeight; + return Stack( + children: [ + Hero( + tag: heroTag, + child: NetworkImgLayer( + src: videoItem.pic as String, + width: maxWidth, + height: maxHeight, ), - if (videoItem.duration != 0) - PBadge( - text: Utils.timeFormat(videoItem.duration!), - right: 6.0, - bottom: 6.0, - type: 'gray', - ), - if (type != 'video') - PBadge( - text: type, - left: 6.0, - bottom: 6.0, - type: 'primary', - ), - // if (videoItem.rcmdReason != null && - // videoItem.rcmdReason.content != '') - // pBadge(videoItem.rcmdReason.content, context, - // 6.0, 6.0, null, null), - ], - ); - }, - ), + ), + if (videoItem.duration != 0) + PBadge( + text: Utils.timeFormat(videoItem.duration!), + right: 6.0, + bottom: 6.0, + type: 'gray', + ), + if (type != 'video') + PBadge( + text: type, + left: 6.0, + bottom: 6.0, + type: 'primary', + ), + // if (videoItem.rcmdReason != null && + // videoItem.rcmdReason.content != '') + // pBadge(videoItem.rcmdReason.content, context, + // 6.0, 6.0, null, null), + ], + ); + }, ), - videoContent(context) - ], - ); - }, + ), + videoContent(context) + ], + ), ), ), ), diff --git a/lib/common/widgets/video_card_h_member_video.dart b/lib/common/widgets/video_card_h_member_video.dart index 7566a8fd3..ad6bd2f8b 100644 --- a/lib/common/widgets/video_card_h_member_video.dart +++ b/lib/common/widgets/video_card_h_member_video.dart @@ -31,82 +31,89 @@ class VideoCardHMemberVideo extends StatelessWidget { final int aid = int.tryParse(videoItem.param ?? '') ?? -1; final String bvid = videoItem.bvid ?? ''; final String heroTag = Utils.makeHeroTag(aid); - return Stack(children: [ - InkWell( - borderRadius: BorderRadius.circular(12), - onLongPress: longPress, - onTap: () async { - if (onTap != null) { - onTap!(); - return; - } - try { - Get.toNamed('/video?bvid=$bvid&cid=${videoItem.firstCid}', - arguments: {'heroTag': heroTag}); - } catch (err) { - SmartDialog.showToast(err.toString()); - } - }, - child: LayoutBuilder( - builder: (BuildContext context, BoxConstraints boxConstraints) { - return Row( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - AspectRatio( - aspectRatio: StyleString.aspectRatio, - child: LayoutBuilder( - builder: - (BuildContext context, BoxConstraints boxConstraints) { - final double maxWidth = boxConstraints.maxWidth; - final double maxHeight = boxConstraints.maxHeight; - return Stack( - children: [ - Hero( - tag: heroTag, - child: NetworkImgLayer( - src: videoItem.cover, - // videoItem.season?['cover'] ?? videoItem.cover, - width: maxWidth, - height: maxHeight, - ), - ), - // if (videoItem.season != null) - // PBadge( - // text: '合集: ${videoItem.season?['count']}', - // right: 6.0, - // bottom: 6.0, - // type: 'gray', - // ) - // else - if (videoItem.duration != null) - PBadge( - text: Utils.timeFormat(videoItem.duration), - right: 6.0, - bottom: 6.0, - type: 'gray', - ), - ], - ); - }, - ), - ), - videoContent(context) - ], - ); + return Stack( + children: [ + InkWell( + onLongPress: longPress, + onTap: () async { + if (onTap != null) { + onTap!(); + return; + } + try { + Get.toNamed('/video?bvid=$bvid&cid=${videoItem.firstCid}', + arguments: {'heroTag': heroTag}); + } catch (err) { + SmartDialog.showToast(err.toString()); + } }, + child: Padding( + padding: const EdgeInsets.symmetric( + horizontal: StyleString.safeSpace, + vertical: 5, + ), + child: LayoutBuilder( + builder: (BuildContext context, BoxConstraints boxConstraints) { + return Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + AspectRatio( + aspectRatio: StyleString.aspectRatio, + child: LayoutBuilder( + builder: (BuildContext context, + BoxConstraints boxConstraints) { + final double maxWidth = boxConstraints.maxWidth; + final double maxHeight = boxConstraints.maxHeight; + return Stack( + children: [ + Hero( + tag: heroTag, + child: NetworkImgLayer( + src: videoItem.cover, + // videoItem.season?['cover'] ?? videoItem.cover, + width: maxWidth, + height: maxHeight, + ), + ), + // if (videoItem.season != null) + // PBadge( + // text: '合集: ${videoItem.season?['count']}', + // right: 6.0, + // bottom: 6.0, + // type: 'gray', + // ) + // else + if (videoItem.duration != null) + PBadge( + text: Utils.timeFormat(videoItem.duration), + right: 6.0, + bottom: 6.0, + type: 'gray', + ), + ], + ); + }, + ), + ), + videoContent(context) + ], + ); + }, + ), + ), ), - ), - Positioned( - bottom: 0, - right: 0, - child: VideoPopupMenu( - size: 29, - iconSize: 17, - actions: VideoCustomActions(videoItem, context).actions, + Positioned( + bottom: 0, + right: 0, + child: VideoPopupMenu( + size: 29, + iconSize: 17, + actions: VideoCustomActions(videoItem, context).actions, + ), ), - ), - ]); + ], + ); } Widget videoContent(context) { diff --git a/lib/pages/fan/view.dart b/lib/pages/fan/view.dart index 1dba200d2..f780a12d6 100644 --- a/lib/pages/fan/view.dart +++ b/lib/pages/fan/view.dart @@ -5,7 +5,6 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:PiliPalaX/common/widgets/http_error.dart'; -import '../../common/constants.dart'; import '../../utils/grid.dart'; import 'controller.dart'; import 'widgets/fan_item.dart'; @@ -55,8 +54,6 @@ class _FansPageState extends State { Success() => (loadingState.response as List?)?.isNotEmpty == true ? SliverGrid( gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent( - mainAxisSpacing: StyleString.cardSpace, - crossAxisSpacing: StyleString.safeSpace, maxCrossAxisExtent: Grid.maxRowWidth * 2, mainAxisExtent: 56, ), diff --git a/lib/pages/fav/view.dart b/lib/pages/fav/view.dart index f831188e4..9550d38b7 100644 --- a/lib/pages/fav/view.dart +++ b/lib/pages/fav/view.dart @@ -82,23 +82,17 @@ class _FavPageState extends State { Widget _buildBody(LoadingState loadingState) { return switch (loadingState) { - Loading() => SliverPadding( - padding: - const EdgeInsets.symmetric(horizontal: StyleString.safeSpace), - sliver: SliverGrid( - gridDelegate: SliverGridDelegateWithExtentAndRatio( - mainAxisSpacing: StyleString.cardSpace, - crossAxisSpacing: StyleString.safeSpace, - maxCrossAxisExtent: Grid.maxRowWidth * 2, - childAspectRatio: StyleString.aspectRatio * 2.4, - mainAxisExtent: 0, - ), - delegate: SliverChildBuilderDelegate( - (BuildContext context, int index) { - return const VideoCardHSkeleton(); - }, - childCount: 10, - ), + Loading() => SliverGrid( + gridDelegate: SliverGridDelegateWithExtentAndRatio( + mainAxisSpacing: 2, + maxCrossAxisExtent: Grid.maxRowWidth * 2, + childAspectRatio: StyleString.aspectRatio * 2.2, + ), + delegate: SliverChildBuilderDelegate( + (BuildContext context, int index) { + return const VideoCardHSkeleton(); + }, + childCount: 10, ), ), Success() => (loadingState.response as List?)?.isNotEmpty == true @@ -107,11 +101,9 @@ class _FavPageState extends State { bottom: 80 + MediaQuery.paddingOf(context).bottom), sliver: SliverGrid( gridDelegate: SliverGridDelegateWithExtentAndRatio( - mainAxisSpacing: StyleString.cardSpace, - crossAxisSpacing: StyleString.safeSpace, + mainAxisSpacing: 2, maxCrossAxisExtent: Grid.maxRowWidth * 2, - childAspectRatio: StyleString.aspectRatio * 2.4, - mainAxisExtent: 0, + childAspectRatio: StyleString.aspectRatio * 2.2, ), delegate: SliverChildBuilderDelegate( childCount: loadingState.response.length, diff --git a/lib/pages/fav_detail/view.dart b/lib/pages/fav_detail/view.dart index 059b25043..3b6289129 100644 --- a/lib/pages/fav_detail/view.dart +++ b/lib/pages/fav_detail/view.dart @@ -186,11 +186,12 @@ class _FavDetailPageState extends State { flexibleSpace: FlexibleSpaceBar( background: Container( padding: EdgeInsets.only( - top: kTextTabBarHeight + - MediaQuery.of(context).padding.top + - 10, - left: 14, - right: 20), + top: kTextTabBarHeight + + MediaQuery.of(context).padding.top + + 10, + left: 14, + right: 20, + ), child: SizedBox( height: 110, child: Obx( @@ -289,36 +290,29 @@ class _FavDetailPageState extends State { Widget _buildBody(LoadingState loadingState) { return switch (loadingState) { - Loading() => SliverPadding( - padding: - const EdgeInsets.symmetric(horizontal: StyleString.safeSpace), - sliver: SliverGrid( - gridDelegate: SliverGridDelegateWithExtentAndRatio( - mainAxisSpacing: StyleString.cardSpace, - crossAxisSpacing: StyleString.safeSpace, - maxCrossAxisExtent: Grid.maxRowWidth * 2, - childAspectRatio: StyleString.aspectRatio * 2.4, - mainAxisExtent: 0, - ), - delegate: SliverChildBuilderDelegate( - (context, index) { - return const VideoCardHSkeleton(); - }, - childCount: 10, - ), + Loading() => SliverGrid( + gridDelegate: SliverGridDelegateWithExtentAndRatio( + mainAxisSpacing: 2, + maxCrossAxisExtent: Grid.maxRowWidth * 2, + childAspectRatio: StyleString.aspectRatio * 2.2, + ), + delegate: SliverChildBuilderDelegate( + (context, index) { + return const VideoCardHSkeleton(); + }, + childCount: 10, ), ), Success() => (loadingState.response as List?)?.isNotEmpty == true ? SliverPadding( padding: EdgeInsets.only( - bottom: MediaQuery.of(context).padding.bottom), + bottom: MediaQuery.of(context).padding.bottom + 85, + ), sliver: SliverGrid( gridDelegate: SliverGridDelegateWithExtentAndRatio( - mainAxisSpacing: StyleString.cardSpace, - crossAxisSpacing: StyleString.safeSpace, + mainAxisSpacing: 2, maxCrossAxisExtent: Grid.maxRowWidth * 2, - childAspectRatio: StyleString.aspectRatio * 2.4, - mainAxisExtent: 0, + childAspectRatio: StyleString.aspectRatio * 2.2, ), delegate: SliverChildBuilderDelegate( (context, index) { @@ -338,26 +332,28 @@ class _FavDetailPageState extends State { } return Stack( children: [ - FavVideoCardH( - videoItem: loadingState.response[index], - callFn: () => _favDetailController.onCancelFav( - loadingState.response[index].id, - loadingState.response[index].type, + Positioned.fill( + child: FavVideoCardH( + videoItem: loadingState.response[index], + callFn: () => _favDetailController.onCancelFav( + loadingState.response[index].id, + loadingState.response[index].type, + ), + onTap: + _favDetailController.enableMultiSelect.value.not + ? null + : () { + _favDetailController.onSelect(index); + }, + onLongPress: () { + if (_favDetailController + .enableMultiSelect.value.not) { + _favDetailController.enableMultiSelect.value = + true; + _favDetailController.onSelect(index); + } + }, ), - onTap: - _favDetailController.enableMultiSelect.value.not - ? null - : () { - _favDetailController.onSelect(index); - }, - onLongPress: () { - if (_favDetailController - .enableMultiSelect.value.not) { - _favDetailController.enableMultiSelect.value = - true; - _favDetailController.onSelect(index); - } - }, ), Positioned( top: 5, diff --git a/lib/pages/fav_search/view.dart b/lib/pages/fav_search/view.dart index c42158678..fa9ba14a9 100644 --- a/lib/pages/fav_search/view.dart +++ b/lib/pages/fav_search/view.dart @@ -62,33 +62,41 @@ class _FavSearchPageState extends State { Loading() => errorWidget(), Success() => (loadingState.response as List?)?.isNotEmpty == true ? _favSearchCtr.searchType == SearchType.fav - ? ListView.separated( - separatorBuilder: (context, index) => - const SizedBox(height: 10), + ? CustomScrollView( + physics: const AlwaysScrollableScrollPhysics(), controller: _favSearchCtr.scrollController, - itemCount: loadingState.response.length + 1, - itemBuilder: (context, index) { - if (index == loadingState.response.length) { - _favSearchCtr.onLoadMore(); - return Container( - height: MediaQuery.of(context).padding.bottom + 60, - padding: EdgeInsets.only( - bottom: MediaQuery.of(context).padding.bottom, + slivers: [ + SliverPadding( + padding: EdgeInsets.only( + bottom: MediaQuery.of(context).padding.bottom + 80, + ), + sliver: SliverGrid( + gridDelegate: SliverGridDelegateWithExtentAndRatio( + mainAxisSpacing: 2, + maxCrossAxisExtent: Grid.maxRowWidth * 2, + childAspectRatio: StyleString.aspectRatio * 2.2, ), - ); - } else { - return FavVideoCardH( - videoItem: loadingState.response[index], - searchType: _favSearchCtr.type, - callFn: () => _favSearchCtr.type != 1 - ? _favSearchCtr.onCancelFav( - loadingState.response[index].id!, - loadingState.response[index].type, - ) - : {}, - ); - } - }, + delegate: SliverChildBuilderDelegate( + (context, index) { + if (index == loadingState.response.length) { + _favSearchCtr.onLoadMore(); + } + return FavVideoCardH( + videoItem: loadingState.response[index], + searchType: _favSearchCtr.type, + callFn: () => _favSearchCtr.type != 1 + ? _favSearchCtr.onCancelFav( + loadingState.response[index].id!, + loadingState.response[index].type, + ) + : {}, + ); + }, + childCount: loadingState.response.length, + ), + ), + ), + ], ) : _favSearchCtr.searchType == SearchType.follow ? ListView.builder( @@ -106,11 +114,10 @@ class _FavSearchPageState extends State { slivers: [ SliverGrid( gridDelegate: SliverGridDelegateWithExtentAndRatio( - mainAxisSpacing: StyleString.cardSpace, - crossAxisSpacing: StyleString.safeSpace, - maxCrossAxisExtent: Grid.maxRowWidth * 2, - childAspectRatio: StyleString.aspectRatio * 2.4, - mainAxisExtent: 0), + mainAxisSpacing: 2, + maxCrossAxisExtent: Grid.maxRowWidth * 2, + childAspectRatio: StyleString.aspectRatio * 2.2, + ), delegate: SliverChildBuilderDelegate( (context, index) { return HistoryItem( diff --git a/lib/pages/history/view.dart b/lib/pages/history/view.dart index e5b5631c6..ad91e8196 100644 --- a/lib/pages/history/view.dart +++ b/lib/pages/history/view.dart @@ -135,7 +135,7 @@ class _HistoryPageState extends State { Obx(() => _buildBody(_historyController.loadingState.value)), SliverToBoxAdapter( child: SizedBox( - height: MediaQuery.of(context).padding.bottom + 10, + height: MediaQuery.of(context).padding.bottom + 80, ), ), ], @@ -148,34 +148,25 @@ class _HistoryPageState extends State { Widget _buildBody(LoadingState loadingState) { return switch (loadingState) { - Loading() => SliverPadding( - padding: const EdgeInsets.symmetric( - horizontal: StyleString.safeSpace, + Loading() => SliverGrid( + gridDelegate: SliverGridDelegateWithExtentAndRatio( + mainAxisSpacing: 2, + maxCrossAxisExtent: Grid.maxRowWidth * 2, + childAspectRatio: StyleString.aspectRatio * 2.2, ), - sliver: SliverGrid( - gridDelegate: SliverGridDelegateWithExtentAndRatio( - mainAxisSpacing: StyleString.cardSpace, - crossAxisSpacing: StyleString.safeSpace, - maxCrossAxisExtent: Grid.maxRowWidth * 2, - childAspectRatio: StyleString.aspectRatio * 2.4, - mainAxisExtent: 0, - ), - delegate: SliverChildBuilderDelegate( - (context, index) { - return const VideoCardHSkeleton(); - }, - childCount: 10, - ), + delegate: SliverChildBuilderDelegate( + (context, index) { + return const VideoCardHSkeleton(); + }, + childCount: 10, ), ), Success() => (loadingState.response as List?)?.isNotEmpty == true ? SliverGrid( gridDelegate: SliverGridDelegateWithExtentAndRatio( - mainAxisSpacing: StyleString.cardSpace, - crossAxisSpacing: StyleString.safeSpace, + mainAxisSpacing: 2, maxCrossAxisExtent: Grid.maxRowWidth * 2, - childAspectRatio: StyleString.aspectRatio * 2.4, - mainAxisExtent: 0, + childAspectRatio: StyleString.aspectRatio * 2.2, ), delegate: SliverChildBuilderDelegate( (context, index) { diff --git a/lib/pages/history/widgets/item.dart b/lib/pages/history/widgets/item.dart index 22dae0ac3..3cb08608e 100644 --- a/lib/pages/history/widgets/item.dart +++ b/lib/pages/history/widgets/item.dart @@ -274,21 +274,25 @@ class HistoryItem extends StatelessWidget { videoItem.duration != 0 && videoItem.progress != 0) Positioned( - left: 4, - right: 4, + left: 0, + right: 0, bottom: 0, - child: ClipRRect( - borderRadius: BorderRadius.only( - bottomLeft: Radius.circular(12), - bottomRight: Radius.circular(12), - ), - child: LinearProgressIndicator( - value: videoItem.progress == -1 - ? 100 - : videoItem.progress / videoItem.duration, + child: ClipRect( + clipper: _Clipper(), + child: ClipRRect( + borderRadius: BorderRadius.only( + bottomLeft: Radius.circular(12), + bottomRight: Radius.circular(12), + ), + child: LinearProgressIndicator( + minHeight: 12, + value: videoItem.progress == -1 + ? 100 + : videoItem.progress / videoItem.duration, + ), ), ), - ) + ), ], ), videoContent(context) @@ -413,3 +417,15 @@ class HistoryItem extends StatelessWidget { ); } } + +class _Clipper extends CustomClipper { + @override + Rect getClip(Size size) { + return Rect.fromLTWH(0, 8, size.width, size.height - 8); + } + + @override + bool shouldReclip(CustomClipper oldClipper) { + return false; + } +} diff --git a/lib/pages/hot/view.dart b/lib/pages/hot/view.dart index 752eae48d..ad1d2fefa 100644 --- a/lib/pages/hot/view.dart +++ b/lib/pages/hot/view.dart @@ -69,12 +69,9 @@ class _HotPageState extends State with AutomaticKeepAliveClientMixin { controller: _hotController.scrollController, slivers: [ SliverPadding( - // 单列布局 EdgeInsets.zero - padding: EdgeInsets.fromLTRB( - StyleString.safeSpace, - StyleString.safeSpace - 5, - StyleString.safeSpace, - MediaQuery.of(context).padding.bottom + 10, + padding: EdgeInsets.only( + top: StyleString.safeSpace - 5, + bottom: MediaQuery.of(context).padding.bottom + 80, ), sliver: Obx( () => _buildBody(_hotController.loadingState.value), @@ -97,10 +94,9 @@ class _HotPageState extends State with AutomaticKeepAliveClientMixin { Widget _buildSkeleton() { return SliverGrid( gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent( - mainAxisSpacing: StyleString.cardSpace, - crossAxisSpacing: StyleString.cardSpace, + mainAxisSpacing: 2, maxCrossAxisExtent: Grid.maxRowWidth * 2, - childAspectRatio: StyleString.aspectRatio * 2.4, + childAspectRatio: StyleString.aspectRatio * 2.2, ), delegate: SliverChildBuilderDelegate( (context, index) { @@ -117,11 +113,9 @@ class _HotPageState extends State with AutomaticKeepAliveClientMixin { Success() => (loadingState.response as List?)?.isNotEmpty == true ? SliverGrid( gridDelegate: SliverGridDelegateWithExtentAndRatio( - mainAxisSpacing: StyleString.safeSpace, - crossAxisSpacing: StyleString.safeSpace, + mainAxisSpacing: 2, maxCrossAxisExtent: Grid.maxRowWidth * 2, - childAspectRatio: StyleString.aspectRatio * 2.4, - mainAxisExtent: 0, + childAspectRatio: StyleString.aspectRatio * 2.2, ), delegate: SliverChildBuilderDelegate( (context, index) { diff --git a/lib/pages/later/view.dart b/lib/pages/later/view.dart index 3f19d6a01..c132f6964 100644 --- a/lib/pages/later/view.dart +++ b/lib/pages/later/view.dart @@ -110,8 +110,6 @@ class _LaterPageState extends State { slivers: [ SliverPadding( padding: EdgeInsets.only( - left: StyleString.safeSpace, - right: StyleString.safeSpace, bottom: MediaQuery.of(context).padding.bottom + 85, ), sliver: Obx( @@ -129,11 +127,9 @@ class _LaterPageState extends State { return switch (loadingState) { Loading() => SliverGrid( gridDelegate: SliverGridDelegateWithExtentAndRatio( - mainAxisSpacing: StyleString.safeSpace, - crossAxisSpacing: StyleString.safeSpace, + mainAxisSpacing: 2, maxCrossAxisExtent: Grid.maxRowWidth * 2, - childAspectRatio: StyleString.aspectRatio * 2.4, - mainAxisExtent: 0, + childAspectRatio: StyleString.aspectRatio * 2.2, ), delegate: SliverChildBuilderDelegate( (context, index) { @@ -145,11 +141,9 @@ class _LaterPageState extends State { Success() => (loadingState.response as List?)?.isNotEmpty == true ? SliverGrid( gridDelegate: SliverGridDelegateWithExtentAndRatio( - mainAxisSpacing: StyleString.safeSpace, - crossAxisSpacing: StyleString.safeSpace, + mainAxisSpacing: 2, maxCrossAxisExtent: Grid.maxRowWidth * 2, - childAspectRatio: StyleString.aspectRatio * 2.4, - mainAxisExtent: 0, + childAspectRatio: StyleString.aspectRatio * 2.2, ), delegate: SliverChildBuilderDelegate( (context, index) { @@ -172,9 +166,9 @@ class _LaterPageState extends State { }, ), Positioned( - top: 0, - left: 0, - bottom: 0, + top: 5, + left: 12, + bottom: 5, child: IgnorePointer( child: LayoutBuilder( builder: (context, constraints) => AnimatedOpacity( diff --git a/lib/pages/member/new/content/member_contribute/content/bangumi/member_bangumi.dart b/lib/pages/member/new/content/member_contribute/content/bangumi/member_bangumi.dart index b5d48e7cd..72928702d 100644 --- a/lib/pages/member/new/content/member_contribute/content/bangumi/member_bangumi.dart +++ b/lib/pages/member/new/content/member_contribute/content/bangumi/member_bangumi.dart @@ -61,7 +61,7 @@ class _MemberBangumiState extends State ), sliver: SliverGrid( gridDelegate: SliverGridDelegateWithExtentAndRatio( - mainAxisSpacing: StyleString.cardSpace - 2, + mainAxisSpacing: StyleString.cardSpace, crossAxisSpacing: StyleString.cardSpace, maxCrossAxisExtent: Grid.maxRowWidth / 3 * 2, childAspectRatio: 0.65, diff --git a/lib/pages/member/new/content/member_contribute/content/video/member_video.dart b/lib/pages/member/new/content/member_contribute/content/video/member_video.dart index e00fa0c6f..e46370677 100644 --- a/lib/pages/member/new/content/member_contribute/content/video/member_video.dart +++ b/lib/pages/member/new/content/member_contribute/content/video/member_video.dart @@ -148,20 +148,15 @@ class _MemberVideoState extends State ), ), SliverPadding( - // 单列布局 EdgeInsets.zero - padding: EdgeInsets.fromLTRB( - StyleString.safeSpace, - StyleString.safeSpace - 5, - StyleString.safeSpace, - MediaQuery.of(context).padding.bottom + 10, + padding: EdgeInsets.only( + top: StyleString.safeSpace - 5, + bottom: MediaQuery.of(context).padding.bottom + 80, ), sliver: SliverGrid( gridDelegate: SliverGridDelegateWithExtentAndRatio( - mainAxisSpacing: StyleString.safeSpace, - crossAxisSpacing: StyleString.safeSpace, + mainAxisSpacing: 2, maxCrossAxisExtent: Grid.maxRowWidth * 2, - childAspectRatio: StyleString.aspectRatio * 2.4, - mainAxisExtent: 0, + childAspectRatio: StyleString.aspectRatio * 2.2, ), delegate: SliverChildBuilderDelegate( (context, index) { diff --git a/lib/pages/member/new/member_page.dart b/lib/pages/member/new/member_page.dart index 8cffc79b4..35f42a099 100644 --- a/lib/pages/member/new/member_page.dart +++ b/lib/pages/member/new/member_page.dart @@ -48,7 +48,9 @@ class _MemberPageNewState extends State @override Widget build(BuildContext context) { - _userController.top ??= MediaQuery.of(context).padding.top; + if (_userController.top == null || _userController.top == 0) { + _userController.top = MediaQuery.of(context).padding.top; + } return Scaffold( resizeToAvoidBottomInset: false, body: Obx( diff --git a/lib/pages/member/widgets/seasons.dart b/lib/pages/member/widgets/seasons.dart index 3836be0fa..055052acd 100644 --- a/lib/pages/member/widgets/seasons.dart +++ b/lib/pages/member/widgets/seasons.dart @@ -67,7 +67,6 @@ class MemberSeasonsPanel extends StatelessWidget { crossAxisSpacing: StyleString.cardSpace, maxCrossAxisExtent: Grid.maxRowWidth, childAspectRatio: 0.94, - mainAxisExtent: 0, ), physics: const NeverScrollableScrollPhysics(), shrinkWrap: true, diff --git a/lib/pages/member_archive/view.dart b/lib/pages/member_archive/view.dart index 3a62db5b3..6293e5d8f 100644 --- a/lib/pages/member_archive/view.dart +++ b/lib/pages/member_archive/view.dart @@ -94,13 +94,12 @@ class _MemberArchivePageState extends State { ? SliverGrid( gridDelegate: SliverGridDelegateWithExtentAndRatio( - mainAxisSpacing: StyleString.safeSpace, - crossAxisSpacing: StyleString.safeSpace, - maxCrossAxisExtent: - Grid.maxRowWidth * 2, - childAspectRatio: - StyleString.aspectRatio * 2.4, - mainAxisExtent: 0), + mainAxisSpacing: StyleString.safeSpace, + crossAxisSpacing: StyleString.safeSpace, + maxCrossAxisExtent: Grid.maxRowWidth * 2, + childAspectRatio: + StyleString.aspectRatio * 2.4, + ), delegate: SliverChildBuilderDelegate( (BuildContext context, index) { return VideoCardH( diff --git a/lib/pages/member_search/search_archive.dart b/lib/pages/member_search/search_archive.dart index 11c251f7d..9bc390798 100644 --- a/lib/pages/member_search/search_archive.dart +++ b/lib/pages/member_search/search_archive.dart @@ -35,18 +35,14 @@ class SearchArchive extends StatelessWidget { slivers: [ SliverPadding( padding: EdgeInsets.only( - left: StyleString.safeSpace, - top: StyleString.safeSpace, - right: StyleString.safeSpace, - bottom: 92 + MediaQuery.paddingOf(context).bottom, + top: StyleString.safeSpace - 5, + bottom: MediaQuery.paddingOf(context).bottom + 80, ), sliver: SliverGrid( gridDelegate: SliverGridDelegateWithExtentAndRatio( - mainAxisSpacing: StyleString.safeSpace, - crossAxisSpacing: StyleString.safeSpace, + mainAxisSpacing: 2, maxCrossAxisExtent: Grid.maxRowWidth * 2, - childAspectRatio: StyleString.aspectRatio * 2.4, - mainAxisExtent: 0, + childAspectRatio: StyleString.aspectRatio * 2.2, ), delegate: SliverChildBuilderDelegate( (context, index) { diff --git a/lib/pages/member_seasons/view.dart b/lib/pages/member_seasons/view.dart index 82b7c22eb..a004411b2 100644 --- a/lib/pages/member_seasons/view.dart +++ b/lib/pages/member_seasons/view.dart @@ -84,7 +84,6 @@ class _MemberSeasonsPageState extends State { crossAxisSpacing: StyleString.cardSpace, maxCrossAxisExtent: Grid.maxRowWidth, childAspectRatio: 0.94, - mainAxisExtent: 0, ), physics: const NeverScrollableScrollPhysics(), shrinkWrap: true, diff --git a/lib/pages/rank/zone/view.dart b/lib/pages/rank/zone/view.dart index 57f5f8441..27faebc50 100644 --- a/lib/pages/rank/zone/view.dart +++ b/lib/pages/rank/zone/view.dart @@ -74,11 +74,9 @@ class _ZonePageState extends State slivers: [ SliverPadding( // 单列布局 EdgeInsets.zero - padding: EdgeInsets.fromLTRB( - StyleString.cardSpace, - StyleString.safeSpace, - 0, - MediaQuery.of(context).padding.bottom + 10, + padding: EdgeInsets.only( + top: StyleString.safeSpace - 5, + bottom: MediaQuery.of(context).padding.bottom + 80, ), sliver: Obx( () => _zoneController.loadingState.value is Loading @@ -112,11 +110,9 @@ class _ZonePageState extends State Widget _buildSkeleton() { return SliverGrid( gridDelegate: SliverGridDelegateWithExtentAndRatio( - mainAxisSpacing: StyleString.safeSpace, - crossAxisSpacing: StyleString.safeSpace, + mainAxisSpacing: 2, maxCrossAxisExtent: Grid.maxRowWidth * 2, - childAspectRatio: StyleString.aspectRatio * 2.4, - mainAxisExtent: 0, + childAspectRatio: StyleString.aspectRatio * 2.2, ), delegate: SliverChildBuilderDelegate( (context, index) { @@ -130,11 +126,9 @@ class _ZonePageState extends State Widget _buildBody(Success loadingState) { return SliverGrid( gridDelegate: SliverGridDelegateWithExtentAndRatio( - mainAxisSpacing: StyleString.safeSpace, - crossAxisSpacing: StyleString.safeSpace, + mainAxisSpacing: 2, maxCrossAxisExtent: Grid.maxRowWidth * 2, - childAspectRatio: StyleString.aspectRatio * 2.4, - mainAxisExtent: 13, + childAspectRatio: StyleString.aspectRatio * 2.2, ), delegate: SliverChildBuilderDelegate( (context, index) { diff --git a/lib/pages/search_panel/view.dart b/lib/pages/search_panel/view.dart index f4016da6e..e36f5ea4d 100644 --- a/lib/pages/search_panel/view.dart +++ b/lib/pages/search_panel/view.dart @@ -68,11 +68,11 @@ class _SearchPanelState extends State slivers: [ SliverGrid( gridDelegate: SliverGridDelegateWithExtentAndRatio( - mainAxisSpacing: StyleString.safeSpace, - crossAxisSpacing: StyleString.safeSpace, - maxCrossAxisExtent: Grid.maxRowWidth * 2, - childAspectRatio: StyleString.aspectRatio * 2.4, - mainAxisExtent: 0), + mainAxisSpacing: 2, + maxCrossAxisExtent: Grid.maxRowWidth * 2, + childAspectRatio: StyleString.aspectRatio * + (widget.searchType == SearchType.media_bangumi ? 1.5 : 2.2), + ), delegate: SliverChildBuilderDelegate( (context, index) { switch (widget.searchType) { diff --git a/lib/pages/search_panel/widgets/article_panel.dart b/lib/pages/search_panel/widgets/article_panel.dart index 899ef3863..495e22fd7 100644 --- a/lib/pages/search_panel/widgets/article_panel.dart +++ b/lib/pages/search_panel/widgets/article_panel.dart @@ -84,11 +84,9 @@ Widget searchArticlePanel(context, searchPanelCtr, LoadingState loadingState) { ), sliver: SliverGrid( gridDelegate: SliverGridDelegateWithExtentAndRatio( - mainAxisSpacing: StyleString.safeSpace, - crossAxisSpacing: StyleString.safeSpace, + mainAxisSpacing: 2, maxCrossAxisExtent: Grid.maxRowWidth * 2, - childAspectRatio: StyleString.aspectRatio * 2.4, - mainAxisExtent: 0, + childAspectRatio: StyleString.aspectRatio * 2.2, ), delegate: SliverChildBuilderDelegate( (BuildContext context, int index) { @@ -107,7 +105,9 @@ Widget searchArticlePanel(context, searchPanelCtr, LoadingState loadingState) { }, child: Padding( padding: const EdgeInsets.symmetric( - horizontal: StyleString.safeSpace), + horizontal: StyleString.safeSpace, + vertical: 5, + ), child: LayoutBuilder( builder: (context, boxConstraints) { final double width = (boxConstraints.maxWidth - diff --git a/lib/pages/search_panel/widgets/live_panel.dart b/lib/pages/search_panel/widgets/live_panel.dart index 76e1ce539..645f99600 100644 --- a/lib/pages/search_panel/widgets/live_panel.dart +++ b/lib/pages/search_panel/widgets/live_panel.dart @@ -13,10 +13,10 @@ Widget searchLivePanel(BuildContext context, ctr, LoadingState loadingState) { Loading() => loadingWidget, Success() => (loadingState.response as List?)?.isNotEmpty == true ? GridView.builder( - padding: const EdgeInsets.only( + padding: EdgeInsets.only( left: StyleString.safeSpace, right: StyleString.safeSpace, - bottom: StyleString.safeSpace, + bottom: MediaQuery.paddingOf(context).bottom + 80, ), primary: false, controller: ctr!.scrollController, diff --git a/lib/pages/search_panel/widgets/media_bangumi_panel.dart b/lib/pages/search_panel/widgets/media_bangumi_panel.dart index e4145aa3f..49ff7d1e6 100644 --- a/lib/pages/search_panel/widgets/media_bangumi_panel.dart +++ b/lib/pages/search_panel/widgets/media_bangumi_panel.dart @@ -19,13 +19,10 @@ Widget searchBangumiPanel(context, ctr, LoadingState loadingState) { slivers: [ SliverPadding( padding: EdgeInsets.only( - bottom: StyleString.safeSpace + - MediaQuery.of(context).padding.bottom, + bottom: MediaQuery.of(context).padding.bottom + 80, ), sliver: SliverGrid( gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent( - mainAxisSpacing: StyleString.safeSpace, - crossAxisSpacing: StyleString.safeSpace, maxCrossAxisExtent: Grid.maxRowWidth * 2, mainAxisExtent: 160, ), diff --git a/lib/pages/search_panel/widgets/user_panel.dart b/lib/pages/search_panel/widgets/user_panel.dart index 4badab7ad..1f3c0c825 100644 --- a/lib/pages/search_panel/widgets/user_panel.dart +++ b/lib/pages/search_panel/widgets/user_panel.dart @@ -11,7 +11,6 @@ import 'package:get/get.dart'; import 'package:PiliPalaX/common/widgets/network_img_layer.dart'; import 'package:PiliPalaX/utils/utils.dart'; -import '../../../common/constants.dart'; import '../../../utils/grid.dart'; Widget searchUserPanel(context, searchPanelCtr, LoadingState loadingState) { @@ -79,13 +78,10 @@ Widget searchUserPanel(context, searchPanelCtr, LoadingState loadingState) { Success() => (loadingState.response as List?)?.isNotEmpty == true ? SliverPadding( padding: EdgeInsets.only( - bottom: StyleString.safeSpace + - MediaQuery.of(context).padding.bottom, + bottom: MediaQuery.of(context).padding.bottom + 80, ), sliver: SliverGrid( gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent( - mainAxisSpacing: StyleString.cardSpace, - crossAxisSpacing: StyleString.safeSpace, maxCrossAxisExtent: Grid.maxRowWidth * 2, mainAxisExtent: 56, ), diff --git a/lib/pages/search_panel/widgets/video_panel.dart b/lib/pages/search_panel/widgets/video_panel.dart index 803bb4630..31711fb87 100644 --- a/lib/pages/search_panel/widgets/video_panel.dart +++ b/lib/pages/search_panel/widgets/video_panel.dart @@ -87,18 +87,13 @@ Widget searchVideoPanel(context, ctr, LoadingState loadingState) { Success() => (loadingState.response as List?)?.isNotEmpty == true ? SliverPadding( padding: EdgeInsets.only( - left: StyleString.safeSpace, - right: StyleString.safeSpace, - bottom: StyleString.safeSpace + - MediaQuery.of(context).padding.bottom, + bottom: MediaQuery.of(context).padding.bottom + 80, ), sliver: SliverGrid( gridDelegate: SliverGridDelegateWithExtentAndRatio( - mainAxisSpacing: StyleString.safeSpace, - crossAxisSpacing: StyleString.safeSpace, + mainAxisSpacing: 2, maxCrossAxisExtent: Grid.maxRowWidth * 2, - childAspectRatio: StyleString.aspectRatio * 2.4, - mainAxisExtent: 0, + childAspectRatio: StyleString.aspectRatio * 2.2, ), delegate: SliverChildBuilderDelegate( (BuildContext context, int index) { diff --git a/lib/pages/subscription/view.dart b/lib/pages/subscription/view.dart index ad2f2a32f..929f0ccde 100644 --- a/lib/pages/subscription/view.dart +++ b/lib/pages/subscription/view.dart @@ -27,7 +27,7 @@ class _SubPageState extends State { Obx(() => _buildBody(_subController.loadingState.value)), SliverToBoxAdapter( child: SizedBox( - height: MediaQuery.of(context).padding.bottom + 10, + height: MediaQuery.of(context).padding.bottom + 80, ), ), ], @@ -37,31 +37,23 @@ class _SubPageState extends State { Widget _buildBody(LoadingState loadingState) { return switch (loadingState) { - Loading() => SliverPadding( - padding: - const EdgeInsets.symmetric(horizontal: StyleString.safeSpace), - sliver: SliverGrid( - gridDelegate: SliverGridDelegateWithExtentAndRatio( - mainAxisSpacing: StyleString.cardSpace, - crossAxisSpacing: StyleString.safeSpace, - maxCrossAxisExtent: Grid.maxRowWidth * 2, - childAspectRatio: StyleString.aspectRatio * 2.4, - mainAxisExtent: 0, - ), - delegate: SliverChildBuilderDelegate( - (context, index) => const VideoCardHSkeleton(), - childCount: 10, - ), + Loading() => SliverGrid( + gridDelegate: SliverGridDelegateWithExtentAndRatio( + mainAxisSpacing: 2, + maxCrossAxisExtent: Grid.maxRowWidth * 2, + childAspectRatio: StyleString.aspectRatio * 2.2, + ), + delegate: SliverChildBuilderDelegate( + (context, index) => const VideoCardHSkeleton(), + childCount: 10, ), ), Success() => (loadingState.response as List?)?.isNotEmpty == true ? SliverGrid( gridDelegate: SliverGridDelegateWithExtentAndRatio( - mainAxisSpacing: StyleString.cardSpace, - crossAxisSpacing: StyleString.safeSpace, + mainAxisSpacing: 2, maxCrossAxisExtent: Grid.maxRowWidth * 2, - childAspectRatio: StyleString.aspectRatio * 2.4, - mainAxisExtent: 0, + childAspectRatio: StyleString.aspectRatio * 2.2, ), delegate: SliverChildBuilderDelegate( childCount: loadingState.response.length, diff --git a/lib/pages/subscription/widgets/item.dart b/lib/pages/subscription/widgets/item.dart index 980f0789d..8397868bc 100644 --- a/lib/pages/subscription/widgets/item.dart +++ b/lib/pages/subscription/widgets/item.dart @@ -28,7 +28,7 @@ class SubItem extends StatelessWidget { }, ), child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 7), + padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 5), child: LayoutBuilder( builder: (context, boxConstraints) { double width = diff --git a/lib/pages/subscription_detail/view.dart b/lib/pages/subscription_detail/view.dart index fc245acb6..e5fd98cbb 100644 --- a/lib/pages/subscription_detail/view.dart +++ b/lib/pages/subscription_detail/view.dart @@ -69,7 +69,7 @@ class _SubDetailPageState extends State { physics: const AlwaysScrollableScrollPhysics(), slivers: [ SliverAppBar( - expandedHeight: 260 - MediaQuery.of(context).padding.top, + expandedHeight: 215 - MediaQuery.of(context).padding.top, pinned: true, title: StreamBuilder( stream: titleStreamC.stream, @@ -109,11 +109,12 @@ class _SubDetailPageState extends State { ), ), padding: EdgeInsets.only( - top: kTextTabBarHeight + - MediaQuery.of(context).padding.top + - 30, - left: 20, - right: 20), + top: kTextTabBarHeight + + MediaQuery.of(context).padding.top + + 15, + left: 20, + right: 20, + ), child: SizedBox( height: 200, child: Row( @@ -230,11 +231,9 @@ class _SubDetailPageState extends State { : SliverGrid( gridDelegate: SliverGridDelegateWithExtentAndRatio( - mainAxisSpacing: StyleString.cardSpace, - crossAxisSpacing: StyleString.safeSpace, + mainAxisSpacing: 2, maxCrossAxisExtent: Grid.maxRowWidth * 2, - childAspectRatio: StyleString.aspectRatio * 2.4, - mainAxisExtent: 0, + childAspectRatio: StyleString.aspectRatio * 2.2, ), delegate: SliverChildBuilderDelegate( childCount: subList.length, @@ -258,21 +257,15 @@ class _SubDetailPageState extends State { } } else { // 骨架屏 - return SliverPadding( - padding: const EdgeInsets.symmetric( - horizontal: StyleString.safeSpace), - sliver: SliverGrid( - gridDelegate: SliverGridDelegateWithExtentAndRatio( - mainAxisSpacing: StyleString.cardSpace, - crossAxisSpacing: StyleString.safeSpace, - maxCrossAxisExtent: Grid.maxRowWidth * 2, - childAspectRatio: StyleString.aspectRatio * 2.4, - mainAxisExtent: 0, - ), - delegate: SliverChildBuilderDelegate( - (context, index) => const VideoCardHSkeleton(), - childCount: 10, - ), + return SliverGrid( + gridDelegate: SliverGridDelegateWithExtentAndRatio( + mainAxisSpacing: 2, + maxCrossAxisExtent: Grid.maxRowWidth * 2, + childAspectRatio: StyleString.aspectRatio * 2.2, + ), + delegate: SliverChildBuilderDelegate( + (context, index) => const VideoCardHSkeleton(), + childCount: 10, ), ); } @@ -282,14 +275,16 @@ class _SubDetailPageState extends State { child: Container( height: MediaQuery.of(context).padding.bottom + 60, padding: EdgeInsets.only( - bottom: MediaQuery.of(context).padding.bottom), + bottom: MediaQuery.of(context).padding.bottom, + ), child: Center( child: Obx( () => Text( _subDetailController.loadingText.value, style: TextStyle( - color: Theme.of(context).colorScheme.outline, - fontSize: 13), + color: Theme.of(context).colorScheme.outline, + fontSize: 13, + ), ), ), ), diff --git a/lib/pages/video/detail/member/horizontal_member_page.dart b/lib/pages/video/detail/member/horizontal_member_page.dart index 696753b31..1bf974f55 100644 --- a/lib/pages/video/detail/member/horizontal_member_page.dart +++ b/lib/pages/video/detail/member/horizontal_member_page.dart @@ -161,20 +161,14 @@ class _HorizontalMemberPageState extends State { slivers: [ _buildSliverHeader, SliverPadding( - // 单列布局 EdgeInsets.zero - padding: EdgeInsets.fromLTRB( - StyleString.safeSpace, - StyleString.safeSpace - 5, - StyleString.safeSpace, - MediaQuery.of(context).padding.bottom + 10, + padding: EdgeInsets.only( + bottom: MediaQuery.of(context).padding.bottom + 80, ), sliver: SliverGrid( gridDelegate: SliverGridDelegateWithExtentAndRatio( - mainAxisSpacing: StyleString.safeSpace, - crossAxisSpacing: StyleString.safeSpace, + mainAxisSpacing: 2, maxCrossAxisExtent: Grid.maxRowWidth * 2, - childAspectRatio: StyleString.aspectRatio * 2.4, - mainAxisExtent: 0, + childAspectRatio: StyleString.aspectRatio * 2.2, ), delegate: SliverChildBuilderDelegate( (context, index) { diff --git a/lib/pages/video/detail/related/view.dart b/lib/pages/video/detail/related/view.dart index c0d7f5d4c..d3665c914 100644 --- a/lib/pages/video/detail/related/view.dart +++ b/lib/pages/video/detail/related/view.dart @@ -28,7 +28,7 @@ class _RelatedVideoPanelState extends State Widget build(BuildContext context) { super.build(context); return SliverPadding( - padding: const EdgeInsets.all(StyleString.safeSpace), + padding: const EdgeInsets.only(top: StyleString.safeSpace - 5), sliver: Obx(() => _buildBody(_relatedController.loadingState.value)), ); } @@ -46,11 +46,10 @@ class _RelatedVideoPanelState extends State return switch (loadingState) { Loading() => SliverGrid( gridDelegate: SliverGridDelegateWithExtentAndRatio( - mainAxisSpacing: StyleString.safeSpace, - crossAxisSpacing: StyleString.safeSpace, - maxCrossAxisExtent: Grid.maxRowWidth * 2, - childAspectRatio: StyleString.aspectRatio * 2.4, - mainAxisExtent: 0), + mainAxisSpacing: 2, + maxCrossAxisExtent: Grid.maxRowWidth * 2, + childAspectRatio: StyleString.aspectRatio * 2.2, + ), delegate: SliverChildBuilderDelegate( (context, index) { return const VideoCardHSkeleton(); @@ -61,15 +60,15 @@ class _RelatedVideoPanelState extends State Success() => (loadingState.response as List?)?.isNotEmpty == true ? SliverGrid( gridDelegate: SliverGridDelegateWithExtentAndRatio( - mainAxisSpacing: StyleString.safeSpace, - crossAxisSpacing: StyleString.safeSpace, - maxCrossAxisExtent: Grid.maxRowWidth * 2, - childAspectRatio: StyleString.aspectRatio * 2.4, - mainAxisExtent: 0), + mainAxisSpacing: 2, + maxCrossAxisExtent: Grid.maxRowWidth * 2, + childAspectRatio: StyleString.aspectRatio * 2.2, + ), delegate: SliverChildBuilderDelegate((context, index) { if (index == loadingState.response.length) { return SizedBox( - height: MediaQuery.of(context).padding.bottom); + height: MediaQuery.of(context).padding.bottom, + ); } else { return Material( child: VideoCardH(