mirror of
https://github.com/zarzet/SpotiFLAC-Mobile.git
synced 2026-09-29 21:02:09 +02:00
65 lines
1.7 KiB
Dart
65 lines
1.7 KiB
Dart
import 'dart:io';
|
|
|
|
import 'package:cached_network_image/cached_network_image.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:path/path.dart' as p;
|
|
import 'package:spotiflac_android/services/cover_cache_manager.dart';
|
|
|
|
class PlayerArtwork extends StatelessWidget {
|
|
/// An HTTP(S) URL, file URI, or absolute local artwork path.
|
|
final String? artUri;
|
|
final ColorScheme colorScheme;
|
|
final int? cacheWidth;
|
|
final double iconSize;
|
|
|
|
const PlayerArtwork({
|
|
super.key,
|
|
required this.artUri,
|
|
required this.colorScheme,
|
|
this.cacheWidth,
|
|
this.iconSize = 40,
|
|
});
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
final placeholder = Container(
|
|
color: colorScheme.surfaceContainerHighest,
|
|
child: Icon(
|
|
Icons.music_note,
|
|
size: iconSize,
|
|
color: colorScheme.onSurfaceVariant,
|
|
),
|
|
);
|
|
|
|
final uri = artUri;
|
|
if (uri == null || uri.isEmpty) return placeholder;
|
|
|
|
if (uri.startsWith('http')) {
|
|
return CachedNetworkImage(
|
|
imageUrl: uri,
|
|
fit: BoxFit.cover,
|
|
cacheManager: CoverCacheManager.instance,
|
|
memCacheWidth: cacheWidth,
|
|
fadeInDuration: Duration.zero,
|
|
fadeOutDuration: const Duration(milliseconds: 0),
|
|
useOldImageOnUrlChange: true,
|
|
placeholder: (_, _) => placeholder,
|
|
errorWidget: (_, _, _) => placeholder,
|
|
);
|
|
}
|
|
if (uri.startsWith('file://') || p.isAbsolute(uri)) {
|
|
final path = uri.startsWith('file://')
|
|
? Uri.parse(uri).toFilePath()
|
|
: uri;
|
|
return Image.file(
|
|
File(path),
|
|
fit: BoxFit.cover,
|
|
cacheWidth: cacheWidth,
|
|
gaplessPlayback: true,
|
|
errorBuilder: (_, _, _) => placeholder,
|
|
);
|
|
}
|
|
return placeholder;
|
|
}
|
|
}
|