import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../llm/model_download_service.dart'; import 'settings_provider.dart'; // ── Is the model file present on disk? ─────────────────────────────────────── final modelPresentProvider = FutureProvider((ref) { return ModelDownloadService().isModelPresent(); }); // ── Download notifier — streams progress and marks completion ───────────────── class ModelDownloadNotifier extends Notifier> { @override AsyncValue build() => const AsyncData(0.0); Future startDownload() async { state = const AsyncData(0.0); try { await for (final progress in ModelDownloadService().download()) { if (!ref.mounted) return; state = AsyncData(progress); } if (!ref.mounted) return; await ref.read(settingsNotifierProvider.notifier).markModelDownloaded(); ref.invalidate(modelPresentProvider); } catch (e, st) { if (!ref.mounted) return; state = AsyncError(e, st); } } void reset() => state = const AsyncData(0.0); } final modelDownloadNotifierProvider = NotifierProvider>( ModelDownloadNotifier.new);