import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../models/learning_progress_model.dart'; import '../services/learning_progress_service.dart'; /// 学习进度状态 class LearningProgressState { final List progressList; final bool isLoading; final String? error; LearningProgressState({ this.progressList = const [], this.isLoading = false, this.error, }); LearningProgressState copyWith({ List? progressList, bool? isLoading, String? error, }) { return LearningProgressState( progressList: progressList ?? this.progressList, isLoading: isLoading ?? this.isLoading, error: error, ); } } /// 学习进度Notifier class LearningProgressNotifier extends StateNotifier { final LearningProgressService _service = LearningProgressService(); LearningProgressNotifier() : super(LearningProgressState()); /// 加载学习进度 Future loadLearningProgress() async { state = state.copyWith(isLoading: true, error: null); try { final response = await _service.getUserLearningProgress(); if (response.success && response.data != null) { state = state.copyWith( progressList: response.data!, isLoading: false, ); } else { state = state.copyWith( isLoading: false, error: response.message, ); } } catch (e) { state = state.copyWith( isLoading: false, error: '加载学习进度失败: $e', ); } } /// 刷新学习进度(强制重新加载,不使用缓存) Future refreshLearningProgress() async { state = state.copyWith(isLoading: true, error: null); try { // 强制重新加载,传入不同的时间戳来绕过缓存 final response = await _service.getUserLearningProgress(); if (response.success && response.data != null) { print('=== 刷新学习进度成功 ==='); print('数据条数: ${response.data!.length}'); state = state.copyWith( progressList: response.data!, isLoading: false, ); } else { state = state.copyWith( isLoading: false, error: response.message, ); } } catch (e) { print('刷新学习进度失败: $e'); state = state.copyWith( isLoading: false, error: '刷新学习进度失败: $e', ); } } } /// 学习进度Provider final learningProgressProvider = StateNotifierProvider( (ref) => LearningProgressNotifier(), ); /// 学习进度列表Provider(便捷访问) final learningProgressListProvider = Provider>((ref) { return ref.watch(learningProgressProvider).progressList; }); /// 学习进度加载状态Provider final learningProgressLoadingProvider = Provider((ref) { return ref.watch(learningProgressProvider).isLoading; });