Files
GroovyBox/lib/providers/audio_provider.dart
2025-12-20 01:01:12 +08:00

105 lines
2.2 KiB
Dart

import 'package:groovybox/logic/audio_handler.dart';
import 'package:groovybox/logic/metadata_service.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:groovybox/data/db.dart' as db;
part 'audio_provider.g.dart';
// Simple data class for current track to avoid drift type issues
class CurrentTrackData {
final int id;
final String title;
final String? artist;
final String? album;
final String path;
final String? lyrics;
final int lyricsOffset;
CurrentTrackData({
required this.id,
required this.title,
this.artist,
this.album,
required this.path,
this.lyrics,
required this.lyricsOffset,
});
factory CurrentTrackData.fromTrack(db.Track track) {
return CurrentTrackData(
id: track.id,
title: track.title,
artist: track.artist,
album: track.album,
path: track.path,
lyrics: track.lyrics,
lyricsOffset: track.lyricsOffset,
);
}
CurrentTrackData copyWith({
int? id,
String? title,
String? artist,
String? album,
String? path,
String? lyrics,
int? lyricsOffset,
}) {
return CurrentTrackData(
id: id ?? this.id,
title: title ?? this.title,
artist: artist ?? this.artist,
album: album ?? this.album,
path: path ?? this.path,
lyrics: lyrics ?? this.lyrics,
lyricsOffset: lyricsOffset ?? this.lyricsOffset,
);
}
}
// This should be set after AudioService.init in main.dart
late AudioHandler _audioHandler;
@Riverpod(keepAlive: true)
AudioHandler audioHandler(Ref ref) {
return _audioHandler;
}
// Function to set the audio handler after initialization
void setAudioHandler(AudioHandler handler) {
_audioHandler = handler;
}
@Riverpod(keepAlive: true)
class CurrentTrackNotifier extends _$CurrentTrackNotifier {
@override
CurrentTrackData? build() {
return null;
}
void setTrack(CurrentTrackData? track) {
state = track;
}
void clear() {
state = null;
}
}
@Riverpod(keepAlive: true)
class CurrentTrackMetadataNotifier extends _$CurrentTrackMetadataNotifier {
@override
TrackMetadata? build() {
return null;
}
void setMetadata(TrackMetadata metadata) {
state = metadata;
}
void clear() {
state = null;
}
}