Skip to content

Commit

Permalink
feat: improved track item API and UI
Browse files Browse the repository at this point in the history
  • Loading branch information
KRTirtho committed Jun 11, 2023
1 parent 886bc80 commit 617aa89
Show file tree
Hide file tree
Showing 9 changed files with 632 additions and 564 deletions.
38 changes: 5 additions & 33 deletions lib/components/library/user_local_tracks.dart
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ import 'package:spotube/models/local_track.dart';
import 'package:spotube/provider/proxy_playlist/proxy_playlist_provider.dart';
import 'package:spotube/provider/user_preferences_provider.dart';
import 'package:spotube/utils/platform.dart';
import 'package:spotube/utils/primitive_utils.dart';
import 'package:spotube/utils/service_utils.dart';
import 'package:spotube/utils/type_conversion_utils.dart';
import 'package:flutter_rust_bridge/flutter_rust_bridge.dart' show FfiException;
Expand Down Expand Up @@ -156,7 +155,6 @@ class UserLocalTracks extends HookConsumerWidget {
Widget build(BuildContext context, ref) {
final sortBy = useState<SortBy>(SortBy.none);
final playlist = ref.watch(ProxyPlaylistNotifier.provider);
final playlistNotifier = ref.watch(ProxyPlaylistNotifier.notifier);
final trackSnapshot = ref.watch(localTracksProvider);
final isPlaylistPlaying =
playlist.containsTracks(trackSnapshot.value ?? []);
Expand Down Expand Up @@ -272,42 +270,16 @@ class UserLocalTracks extends HookConsumerWidget {
itemBuilder: (context, index) {
final track = filteredTracks[index];
return TrackTile(
playlist,
duration:
"${track.duration?.inMinutes.remainder(60)}:${PrimitiveUtils.zeroPadNumStr(track.duration?.inSeconds.remainder(60) ?? 0)}",
track: MapEntry(index, track),
isActive: playlist.activeTrack?.id == track.id,
isChecked: false,
showCheck: false,
isLocal: true,
onTrackPlayButtonPressed: (currentTrack) {
return playLocalTracks(
index: index,
track: track,
userPlaylist: false,
onTap: () {
playLocalTracks(
ref,
sortedTracks,
currentTrack: track,
);
},
actions: [
PopupMenuButton(
icon: const Icon(SpotubeIcons.moreHorizontal),
itemBuilder: (context) {
return [
PopupMenuItem(
value: "delete",
onTap: () async {
await File(track.path).delete();
ref.refresh(localTracksProvider);
},
padding: EdgeInsets.zero,
child: ListTile(
leading: const Icon(SpotubeIcons.trash),
title: Text(context.l10n.delete),
),
),
];
},
),
],
);
},
),
Expand Down
15 changes: 5 additions & 10 deletions lib/components/player/player_queue.dart
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import 'package:spotube/components/shared/track_table/track_tile.dart';
import 'package:spotube/extensions/context.dart';
import 'package:spotube/hooks/use_auto_scroll_controller.dart';
import 'package:spotube/provider/proxy_playlist/proxy_playlist_provider.dart';
import 'package:spotube/utils/primitive_utils.dart';

class PlayerQueue extends HookConsumerWidget {
final bool floating;
Expand Down Expand Up @@ -120,25 +119,21 @@ class PlayerQueue extends HookConsumerWidget {
shrinkWrap: true,
buildDefaultDragHandles: false,
itemBuilder: (context, i) {
final track = tracks.toList().asMap().entries.elementAt(i);
String duration =
"${track.value.duration?.inMinutes.remainder(60)}:${PrimitiveUtils.zeroPadNumStr(track.value.duration?.inSeconds.remainder(60) ?? 0)}";
final track = tracks.elementAt(i);
return AutoScrollTag(
key: ValueKey(i),
controller: controller,
index: i,
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 8.0),
child: TrackTile(
playlist,
index: i,
track: track,
duration: duration,
isActive: playlist.activeTrack?.id == track.value.id,
onTrackPlayButtonPressed: (currentTrack) async {
if (playlist.activeTrack?.id == track.value.id) {
onTap: () async {
if (playlist.activeTrack?.id == track.id) {
return;
}
await playlistNotifier.jumpToTrack(currentTrack);
await playlistNotifier.jumpToTrack(track);
},
leadingActions: [
ReorderableDragStartListener(
Expand Down
6 changes: 6 additions & 0 deletions lib/components/shared/hover_builder.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,22 @@ import 'package:flutter/widgets.dart';
import 'package:flutter_hooks/flutter_hooks.dart';

class HoverBuilder extends HookWidget {
final bool? permanentState;
final Widget Function(BuildContext context, bool isHovering) builder;
const HoverBuilder({
required this.builder,
this.permanentState,
Key? key,
}) : super(key: key);

@override
Widget build(BuildContext context) {
final hovering = useState(false);

if (permanentState != null) {
return builder(context, permanentState!);
}

return MouseRegion(
onEnter: (_) {
if (!hovering.value) hovering.value = true;
Expand Down

0 comments on commit 617aa89

Please sign in to comment.