extract kCardBorderRadius constant for card thumbnails

Replace 13 occurrences of BorderRadius.all(Radius.circular(8)) with a
shared kCardBorderRadius constant in constants.dart. All uses represent
the same design token: card/thumbnail corner radius across stream cards,
category cards, and their skeleton loader placeholders.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Tommy Chow
2026-03-01 19:01:58 -08:00
parent 96bce87a0e
commit 2e9d0bd16a
6 changed files with 21 additions and 15 deletions

View File

@@ -42,6 +42,9 @@ final regexLink = RegExp(
caseSensitive: false,
);
/// Standard corner radius for card thumbnails and box art.
const kCardBorderRadius = BorderRadius.all(Radius.circular(8));
/// The default badge width and height.
const defaultBadgeSize = 18.0;

View File

@@ -2,6 +2,7 @@ import 'dart:math';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:frosty/constants.dart';
import 'package:frosty/models/stream.dart';
import 'package:frosty/screens/channel/channel.dart';
import 'package:frosty/screens/channel/video/stream_info_bar.dart';
@@ -47,7 +48,7 @@ class LargeStreamCard extends StatelessWidget {
final thumbnail = SizedBox(
width: double.infinity,
child: ClipRRect(
borderRadius: const BorderRadius.all(Radius.circular(8)),
borderRadius: kCardBorderRadius,
child: AspectRatio(
aspectRatio: 16 / 9,
child: FrostyCachedNetworkImage(
@@ -57,7 +58,7 @@ class LargeStreamCard extends StatelessWidget {
),
cacheKey: cacheKey,
placeholder: (context, url) => const SkeletonLoader(
borderRadius: BorderRadius.all(Radius.circular(8)),
borderRadius: kCardBorderRadius,
),
useOldImageOnUrlChange: true,
),

View File

@@ -2,6 +2,7 @@ import 'dart:math';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:frosty/constants.dart';
import 'package:frosty/models/stream.dart';
import 'package:frosty/screens/channel/channel.dart';
import 'package:frosty/screens/home/top/categories/category_streams.dart';
@@ -59,7 +60,7 @@ class StreamCard extends StatelessWidget {
),
cacheKey: cacheKey,
placeholder: (context, url) => const SkeletonLoader(
borderRadius: BorderRadius.all(Radius.circular(8)),
borderRadius: kCardBorderRadius,
),
useOldImageOnUrlChange: true,
),
@@ -80,7 +81,7 @@ class StreamCard extends StatelessWidget {
final fontColor = DefaultTextStyle.of(context).style.color;
final imageSection = ClipRRect(
borderRadius: const BorderRadius.all(Radius.circular(8)),
borderRadius: kCardBorderRadius,
child: Stack(
alignment: AlignmentDirectional.bottomEnd,
children: [

View File

@@ -1,4 +1,5 @@
import 'package:flutter/material.dart';
import 'package:frosty/constants.dart';
import 'package:frosty/models/category.dart';
import 'package:frosty/screens/home/top/categories/category_streams.dart';
import 'package:frosty/widgets/frosty_cached_network_image.dart';
@@ -45,7 +46,7 @@ class CategoryCard extends StatelessWidget {
SizedBox(
width: 80,
child: ClipRRect(
borderRadius: const BorderRadius.all(Radius.circular(8)),
borderRadius: kCardBorderRadius,
child: AspectRatio(
aspectRatio: 3 / 4,
child: FrostyCachedNetworkImage(
@@ -55,7 +56,7 @@ class CategoryCard extends StatelessWidget {
'${artWidth}x$artHeight.jpg',
),
placeholder: (context, url) => const SkeletonLoader(
borderRadius: BorderRadius.all(Radius.circular(8)),
borderRadius: kCardBorderRadius,
),
),
),

View File

@@ -1,6 +1,7 @@
import 'package:flutter/material.dart';
import 'package:flutter_mobx/flutter_mobx.dart';
import 'package:frosty/apis/twitch_api.dart';
import 'package:frosty/constants.dart';
import 'package:frosty/screens/home/stream_list/stream_list_store.dart';
import 'package:frosty/screens/home/stream_list/streams_list.dart';
import 'package:frosty/screens/settings/stores/auth_store.dart';
@@ -110,9 +111,7 @@ class _CategoryStreamsState extends State<CategoryStreams> {
child: AspectRatio(
aspectRatio: 3 / 4,
child: SkeletonLoader(
borderRadius: BorderRadius.all(
Radius.circular(8),
),
borderRadius: kCardBorderRadius,
),
),
),
@@ -180,7 +179,7 @@ class _TransparentCategoryCard extends StatelessWidget {
SizedBox(
width: 80,
child: ClipRRect(
borderRadius: const BorderRadius.all(Radius.circular(8)),
borderRadius: kCardBorderRadius,
child: AspectRatio(
aspectRatio: 3 / 4,
child: FrostyCachedNetworkImage(
@@ -190,7 +189,7 @@ class _TransparentCategoryCard extends StatelessWidget {
'${artWidth}x$artHeight.jpg',
),
placeholder: (context, url) => const SkeletonLoader(
borderRadius: BorderRadius.all(Radius.circular(8)),
borderRadius: kCardBorderRadius,
),
fit: BoxFit.cover,
),

View File

@@ -1,6 +1,7 @@
import 'dart:math';
import 'package:flutter/material.dart';
import 'package:frosty/constants.dart';
/// A skeleton loading widget that displays a pulsing placeholder
class SkeletonLoader extends StatefulWidget {
@@ -152,7 +153,7 @@ class CategorySkeletonLoader extends StatelessWidget {
child: AspectRatio(
aspectRatio: 3 / 4,
child: const SkeletonLoader(
borderRadius: BorderRadius.all(Radius.circular(8)),
borderRadius: kCardBorderRadius,
),
),
),
@@ -198,7 +199,7 @@ class StreamCardSkeletonLoader extends StatelessWidget {
child: AspectRatio(
aspectRatio: 16 / 9,
child: const SkeletonLoader(
borderRadius: BorderRadius.all(Radius.circular(8)),
borderRadius: kCardBorderRadius,
),
),
),
@@ -391,11 +392,11 @@ class LargeStreamCardSkeletonLoader extends StatelessWidget {
SizedBox(
width: double.infinity,
child: ClipRRect(
borderRadius: const BorderRadius.all(Radius.circular(8)),
borderRadius: kCardBorderRadius,
child: AspectRatio(
aspectRatio: 16 / 9,
child: const SkeletonLoader(
borderRadius: BorderRadius.all(Radius.circular(8)),
borderRadius: kCardBorderRadius,
),
),
),