import 'dart:async'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../modeller/film.dart'; import '../servisler/film_deposu.dart'; /// Tüm filmleri canlı izleyen Stream provider. final filmlerStreamProvider = StreamProvider>((ref) { return FilmDeposu.ornek.izle(); }); /// Tek bir filmi getirip Hive değişikliğinde tazeleyen provider. final filmProvider = FutureProvider.autoDispose.family((ref, id) async { // Hive değişikliğinde yeniden çalışır. final akis = ref.watch(filmlerStreamProvider); final hepsi = akis.maybeWhen(data: (l) => l, orElse: () => []); final eslesen = hepsi.where((f) => f.id == id).cast().firstWhere((_) => true, orElse: () => null); if (eslesen != null) return eslesen; return FilmDeposu.ornek.getir(id); }); /// Film CRUD aksiyonları için yardımcı notifier. class FilmDurumNotifier extends StateNotifier> { FilmDurumNotifier() : super(const AsyncValue.data(null)); Future kaydet(Film f) async { state = const AsyncValue.loading(); try { await FilmDeposu.ornek.kaydet(f); state = const AsyncValue.data(null); } catch (e, s) { state = AsyncValue.error(e, s); rethrow; } } Future sil(String id) async { state = const AsyncValue.loading(); try { await FilmDeposu.ornek.sil(id); state = const AsyncValue.data(null); } catch (e, s) { state = AsyncValue.error(e, s); rethrow; } } Future klonla(Film kaynak) async { final kopya = kaynak.copyWith( id: 'film_${DateTime.now().millisecondsSinceEpoch}', isim: '${kaynak.isim} (Kopya)', olusturma: DateTime.now(), guncelleme: DateTime.now(), finalCiktiYolu: null, ); await kaydet(kopya); return kopya; } } final filmDurumuProvider = StateNotifierProvider>( (ref) => FilmDurumNotifier(), );