opt: btn, stack

Closes #775

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2025-04-29 21:53:20 +08:00
parent 4abffeed32
commit b4ca42e0c0
55 changed files with 243 additions and 158 deletions

View File

@@ -28,6 +28,7 @@ void imageSaveDialog({
mainAxisSize: MainAxisSize.min,
children: [
Stack(
clipBehavior: Clip.none,
children: [
GestureDetector(
onTap: SmartDialog.dismiss,

View File

@@ -138,6 +138,7 @@ Widget imageView(
}
},
child: Stack(
clipBehavior: Clip.none,
alignment: Alignment.center,
children: [
ClipRRect(

View File

@@ -276,6 +276,7 @@ class _InteractiveviewerGalleryState extends State<InteractiveviewerGallery>
@override
Widget build(BuildContext context) {
return Stack(
clipBehavior: Clip.none,
children: [
InteractiveViewerBoundary(
controller: _transformationController,
@@ -344,6 +345,7 @@ class _InteractiveviewerGalleryState extends State<InteractiveviewerGallery>
)
: null,
child: Stack(
clipBehavior: Clip.none,
alignment: Alignment.center,
children: [
Align(

View File

@@ -172,6 +172,7 @@ class _NineGridViewState extends State<NineGridView> {
)));
}
return Stack(
clipBehavior: Clip.none,
children: list,
);
}
@@ -260,6 +261,7 @@ class _NineGridViewState extends State<NineGridView> {
)));
}
return Stack(
clipBehavior: Clip.none,
children: list,
);
}
@@ -286,6 +288,7 @@ class _NineGridViewState extends State<NineGridView> {
}
return ClipOval(
child: Stack(
clipBehavior: Clip.none,
children: children,
),
);
@@ -372,7 +375,10 @@ class _NineGridViewState extends State<NineGridView> {
children.add(child);
}
return Stack(children: children);
return Stack(
clipBehavior: Clip.none,
children: children,
);
}
/// double is zero.

View File

@@ -598,6 +598,7 @@ class RefreshIndicatorState extends State<RefreshIndicator>
_mode == _RefreshIndicatorMode.done;
return Stack(
clipBehavior: Clip.none,
children: <Widget>[
child,
if (_mode != null)

View File

@@ -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,

View File

@@ -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,

View File

@@ -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) {

View File

@@ -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,

View File

@@ -34,6 +34,7 @@ class VideoCustomActions {
videoItem.bvid!,
'copy',
Stack(
clipBehavior: Clip.none,
children: [
Icon(MdiIcons.identifier, size: 16),
Icon(MdiIcons.circleOutline, size: 16),