65 lines
1.7 KiB
Dart
65 lines
1.7 KiB
Dart
import 'package:flutter/material.dart';
|
|
|
|
import '../../domain/entities/song.dart';
|
|
import '../theming.dart';
|
|
import '../utils.dart' as utils;
|
|
|
|
class SongListTile extends StatelessWidget {
|
|
const SongListTile(
|
|
{Key key, this.song, this.onTap, this.inAlbum, this.onTapMore})
|
|
: super(key: key);
|
|
|
|
final Song song;
|
|
final bool inAlbum;
|
|
final Function onTap;
|
|
final Function onTapMore;
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
final Widget leading = inAlbum
|
|
? Center(child: Text('${song.discNumber} - ${song.trackNumber}'))
|
|
: Image(
|
|
image: utils.getAlbumImage(song.albumArtPath),
|
|
fit: BoxFit.cover,
|
|
);
|
|
|
|
final Widget subtitle = inAlbum
|
|
? Text('${song.artist}')
|
|
: Text('${song.artist} • ${song.album}');
|
|
|
|
final EdgeInsets padding = (onTapMore != null)
|
|
? const EdgeInsets.only(left: 8.0)
|
|
: const EdgeInsets.only(left: 8.0, right: 16.0);
|
|
|
|
return ListTile(
|
|
contentPadding: padding,
|
|
leading: SizedBox(
|
|
height: 56,
|
|
width: 56,
|
|
child: leading,
|
|
),
|
|
title: Text(
|
|
song.title,
|
|
),
|
|
subtitle: subtitle,
|
|
onTap: () => onTap(),
|
|
trailing: Row(
|
|
mainAxisSize: MainAxisSize.min,
|
|
children: [
|
|
if (song.blocked)
|
|
Icon(
|
|
Icons.remove_circle_outline,
|
|
size: 14.0,
|
|
color: RASPBERRY.withOpacity(0.4),
|
|
),
|
|
if (onTapMore != null)
|
|
IconButton(
|
|
icon: const Icon(Icons.more_vert),
|
|
iconSize: 20.0,
|
|
onPressed: () => onTapMore(),
|
|
),
|
|
],
|
|
),
|
|
);
|
|
}
|
|
}
|