refactor(mobile): unify padding metrics in thumbnail tile widget

This commit is contained in:
idubnori
2025-12-19 01:40:46 +09:00
parent 501617ba93
commit c90c7a56ce
@@ -80,10 +80,7 @@ class ThumbnailTile extends ConsumerWidget {
Align( Align(
alignment: Alignment.topRight, alignment: Alignment.topRight,
child: Padding( child: Padding(
padding: EdgeInsets.symmetric( padding: EdgeInsets.symmetric(horizontal: metrics.padding, vertical: metrics.padding),
horizontal: metrics.horizontalPadding,
vertical: metrics.verticalPadding,
),
child: Row( child: Row(
mainAxisAlignment: MainAxisAlignment.end, mainAxisAlignment: MainAxisAlignment.end,
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,
@@ -97,10 +94,7 @@ class ThumbnailTile extends ConsumerWidget {
Align( Align(
alignment: Alignment.bottomCenter, alignment: Alignment.bottomCenter,
child: Padding( child: Padding(
padding: EdgeInsets.symmetric( padding: EdgeInsets.symmetric(horizontal: metrics.padding, vertical: metrics.padding),
horizontal: metrics.horizontalPadding,
vertical: metrics.verticalPadding,
),
child: Row( child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,
@@ -301,16 +295,14 @@ class _OwnerNameLabel extends StatelessWidget {
} }
class _OverlayMetrics { class _OverlayMetrics {
final double horizontalPadding; final double padding;
final double verticalPadding;
final double iconSize; final double iconSize;
final double fontSize; final double fontSize;
final double iconSpacing; final double iconSpacing;
final double blurRadius; final double blurRadius;
const _OverlayMetrics({ const _OverlayMetrics({
required this.horizontalPadding, required this.padding,
required this.verticalPadding,
required this.iconSize, required this.iconSize,
required this.fontSize, required this.fontSize,
required this.iconSpacing, required this.iconSpacing,
@@ -318,45 +310,15 @@ class _OverlayMetrics {
}); });
factory _OverlayMetrics.fromConstraints(BoxConstraints constraints) { factory _OverlayMetrics.fromConstraints(BoxConstraints constraints) {
final tileSize = constraints.maxWidth; const baseSize = 120.0;
final scale = (constraints.maxWidth / baseSize).clamp(0.5, 2.0);
if (tileSize < 80) { return _OverlayMetrics(
return const _OverlayMetrics( padding: (2.0 * scale).clamp(1.0, 4.0),
horizontalPadding: 1.0, iconSize: (16.0 * scale).clamp(14.0, 20.0),
verticalPadding: 1.0, fontSize: (12.0 * scale).clamp(11.0, 14.0),
iconSize: 14, iconSpacing: (2.0 * scale).clamp(1.0, 4.0),
fontSize: 11, blurRadius: (5.0 * scale).clamp(3.0, 7.0),
iconSpacing: 1.0,
blurRadius: 3.0,
);
}
if (tileSize < 120) {
return const _OverlayMetrics(
horizontalPadding: 2.0,
verticalPadding: 2.0,
iconSize: 16,
fontSize: 12,
iconSpacing: 2.0,
blurRadius: 5.0,
);
}
if (tileSize < 180) {
return const _OverlayMetrics(
horizontalPadding: 3.0,
verticalPadding: 3.0,
iconSize: 18,
fontSize: 13,
iconSpacing: 3.0,
blurRadius: 6.0,
);
}
return const _OverlayMetrics(
horizontalPadding: 4.0,
verticalPadding: 4.0,
iconSize: 20,
fontSize: 14,
iconSpacing: 4.0,
blurRadius: 7.0,
); );
} }
} }