schleifchenturnier_25/lib/features/tournament/presentation/provider/player_provider.dart
MarcWieland e636f282ee init
2025-12-10 22:51:28 +01:00

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();
}
}