diff --git a/lib/common/widgets/image_save.dart b/lib/common/widgets/image_save.dart index 7881f347..317e8f18 100644 --- a/lib/common/widgets/image_save.dart +++ b/lib/common/widgets/image_save.dart @@ -28,6 +28,7 @@ void imageSaveDialog({ mainAxisSize: MainAxisSize.min, children: [ Stack( + clipBehavior: Clip.none, children: [ GestureDetector( onTap: SmartDialog.dismiss, diff --git a/lib/common/widgets/image_view.dart b/lib/common/widgets/image_view.dart index cdf14590..fc1fa075 100644 --- a/lib/common/widgets/image_view.dart +++ b/lib/common/widgets/image_view.dart @@ -138,6 +138,7 @@ Widget imageView( } }, child: Stack( + clipBehavior: Clip.none, alignment: Alignment.center, children: [ ClipRRect( diff --git a/lib/common/widgets/interactiveviewer_gallery/interactiveviewer_gallery.dart b/lib/common/widgets/interactiveviewer_gallery/interactiveviewer_gallery.dart index 06db9549..5a53e1ff 100644 --- a/lib/common/widgets/interactiveviewer_gallery/interactiveviewer_gallery.dart +++ b/lib/common/widgets/interactiveviewer_gallery/interactiveviewer_gallery.dart @@ -276,6 +276,7 @@ class _InteractiveviewerGalleryState extends State @override Widget build(BuildContext context) { return Stack( + clipBehavior: Clip.none, children: [ InteractiveViewerBoundary( controller: _transformationController, @@ -344,6 +345,7 @@ class _InteractiveviewerGalleryState extends State ) : null, child: Stack( + clipBehavior: Clip.none, alignment: Alignment.center, children: [ Align( diff --git a/lib/common/widgets/nine_grid_view.dart b/lib/common/widgets/nine_grid_view.dart index 7de3f41a..a1567513 100644 --- a/lib/common/widgets/nine_grid_view.dart +++ b/lib/common/widgets/nine_grid_view.dart @@ -172,6 +172,7 @@ class _NineGridViewState extends State { ))); } return Stack( + clipBehavior: Clip.none, children: list, ); } @@ -260,6 +261,7 @@ class _NineGridViewState extends State { ))); } return Stack( + clipBehavior: Clip.none, children: list, ); } @@ -286,6 +288,7 @@ class _NineGridViewState extends State { } return ClipOval( child: Stack( + clipBehavior: Clip.none, children: children, ), ); @@ -372,7 +375,10 @@ class _NineGridViewState extends State { children.add(child); } - return Stack(children: children); + return Stack( + clipBehavior: Clip.none, + children: children, + ); } /// double is zero. diff --git a/lib/common/widgets/refresh_indicator.dart b/lib/common/widgets/refresh_indicator.dart index 5ba208d2..a1f80422 100644 --- a/lib/common/widgets/refresh_indicator.dart +++ b/lib/common/widgets/refresh_indicator.dart @@ -598,6 +598,7 @@ class RefreshIndicatorState extends State _mode == _RefreshIndicatorMode.done; return Stack( + clipBehavior: Clip.none, children: [ child, if (_mode != null) diff --git a/lib/common/widgets/video_card_h_grpc.dart b/lib/common/widgets/video_card_h_grpc.dart index 1652863e..65b362c4 100644 --- a/lib/common/widgets/video_card_h_grpc.dart +++ b/lib/common/widgets/video_card_h_grpc.dart @@ -32,6 +32,7 @@ class VideoCardHGrpc extends StatelessWidget { String type = 'video'; final String heroTag = Utils.makeHeroTag(aid); return Stack( + clipBehavior: Clip.none, children: [ Semantics( excludeSemantics: true, @@ -66,6 +67,7 @@ class VideoCardHGrpc extends StatelessWidget { final double maxWidth = boxConstraints.maxWidth; final double maxHeight = boxConstraints.maxHeight; return Stack( + clipBehavior: Clip.none, children: [ Hero( tag: heroTag, diff --git a/lib/common/widgets/video_card_h_member_video.dart b/lib/common/widgets/video_card_h_member_video.dart index 0e621b51..5d28927f 100644 --- a/lib/common/widgets/video_card_h_member_video.dart +++ b/lib/common/widgets/video_card_h_member_video.dart @@ -28,6 +28,7 @@ class VideoCardHMemberVideo extends StatelessWidget { @override Widget build(BuildContext context) { return Stack( + clipBehavior: Clip.none, children: [ InkWell( onLongPress: () => imageSaveDialog( @@ -77,6 +78,7 @@ class VideoCardHMemberVideo extends StatelessWidget { final double maxWidth = boxConstraints.maxWidth; final double maxHeight = boxConstraints.maxHeight; return Stack( + clipBehavior: Clip.none, children: [ NetworkImgLayer( src: videoItem.cover, diff --git a/lib/common/widgets/video_card_v.dart b/lib/common/widgets/video_card_v.dart index 86efdf3b..fbd581fd 100644 --- a/lib/common/widgets/video_card_v.dart +++ b/lib/common/widgets/video_card_v.dart @@ -90,64 +90,68 @@ class VideoCardV extends StatelessWidget { @override Widget build(BuildContext context) { - return Stack(children: [ - Semantics( - label: Utils.videoItemSemantics(videoItem), - excludeSemantics: true, - child: Card( - clipBehavior: Clip.hardEdge, - margin: EdgeInsets.zero, - child: InkWell( - onTap: () => onPushDetail(Utils.makeHeroTag(videoItem.aid)), - onLongPress: () => imageSaveDialog( - title: videoItem.title, - cover: videoItem.pic, - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - AspectRatio( - aspectRatio: StyleString.aspectRatio, - child: LayoutBuilder(builder: (context, boxConstraints) { - double maxWidth = boxConstraints.maxWidth; - double maxHeight = boxConstraints.maxHeight; - return Stack( - children: [ - NetworkImgLayer( - src: videoItem.pic, - width: maxWidth, - height: maxHeight, - ), - if (videoItem.duration > 0) - PBadge( - bottom: 6, - right: 7, - size: 'small', - type: 'gray', - text: Utils.timeFormat(videoItem.duration), - ) - ], - ); - }), - ), - videoContent(context) - ], + return Stack( + clipBehavior: Clip.none, + children: [ + Semantics( + label: Utils.videoItemSemantics(videoItem), + excludeSemantics: true, + child: Card( + clipBehavior: Clip.hardEdge, + margin: EdgeInsets.zero, + child: InkWell( + onTap: () => onPushDetail(Utils.makeHeroTag(videoItem.aid)), + onLongPress: () => imageSaveDialog( + title: videoItem.title, + cover: videoItem.pic, + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + AspectRatio( + aspectRatio: StyleString.aspectRatio, + child: LayoutBuilder(builder: (context, boxConstraints) { + double maxWidth = boxConstraints.maxWidth; + double maxHeight = boxConstraints.maxHeight; + return Stack( + clipBehavior: Clip.none, + children: [ + NetworkImgLayer( + src: videoItem.pic, + width: maxWidth, + height: maxHeight, + ), + if (videoItem.duration > 0) + PBadge( + bottom: 6, + right: 7, + size: 'small', + type: 'gray', + text: Utils.timeFormat(videoItem.duration), + ) + ], + ); + }), + ), + videoContent(context) + ], + ), ), ), ), - ), - if (videoItem.goto == 'av') - Positioned( - right: -5, - bottom: -2, - child: VideoPopupMenu( - size: 29, - iconSize: 17, - videoItem: videoItem, - onRemove: onRemove, + if (videoItem.goto == 'av') + Positioned( + right: -5, + bottom: -2, + child: VideoPopupMenu( + size: 29, + iconSize: 17, + videoItem: videoItem, + onRemove: onRemove, + ), ), - ), - ]); + ], + ); } Widget videoContent(context) { diff --git a/lib/common/widgets/video_card_v_member_home.dart b/lib/common/widgets/video_card_v_member_home.dart index 96312664..42b50e62 100644 --- a/lib/common/widgets/video_card_v_member_home.dart +++ b/lib/common/widgets/video_card_v_member_home.dart @@ -55,6 +55,7 @@ class VideoCardVMemberHome extends StatelessWidget { @override Widget build(BuildContext context) { return Stack( + clipBehavior: Clip.none, children: [ Semantics( excludeSemantics: true, @@ -77,6 +78,7 @@ class VideoCardVMemberHome extends StatelessWidget { double maxWidth = boxConstraints.maxWidth; double maxHeight = boxConstraints.maxHeight; return Stack( + clipBehavior: Clip.none, children: [ NetworkImgLayer( src: videoItem.cover, diff --git a/lib/common/widgets/video_popup_menu.dart b/lib/common/widgets/video_popup_menu.dart index e7fa3faf..a250bea4 100644 --- a/lib/common/widgets/video_popup_menu.dart +++ b/lib/common/widgets/video_popup_menu.dart @@ -34,6 +34,7 @@ class VideoCustomActions { videoItem.bvid!, 'copy', Stack( + clipBehavior: Clip.none, children: [ Icon(MdiIcons.identifier, size: 16), Icon(MdiIcons.circleOutline, size: 16), diff --git a/lib/pages/article/view.dart b/lib/pages/article/view.dart index 1c55b777..5c474a05 100644 --- a/lib/pages/article/view.dart +++ b/lib/pages/article/view.dart @@ -232,6 +232,7 @@ class _ArticlePageState extends State resizeToAvoidBottomInset: false, appBar: _buildAppBar, body: Stack( + clipBehavior: Clip.none, children: [ SafeArea( top: false, diff --git a/lib/pages/bangumi/introduction/view.dart b/lib/pages/bangumi/introduction/view.dart index fe8576f8..c0a608d7 100644 --- a/lib/pages/bangumi/introduction/view.dart +++ b/lib/pages/bangumi/introduction/view.dart @@ -198,6 +198,7 @@ class _BangumiInfoState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Stack( + clipBehavior: Clip.none, children: [ GestureDetector( onTap: () { diff --git a/lib/pages/bangumi/widgets/bangumi_card_v.dart b/lib/pages/bangumi/widgets/bangumi_card_v.dart index 1550ee30..4e8940b6 100644 --- a/lib/pages/bangumi/widgets/bangumi_card_v.dart +++ b/lib/pages/bangumi/widgets/bangumi_card_v.dart @@ -41,6 +41,7 @@ class BangumiCardV extends StatelessWidget { final double maxWidth = boxConstraints.maxWidth; final double maxHeight = boxConstraints.maxHeight; return Stack( + clipBehavior: Clip.none, children: [ Hero( tag: heroTag, diff --git a/lib/pages/bangumi/widgets/bangumi_card_v_member_home.dart b/lib/pages/bangumi/widgets/bangumi_card_v_member_home.dart index af9e9880..039b71f6 100644 --- a/lib/pages/bangumi/widgets/bangumi_card_v_member_home.dart +++ b/lib/pages/bangumi/widgets/bangumi_card_v_member_home.dart @@ -46,6 +46,7 @@ class BangumiCardVMemberHome extends StatelessWidget { final double maxWidth = boxConstraints.maxWidth; final double maxHeight = boxConstraints.maxHeight; return Stack( + clipBehavior: Clip.none, children: [ Hero( tag: heroTag, diff --git a/lib/pages/bangumi/widgets/bangumi_card_v_pgc_index.dart b/lib/pages/bangumi/widgets/bangumi_card_v_pgc_index.dart index 8474b435..67933749 100644 --- a/lib/pages/bangumi/widgets/bangumi_card_v_pgc_index.dart +++ b/lib/pages/bangumi/widgets/bangumi_card_v_pgc_index.dart @@ -38,6 +38,7 @@ class BangumiCardVPgcIndex extends StatelessWidget { final double maxWidth = boxConstraints.maxWidth; final double maxHeight = boxConstraints.maxHeight; return Stack( + clipBehavior: Clip.none, children: [ NetworkImgLayer( src: bangumiItem['cover'], diff --git a/lib/pages/bangumi/widgets/bangumi_card_v_search.dart b/lib/pages/bangumi/widgets/bangumi_card_v_search.dart index d1e9e718..4f847587 100644 --- a/lib/pages/bangumi/widgets/bangumi_card_v_search.dart +++ b/lib/pages/bangumi/widgets/bangumi_card_v_search.dart @@ -39,6 +39,7 @@ class BangumiCardVSearch extends StatelessWidget { final double maxWidth = boxConstraints.maxWidth; final double maxHeight = boxConstraints.maxHeight; return Stack( + clipBehavior: Clip.none, children: [ NetworkImgLayer( src: item.cover, diff --git a/lib/pages/bangumi/widgets/bangumi_card_v_timeline.dart b/lib/pages/bangumi/widgets/bangumi_card_v_timeline.dart index 01f8b3b0..1c1f06b1 100644 --- a/lib/pages/bangumi/widgets/bangumi_card_v_timeline.dart +++ b/lib/pages/bangumi/widgets/bangumi_card_v_timeline.dart @@ -39,6 +39,7 @@ class BangumiCardVTimeline extends StatelessWidget { final double maxWidth = boxConstraints.maxWidth; final double maxHeight = boxConstraints.maxHeight; return Stack( + clipBehavior: Clip.none, children: [ NetworkImgLayer( src: item.cover, diff --git a/lib/pages/common/common_publish_page.dart b/lib/pages/common/common_publish_page.dart index 7034c4cc..696dc56a 100644 --- a/lib/pages/common/common_publish_page.dart +++ b/lib/pages/common/common_publish_page.dart @@ -286,6 +286,7 @@ abstract class CommonPublishPageState } return Stack( + clipBehavior: Clip.none, children: [ GestureDetector( onTap: () { diff --git a/lib/pages/dynamics/create_dyn_panel.dart b/lib/pages/dynamics/create_dyn_panel.dart index c7997db7..3b8997fb 100644 --- a/lib/pages/dynamics/create_dyn_panel.dart +++ b/lib/pages/dynamics/create_dyn_panel.dart @@ -135,6 +135,7 @@ class _CreateDynPanelState extends CommonPublishPageState { child: Padding( padding: const EdgeInsets.all(16), child: Stack( + clipBehavior: Clip.none, alignment: Alignment.center, children: [ Align( diff --git a/lib/pages/dynamics/detail/view.dart b/lib/pages/dynamics/detail/view.dart index 9b0669cc..ba30c344 100644 --- a/lib/pages/dynamics/detail/view.dart +++ b/lib/pages/dynamics/detail/view.dart @@ -362,6 +362,7 @@ class _DynamicDetailPageState extends State } Widget _buildBody(Orientation orientation, ThemeData theme) => Stack( + clipBehavior: Clip.none, children: [ Builder( builder: (context) { diff --git a/lib/pages/dynamics/repost_dyn_panel.dart b/lib/pages/dynamics/repost_dyn_panel.dart index 9bf0770e..ef41a362 100644 --- a/lib/pages/dynamics/repost_dyn_panel.dart +++ b/lib/pages/dynamics/repost_dyn_panel.dart @@ -246,6 +246,7 @@ class _RepostPanelState extends CommonPublishPageState { height: 34, padding: const EdgeInsets.symmetric(horizontal: 16), child: Stack( + clipBehavior: Clip.none, alignment: Alignment.center, children: [ Align( diff --git a/lib/pages/dynamics/widgets/author_panel.dart b/lib/pages/dynamics/widgets/author_panel.dart index 6813cc30..60796fd7 100644 --- a/lib/pages/dynamics/widgets/author_panel.dart +++ b/lib/pages/dynamics/widgets/author_panel.dart @@ -65,6 +65,7 @@ class AuthorPanel extends StatelessWidget { : Utils.dateFormat(item.modules.moduleAuthor!.pubTs) : item.modules.moduleAuthor?.pubTime; return Stack( + clipBehavior: Clip.none, alignment: Alignment.center, children: [ Align( @@ -382,6 +383,7 @@ class AuthorPanel extends StatelessWidget { }, minLeadingWidth: 0, leading: const Stack( + clipBehavior: Clip.none, alignment: Alignment.center, children: [ Icon(Icons.shield_outlined, size: 19), diff --git a/lib/pages/dynamics/widgets/forward_panel.dart b/lib/pages/dynamics/widgets/forward_panel.dart index 553fe979..8d7be41a 100644 --- a/lib/pages/dynamics/widgets/forward_panel.dart +++ b/lib/pages/dynamics/widgets/forward_panel.dart @@ -441,6 +441,7 @@ Widget forWard( children: [ if (floor == 1) const SizedBox(width: 12), Stack( + clipBehavior: Clip.none, children: [ Hero( tag: item.modules.moduleDynamic!.major!.medialist!['cover'], diff --git a/lib/pages/dynamics/widgets/live_rcmd_panel.dart b/lib/pages/dynamics/widgets/live_rcmd_panel.dart index 13e2f267..2939409f 100644 --- a/lib/pages/dynamics/widgets/live_rcmd_panel.dart +++ b/lib/pages/dynamics/widgets/live_rcmd_panel.dart @@ -79,6 +79,7 @@ Widget liveRcmdPanel( builder: (context, box) { double width = box.maxWidth; return Stack( + clipBehavior: Clip.none, children: [ Hero( tag: liveRcmd.roomId.toString(), diff --git a/lib/pages/dynamics/widgets/video_panel.dart b/lib/pages/dynamics/widgets/video_panel.dart index a4bbfeb6..cebbb9f0 100644 --- a/lib/pages/dynamics/widgets/video_panel.dart +++ b/lib/pages/dynamics/widgets/video_panel.dart @@ -64,6 +64,7 @@ Widget videoSeasonWidget( builder: (context, box) { double width = box.maxWidth; return Stack( + clipBehavior: Clip.none, children: [ NetworkImgLayer( width: width, diff --git a/lib/pages/fav/article/widget/item.dart b/lib/pages/fav/article/widget/item.dart index 4b7d05b8..c2804c66 100644 --- a/lib/pages/fav/article/widget/item.dart +++ b/lib/pages/fav/article/widget/item.dart @@ -114,7 +114,7 @@ class FavArticleItem extends StatelessWidget { ), Positioned( right: 12, - bottom: 0, + bottom: -6, child: iconButton( iconSize: 18, context: context, diff --git a/lib/pages/fav_detail/view.dart b/lib/pages/fav_detail/view.dart index 8c7551ad..ace2a65b 100644 --- a/lib/pages/fav_detail/view.dart +++ b/lib/pages/fav_detail/view.dart @@ -451,6 +451,7 @@ class _FavDetailPageState extends State { } FavDetailItemData item = loadingState.response![index]; return Stack( + clipBehavior: Clip.none, children: [ Positioned.fill( child: FavVideoCardH( diff --git a/lib/pages/fav_detail/widget/fav_video_card.dart b/lib/pages/fav_detail/widget/fav_video_card.dart index ec75608b..aa2cd8be 100644 --- a/lib/pages/fav_detail/widget/fav_video_card.dart +++ b/lib/pages/fav_detail/widget/fav_video_card.dart @@ -96,6 +96,7 @@ class FavVideoCardH extends StatelessWidget { double maxWidth = boxConstraints.maxWidth; double maxHeight = boxConstraints.maxHeight; return Stack( + clipBehavior: Clip.none, children: [ NetworkImgLayer( src: videoItem.pic, @@ -132,6 +133,7 @@ class FavVideoCardH extends StatelessWidget { final theme = Theme.of(context); return Expanded( child: Stack( + clipBehavior: Clip.none, children: [ Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -179,7 +181,7 @@ class FavVideoCardH extends StatelessWidget { if (onDelFav != null) Positioned( right: 0, - bottom: 0, + bottom: -8, child: iconButton( context: context, icon: Icons.clear, diff --git a/lib/pages/history/widgets/item.dart b/lib/pages/history/widgets/item.dart index 5907a2f5..ff575aaf 100644 --- a/lib/pages/history/widgets/item.dart +++ b/lib/pages/history/widgets/item.dart @@ -118,6 +118,7 @@ class HistoryItem extends StatelessWidget { ); }, child: Stack( + clipBehavior: Clip.none, children: [ Padding( padding: const EdgeInsets.symmetric( @@ -128,110 +129,105 @@ class HistoryItem extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ - Stack( - clipBehavior: Clip.none, - children: [ - AspectRatio( - aspectRatio: StyleString.aspectRatio, - child: LayoutBuilder( - builder: (context, boxConstraints) { - double maxWidth = boxConstraints.maxWidth; - double maxHeight = boxConstraints.maxHeight; - return Stack( - clipBehavior: Clip.none, - children: [ - NetworkImgLayer( - src: (videoItem.cover.isNullOrEmpty - ? videoItem.covers?.firstOrNull ?? '' - : videoItem.cover), - width: maxWidth, - height: maxHeight, - ), - if (!BusinessType - .hiddenDurationType.hiddenDurationType - .contains(videoItem.history.business)) - PBadge( - text: videoItem.progress == -1 - ? '已看完' - : '${Utils.timeFormat(videoItem.progress)}/${Utils.timeFormat(videoItem.duration!)}', - right: 6.0, - bottom: 8.0, - type: 'gray', - ), - // 右上角 - if (BusinessType.showBadge.showBadge - .contains(videoItem.history.business) || - videoItem.history.business == - BusinessType.live.type) - PBadge( - text: videoItem.badge, - top: 6.0, - right: 6.0, - bottom: null, - left: null, - ), - ], - ); - }, - ), - ), - Positioned.fill( - child: AnimatedOpacity( - opacity: videoItem.checked == true ? 1 : 0, - duration: const Duration(milliseconds: 200), - child: Container( - alignment: Alignment.center, - decoration: BoxDecoration( - borderRadius: StyleString.mdRadius, - color: Colors.black.withOpacity(0.6), + AspectRatio( + aspectRatio: StyleString.aspectRatio, + child: LayoutBuilder( + builder: (context, boxConstraints) { + double maxWidth = boxConstraints.maxWidth; + double maxHeight = boxConstraints.maxHeight; + return Stack( + clipBehavior: Clip.none, + children: [ + NetworkImgLayer( + src: (videoItem.cover.isNullOrEmpty + ? videoItem.covers?.firstOrNull ?? '' + : videoItem.cover), + width: maxWidth, + height: maxHeight, ), - child: SizedBox( - width: 34, - height: 34, - child: AnimatedScale( - scale: videoItem.checked == true ? 1 : 0, - duration: const Duration(milliseconds: 250), - curve: Curves.easeInOut, - child: IconButton( - tooltip: '取消选择', - style: ButtonStyle( - padding: - WidgetStateProperty.all(EdgeInsets.zero), - backgroundColor: - WidgetStateProperty.resolveWith( - (states) { - return theme.colorScheme.surface - .withOpacity(0.8); - }, + if (!BusinessType + .hiddenDurationType.hiddenDurationType + .contains(videoItem.history.business)) + PBadge( + text: videoItem.progress == -1 + ? '已看完' + : '${Utils.timeFormat(videoItem.progress)}/${Utils.timeFormat(videoItem.duration!)}', + right: 6.0, + bottom: 8.0, + type: 'gray', + ), + // 右上角 + if (BusinessType.showBadge.showBadge + .contains(videoItem.history.business) || + videoItem.history.business == + BusinessType.live.type) + PBadge( + text: videoItem.badge, + top: 6.0, + right: 6.0, + bottom: null, + left: null, + ), + if (videoItem.duration != null && + videoItem.duration != 0 && + videoItem.progress != null && + videoItem.progress != 0) + Positioned( + left: 0, + right: 0, + bottom: 0, + child: videoProgressIndicator( + videoItem.progress == -1 + ? 1 + : videoItem.progress! / videoItem.duration!, + ), + ), + Positioned.fill( + child: AnimatedOpacity( + opacity: videoItem.checked == true ? 1 : 0, + duration: const Duration(milliseconds: 200), + child: Container( + alignment: Alignment.center, + decoration: BoxDecoration( + borderRadius: StyleString.mdRadius, + color: Colors.black.withOpacity(0.6), + ), + child: SizedBox( + width: 34, + height: 34, + child: AnimatedScale( + scale: videoItem.checked == true ? 1 : 0, + duration: const Duration(milliseconds: 250), + curve: Curves.easeInOut, + child: IconButton( + tooltip: '取消选择', + style: ButtonStyle( + padding: WidgetStateProperty.all( + EdgeInsets.zero), + backgroundColor: + WidgetStateProperty.resolveWith( + (states) { + return theme.colorScheme.surface + .withOpacity(0.8); + }, + ), + ), + onPressed: () { + feedBack(); + onChoose?.call(); + }, + icon: Icon(Icons.done_all_outlined, + color: theme.colorScheme.primary), + ), ), ), - onPressed: () { - feedBack(); - onChoose?.call(); - }, - icon: Icon(Icons.done_all_outlined, - color: theme.colorScheme.primary), ), ), ), - ), - ), - ), - if (videoItem.duration != null && - videoItem.duration != 0 && - videoItem.progress != null && - videoItem.progress != 0) - Positioned( - left: 0, - right: 0, - bottom: 0, - child: videoProgressIndicator( - videoItem.progress == -1 - ? 1 - : videoItem.progress! / videoItem.duration!, - ), - ), - ], + ], + ); + }, + ), ), const SizedBox(width: 10), videoContent(theme), @@ -240,7 +236,7 @@ class HistoryItem extends StatelessWidget { ), Positioned( right: 12, - bottom: 12, + bottom: 0, child: SizedBox( width: 29, height: 29, @@ -339,6 +335,8 @@ class HistoryItem extends StatelessWidget { if (videoItem.authorName != '') Text( videoItem.authorName!, + maxLines: 1, + overflow: TextOverflow.ellipsis, style: TextStyle( fontSize: theme.textTheme.labelMedium!.fontSize, color: theme.colorScheme.outline, diff --git a/lib/pages/later/child_view.dart b/lib/pages/later/child_view.dart index 87e9128c..11b98563 100644 --- a/lib/pages/later/child_view.dart +++ b/lib/pages/later/child_view.dart @@ -82,6 +82,7 @@ class _LaterViewChildPageState extends State } var videoItem = loadingState.response![index]; return Stack( + clipBehavior: Clip.none, children: [ VideoCardH( videoItem: videoItem, diff --git a/lib/pages/later_search/view.dart b/lib/pages/later_search/view.dart index c012447b..405fbe81 100644 --- a/lib/pages/later_search/view.dart +++ b/lib/pages/later_search/view.dart @@ -41,6 +41,7 @@ class _LaterSearchPageState } final item = list[index]; return Stack( + clipBehavior: Clip.none, children: [ VideoCardH( videoItem: item, diff --git a/lib/pages/live/widgets/live_item.dart b/lib/pages/live/widgets/live_item.dart index e215f797..8cc4ea43 100644 --- a/lib/pages/live/widgets/live_item.dart +++ b/lib/pages/live/widgets/live_item.dart @@ -39,6 +39,7 @@ class LiveCardV extends StatelessWidget { double maxWidth = boxConstraints.maxWidth; double maxHeight = boxConstraints.maxHeight; return Stack( + clipBehavior: Clip.none, children: [ Hero( tag: heroTag, diff --git a/lib/pages/live/widgets/live_item_follow.dart b/lib/pages/live/widgets/live_item_follow.dart index 82978e6e..d7f6d941 100644 --- a/lib/pages/live/widgets/live_item_follow.dart +++ b/lib/pages/live/widgets/live_item_follow.dart @@ -39,6 +39,7 @@ class LiveCardVFollow extends StatelessWidget { double maxWidth = boxConstraints.maxWidth; double maxHeight = boxConstraints.maxHeight; return Stack( + clipBehavior: Clip.none, children: [ Hero( tag: heroTag, diff --git a/lib/pages/live_room/view.dart b/lib/pages/live_room/view.dart index 9fb91035..fcf3dfe4 100644 --- a/lib/pages/live_room/view.dart +++ b/lib/pages/live_room/view.dart @@ -214,6 +214,7 @@ class _LiveRoomPageState extends State return ColoredBox( color: Colors.black, child: Stack( + clipBehavior: Clip.none, children: [ Obx( () => isFullScreen @@ -281,6 +282,7 @@ class _LiveRoomPageState extends State resizeToAvoidBottomInset: false, backgroundColor: Colors.transparent, body: Stack( + clipBehavior: Clip.none, children: [ _buildAppBar, Column( diff --git a/lib/pages/live_room/widgets/chat.dart b/lib/pages/live_room/widgets/chat.dart index d3131577..6a8b293a 100644 --- a/lib/pages/live_room/widgets/chat.dart +++ b/lib/pages/live_room/widgets/chat.dart @@ -22,6 +22,7 @@ class LiveRoomChat extends StatelessWidget { @override Widget build(BuildContext context) { return Stack( + clipBehavior: Clip.none, children: [ Obx( () => ListView.separated( diff --git a/lib/pages/member/content/member_contribute/content/season_series/widget/season_series_card.dart b/lib/pages/member/content/member_contribute/content/season_series/widget/season_series_card.dart index c42ff859..d618768c 100644 --- a/lib/pages/member/content/member_contribute/content/season_series/widget/season_series_card.dart +++ b/lib/pages/member/content/member_contribute/content/season_series/widget/season_series_card.dart @@ -40,6 +40,7 @@ class SeasonSeriesCard extends StatelessWidget { final double maxWidth = boxConstraints.maxWidth; final double maxHeight = boxConstraints.maxHeight; return Stack( + clipBehavior: Clip.none, children: [ NetworkImgLayer( src: item['meta']['cover'], diff --git a/lib/pages/member/widget/user_info_card.dart b/lib/pages/member/widget/user_info_card.dart index a748074e..027720e4 100644 --- a/lib/pages/member/widget/user_info_card.dart +++ b/lib/pages/member/widget/user_info_card.dart @@ -441,6 +441,7 @@ class UserInfoCard extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ Stack( + clipBehavior: Clip.none, children: [ Column( mainAxisSize: MainAxisSize.min, diff --git a/lib/pages/member_coin/widgets/item.dart b/lib/pages/member_coin/widgets/item.dart index eb7d695e..512a3491 100644 --- a/lib/pages/member_coin/widgets/item.dart +++ b/lib/pages/member_coin/widgets/item.dart @@ -47,6 +47,7 @@ class MemberCoinsItem extends StatelessWidget { double maxWidth = boxConstraints.maxWidth; double maxHeight = boxConstraints.maxHeight; return Stack( + clipBehavior: Clip.none, children: [ NetworkImgLayer( src: coinItem.pic, diff --git a/lib/pages/msg_feed_top/like_me/view.dart b/lib/pages/msg_feed_top/like_me/view.dart index 392c0d13..0e3ddc5c 100644 --- a/lib/pages/msg_feed_top/like_me/view.dart +++ b/lib/pages/msg_feed_top/like_me/view.dart @@ -171,6 +171,7 @@ class _LikeMePageState extends State { width: 50, height: 50, child: Stack( + clipBehavior: Clip.none, children: [ for (var j = 0; j < item.users!.length && j < 4; diff --git a/lib/pages/search_panel/live/widgets/item.dart b/lib/pages/search_panel/live/widgets/item.dart index 9562f52d..4e0bc044 100644 --- a/lib/pages/search_panel/live/widgets/item.dart +++ b/lib/pages/search_panel/live/widgets/item.dart @@ -35,6 +35,7 @@ class LiveItem extends StatelessWidget { double maxWidth = boxConstraints.maxWidth; double maxHeight = boxConstraints.maxHeight; return Stack( + clipBehavior: Clip.none, children: [ NetworkImgLayer( src: liveItem.cover, diff --git a/lib/pages/search_panel/pgc/widgets/item.dart b/lib/pages/search_panel/pgc/widgets/item.dart index 2eed293c..f69fc18a 100644 --- a/lib/pages/search_panel/pgc/widgets/item.dart +++ b/lib/pages/search_panel/pgc/widgets/item.dart @@ -36,6 +36,7 @@ class SearchPgcItem extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ Stack( + clipBehavior: Clip.none, children: [ NetworkImgLayer( width: 111, diff --git a/lib/pages/setting/widgets/model.dart b/lib/pages/setting/widgets/model.dart index 778f8b90..0e3f77b4 100644 --- a/lib/pages/setting/widgets/model.dart +++ b/lib/pages/setting/widgets/model.dart @@ -1509,6 +1509,7 @@ List get extraSettings => [ defaultVal: false, onTap: () => Get.toNamed('/sponsorBlock'), leading: const Stack( + clipBehavior: Clip.none, alignment: Alignment.center, children: [ Icon(Icons.shield_outlined), @@ -2063,6 +2064,7 @@ List get extraSettings => [ title: '发评反诈', subtitle: '发送评论后检查评论是否可见', leading: const Stack( + clipBehavior: Clip.none, alignment: Alignment.center, children: [ Icon(Icons.shield_outlined), @@ -2088,6 +2090,7 @@ List get extraSettings => [ title: '发布/转发动态反诈', subtitle: '发布/转发动态后检查动态是否可见', leading: const Stack( + clipBehavior: Clip.none, alignment: Alignment.center, children: [ Icon(Icons.shield_outlined), @@ -2101,6 +2104,7 @@ List get extraSettings => [ settingsType: SettingsType.sw1tch, title: '屏蔽带货动态', leading: const Stack( + clipBehavior: Clip.none, alignment: Alignment.center, children: [ Icon(Icons.shopping_bag_outlined, size: 14), @@ -2117,6 +2121,7 @@ List get extraSettings => [ settingsType: SettingsType.sw1tch, title: '屏蔽带货评论', leading: const Stack( + clipBehavior: Clip.none, alignment: Alignment.center, children: [ Icon(Icons.shopping_bag_outlined, size: 14), diff --git a/lib/pages/subscription/widgets/item.dart b/lib/pages/subscription/widgets/item.dart index 4029c917..f34cee29 100644 --- a/lib/pages/subscription/widgets/item.dart +++ b/lib/pages/subscription/widgets/item.dart @@ -75,6 +75,7 @@ class SubItem extends StatelessWidget { : '其它:${subFolderItem.type}'; return Expanded( child: Stack( + clipBehavior: Clip.none, children: [ Column( crossAxisAlignment: CrossAxisAlignment.start, diff --git a/lib/pages/subscription_detail/widget/sub_video_card.dart b/lib/pages/subscription_detail/widget/sub_video_card.dart index 8932a825..cec14088 100644 --- a/lib/pages/subscription_detail/widget/sub_video_card.dart +++ b/lib/pages/subscription_detail/widget/sub_video_card.dart @@ -57,6 +57,7 @@ class SubVideoCardH extends StatelessWidget { double maxWidth = boxConstraints.maxWidth; double maxHeight = boxConstraints.maxHeight; return Stack( + clipBehavior: Clip.none, children: [ NetworkImgLayer( src: videoItem.cover, @@ -85,6 +86,7 @@ class SubVideoCardH extends StatelessWidget { Widget videoContent(context) { return Expanded( child: Stack( + clipBehavior: Clip.none, children: [ Column( crossAxisAlignment: CrossAxisAlignment.start, diff --git a/lib/pages/video/detail/introduction/pay_coins_page.dart b/lib/pages/video/detail/introduction/pay_coins_page.dart index f51fb46e..7f0037c3 100644 --- a/lib/pages/video/detail/introduction/pay_coins_page.dart +++ b/lib/pages/video/detail/introduction/pay_coins_page.dart @@ -193,6 +193,7 @@ class _PayCoinsPageState extends State Widget _buildBody(isV) => Stack( key: _key, + clipBehavior: Clip.none, alignment: Alignment.center, children: [ Visibility( @@ -268,6 +269,7 @@ class _PayCoinsPageState extends State BlendMode.srcATop, ), child: Stack( + clipBehavior: Clip.none, alignment: Alignment.center, children: [ SlideTransition( @@ -389,6 +391,7 @@ class _PayCoinsPageState extends State ], const SizedBox(height: 10), Stack( + clipBehavior: Clip.none, alignment: Alignment.centerLeft, children: [ GestureDetector( diff --git a/lib/pages/video/detail/introduction/view.dart b/lib/pages/video/detail/introduction/view.dart index 72a86e2b..1ce83b01 100644 --- a/lib/pages/video/detail/introduction/view.dart +++ b/lib/pages/video/detail/introduction/view.dart @@ -150,6 +150,7 @@ class _VideoInfoState extends State { mainAxisSize: MainAxisSize.min, children: [ Stack( + clipBehavior: Clip.none, alignment: Alignment.center, children: [ Icon( @@ -548,6 +549,7 @@ class _VideoInfoState extends State { ), const SizedBox(height: 8), Stack( + clipBehavior: Clip.none, children: [ Row( children: [ diff --git a/lib/pages/video/detail/introduction/widgets/action_item.dart b/lib/pages/video/detail/introduction/widgets/action_item.dart index f7633d06..4b81ef59 100644 --- a/lib/pages/video/detail/introduction/widgets/action_item.dart +++ b/lib/pages/video/detail/introduction/widgets/action_item.dart @@ -157,6 +157,7 @@ class ActionItemState extends State mainAxisAlignment: MainAxisAlignment.center, children: [ Stack( + clipBehavior: Clip.none, alignment: Alignment.center, children: [ if (widget.needAnim && !_hideCircle) diff --git a/lib/pages/video/detail/post_panel/post_panel.dart b/lib/pages/video/detail/post_panel/post_panel.dart index 6758e24a..57d18ba5 100644 --- a/lib/pages/video/detail/post_panel/post_panel.dart +++ b/lib/pages/video/detail/post_panel/post_panel.dart @@ -96,6 +96,7 @@ class _PostPanelState extends CommonCollapseSlidePageState { Widget buildList(ThemeData theme) { return list?.isNotEmpty == true ? Stack( + clipBehavior: Clip.none, children: [ SingleChildScrollView( controller: ScrollController(), diff --git a/lib/pages/video/detail/reply/view.dart b/lib/pages/video/detail/reply/view.dart index 70cc2530..8aca667d 100644 --- a/lib/pages/video/detail/reply/view.dart +++ b/lib/pages/video/detail/reply/view.dart @@ -104,6 +104,7 @@ class _VideoReplyPanelState extends State await _videoReplyController.onRefresh(); }, child: Stack( + clipBehavior: Clip.none, children: [ CustomScrollView( controller: widget.needController == false diff --git a/lib/pages/video/detail/reply/widgets/reply_item_grpc.dart b/lib/pages/video/detail/reply/widgets/reply_item_grpc.dart index bec448b3..9291bbd6 100644 --- a/lib/pages/video/detail/reply/widgets/reply_item_grpc.dart +++ b/lib/pages/video/detail/reply/widgets/reply_item_grpc.dart @@ -111,6 +111,7 @@ class ReplyItemGrpc extends StatelessWidget { top: 8, right: 12, child: Stack( + clipBehavior: Clip.none, alignment: Alignment.centerRight, children: [ CachedNetworkImage( @@ -1179,6 +1180,7 @@ class ReplyItemGrpc extends StatelessWidget { onTap: () => menuActionHandler('checkReply'), minLeadingWidth: 0, leading: Stack( + clipBehavior: Clip.none, alignment: Alignment.center, children: [ const Icon(Icons.shield_outlined, size: 19), diff --git a/lib/pages/video/detail/reply_reply/view.dart b/lib/pages/video/detail/reply_reply/view.dart index 9327b47b..be31a655 100644 --- a/lib/pages/video/detail/reply_reply/view.dart +++ b/lib/pages/video/detail/reply_reply/view.dart @@ -165,6 +165,7 @@ class _VideoReplyReplyPanelState }, child: Obx( () => Stack( + clipBehavior: Clip.none, children: [ ScrollablePositionedList.builder( key: _listKey, diff --git a/lib/pages/video/detail/view_v.dart b/lib/pages/video/detail/view_v.dart index 63bdbfd8..56465565 100644 --- a/lib/pages/video/detail/view_v.dart +++ b/lib/pages/video/detail/view_v.dart @@ -552,6 +552,7 @@ class _VideoDetailPageVState extends State videoDetailController.scrollCtr.offset != 0 && context.orientation == Orientation.portrait; return Stack( + clipBehavior: Clip.none, children: [ AppBar( backgroundColor: Colors.black, @@ -639,6 +640,7 @@ class _VideoDetailPageVState extends State ? animHeight : videoDetailController.videoHeight, flexibleSpace: Stack( + clipBehavior: Clip.none, children: [ Builder( builder: (context) { @@ -702,6 +704,7 @@ class _VideoDetailPageVState extends State child: SizedBox( height: kToolbarHeight, child: Stack( + clipBehavior: Clip.none, children: [ Align( alignment: Alignment.centerLeft, @@ -1182,6 +1185,7 @@ class _VideoDetailPageVState extends State ); Widget get childWhenDisabledLandscape => Stack( + clipBehavior: Clip.none, children: [ Scaffold( resizeToAvoidBottomInset: false, @@ -1261,6 +1265,7 @@ class _VideoDetailPageVState extends State () => Visibility( visible: videoDetailController.isShowCover.value, child: Stack( + clipBehavior: Clip.none, children: [ Positioned( top: 0, @@ -1634,6 +1639,7 @@ class _VideoDetailPageVState extends State MediaQuery.of(context).orientation == Orientation.portrait), onPopInvokedWithResult: _onPopInvokedWithResult, child: Stack( + clipBehavior: Clip.none, children: [ Positioned.fill(child: ColoredBox(color: Colors.black)), @@ -1860,6 +1866,7 @@ class _VideoDetailPageVState extends State ); if (videoDetailController.isPlayAll) { return Stack( + clipBehavior: Clip.none, children: [ introPanel(), Positioned( diff --git a/lib/pages/video/detail/widgets/header_control.dart b/lib/pages/video/detail/widgets/header_control.dart index 0779f308..7b07482f 100644 --- a/lib/pages/video/detail/widgets/header_control.dart +++ b/lib/pages/video/detail/widgets/header_control.dart @@ -2032,6 +2032,7 @@ class HeaderControlState extends State { ), onPressed: () => videoDetailCtr.onBlock(context), icon: Stack( + clipBehavior: Clip.none, alignment: Alignment.center, children: [ Icon( diff --git a/lib/pages/video/detail/widgets/media_list_panel.dart b/lib/pages/video/detail/widgets/media_list_panel.dart index 80ed6451..ede5a75f 100644 --- a/lib/pages/video/detail/widgets/media_list_panel.dart +++ b/lib/pages/video/detail/widgets/media_list_panel.dart @@ -179,6 +179,7 @@ class _MediaListPanelState ); }, child: Stack( + clipBehavior: Clip.none, children: [ Padding( padding: const EdgeInsets.symmetric( @@ -194,6 +195,7 @@ class _MediaListPanelState child: LayoutBuilder( builder: (context, boxConstraints) { return Stack( + clipBehavior: Clip.none, children: [ NetworkImgLayer( src: item.cover, @@ -233,6 +235,8 @@ class _MediaListPanelState const Spacer(), Text( item.upper!.name!, + maxLines: 1, + overflow: TextOverflow.ellipsis, style: TextStyle( fontSize: 12, color: theme.colorScheme.outline, @@ -265,7 +269,7 @@ class _MediaListPanelState if (showDelBtn && item.bvid != widget.getBvId()) Positioned( right: 12, - bottom: 0, + bottom: -6, child: InkWell( customBorder: const CircleBorder(), onTap: () { @@ -281,7 +285,7 @@ class _MediaListPanelState child: Icon( Icons.clear, size: 18, - color: theme.colorScheme.onSurfaceVariant, + color: theme.colorScheme.outline, ), ), ), diff --git a/lib/plugin/pl_player/view.dart b/lib/plugin/pl_player/view.dart index cdaf1fa0..cdf74e50 100644 --- a/lib/plugin/pl_player/view.dart +++ b/lib/plugin/pl_player/view.dart @@ -380,6 +380,7 @@ class _PLVideoPlayerState extends State color: Colors.white, ) : Stack( + clipBehavior: Clip.none, alignment: Alignment.center, children: [ Icon( @@ -731,6 +732,7 @@ class _PLVideoPlayerState extends State return Stack( fit: StackFit.passthrough, key: _playerKey, + clipBehavior: Clip.none, children: [ Obx( () => Video(