71 lines
1.9 KiB
Dart
71 lines
1.9 KiB
Dart
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|
import 'package:hive_flutter/hive_flutter.dart';
|
|
import '../../data/models/player_model.dart';
|
|
import 'package:uuid/uuid.dart';
|
|
|
|
// Provider für die Hive-Box
|
|
final playerBoxProvider = Provider<Box<PlayerModel>>((ref) {
|
|
return Hive.box<PlayerModel>('players');
|
|
});
|
|
|
|
// Provider für die Liste aller Players (live aktualisiert)
|
|
final playerListProvider = StateNotifierProvider<PlayerNotifier, List<PlayerModel>>((ref) {
|
|
final box = ref.watch(playerBoxProvider);
|
|
return PlayerNotifier(box);
|
|
});
|
|
|
|
class PlayerNotifier extends StateNotifier<List<PlayerModel>> {
|
|
PlayerNotifier(this.box) : super(box.values.toList()) {
|
|
// Listener für automatische Updates, falls von außen geändert
|
|
box.watch().listen((_) {
|
|
state = box.values.toList();
|
|
});
|
|
}
|
|
|
|
final Box<PlayerModel> box;
|
|
|
|
// Spieler hinzufügen
|
|
Future<void> addPlayer({
|
|
required String name,
|
|
required Gender gender,
|
|
required SkillLevel skillLevel,
|
|
required List<Position> positions,
|
|
}) async {
|
|
final newPlayer = PlayerModel(
|
|
id: const Uuid().v4(),
|
|
name: name,
|
|
gender: gender,
|
|
skillLevel: skillLevel,
|
|
positions: positions,
|
|
);
|
|
await box.put(newPlayer.id, newPlayer);
|
|
state = box.values.toList(); // Update state
|
|
}
|
|
|
|
// Spieler aktualisieren
|
|
Future<void> updatePlayer(PlayerModel updatedPlayer) async {
|
|
await updatedPlayer.save();
|
|
state = box.values.toList();
|
|
}
|
|
|
|
// Spieler löschen
|
|
Future<void> deletePlayer(PlayerModel player) async {
|
|
await player.delete();
|
|
state = box.values.toList();
|
|
}
|
|
|
|
// Alle löschen (z.B. für neues Turnier)
|
|
Future<void> clearAll() async {
|
|
await box.clear();
|
|
state = [];
|
|
}
|
|
|
|
|
|
void awardWinToPlayers(List<PlayerModel> winners){
|
|
for(final player in winners){
|
|
player.wins += 1;
|
|
player.save();
|
|
}
|
|
state = box.values.toList();
|
|
}
|
|
} |