Files
dailyou/lib/core/providers/model_download_provider.dart
T

39 lines
1.3 KiB
Dart
Raw Normal View History

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<bool>((ref) {
return ModelDownloadService().isModelPresent();
});
// ── Download notifier — streams progress and marks completion ─────────────────
class ModelDownloadNotifier extends Notifier<AsyncValue<double>> {
@override
AsyncValue<double> build() => const AsyncData(0.0);
Future<void> 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, AsyncValue<double>>(
ModelDownloadNotifier.new);