Files
Redesnigned-Finamp/lib/components/MusicScreen/album_item_list_tile.dart
T
Zakaria 9eb6b5237c
Build / Build for Android (push) Has been cancelled
Build / Build for iOS (push) Has been cancelled
redesign app phase 3
2026-05-19 16:41:18 -04:00

86 lines
2.9 KiB
Dart

import 'package:flutter/material.dart';
import 'package:finamp/l10n/app_localizations.dart';
import 'package:get_it/get_it.dart';
import '../../models/jellyfin_models.dart';
import '../../services/jellyfin_api_helper.dart';
import '../../services/generate_subtitle.dart';
import '../album_image.dart';
/// ListTile content for AlbumItem. You probably shouldn't use this widget
/// directly, use AlbumItem instead.
class AlbumItemListTile extends StatelessWidget {
const AlbumItemListTile({
Key? key,
required this.item,
this.parentType,
this.onTap,
}) : super(key: key);
final BaseItemDto item;
final String? parentType;
final void Function()? onTap;
@override
Widget build(BuildContext context) {
final jellyfinApiHelper = GetIt.instance<JellyfinApiHelper>();
final subtitle = generateSubtitle(item, parentType, context);
final colorScheme = Theme.of(context).colorScheme;
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 5),
child: Material(
color: colorScheme.surfaceVariant.withOpacity(0.42),
borderRadius: BorderRadius.circular(22),
clipBehavior: Clip.antiAlias,
child: DecoratedBox(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(22),
border: Border.all(
color: colorScheme.outlineVariant.withOpacity(0.24),
),
),
child: ListTile(
// This widget is used on the add to playlist screen, so we allow a
// custom onTap to be passed as an argument.
onTap: onTap,
contentPadding: const EdgeInsets.symmetric(
horizontal: 12,
vertical: 8,
),
leading: SizedBox.square(
dimension: 62,
child: ClipRRect(
borderRadius: BorderRadius.circular(18),
child: AlbumImage(item: item),
),
),
title: Text(
item.name ?? AppLocalizations.of(context)!.unknownName,
overflow: TextOverflow.ellipsis,
style: Theme.of(context).textTheme.titleMedium?.copyWith(
fontWeight: FontWeight.w800,
color: colorScheme.onSurface,
),
),
subtitle: subtitle == null
? null
: Text(
subtitle,
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: TextStyle(color: colorScheme.onSurfaceVariant),
),
trailing: jellyfinApiHelper.selectedMixAlbumIds.contains(item.id)
? Icon(Icons.explore_rounded, color: colorScheme.primary)
: Icon(
Icons.chevron_right_rounded,
color: colorScheme.onSurfaceVariant,
),
),
),
),
);
}
}