107 lines
3.0 KiB
Dart
107 lines
3.0 KiB
Dart
|
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|||
|
|
import '../models/learning_progress_model.dart';
|
|||
|
|
import '../services/learning_progress_service.dart';
|
|||
|
|
|
|||
|
|
/// 学习进度状态
|
|||
|
|
class LearningProgressState {
|
|||
|
|
final List<LearningProgress> progressList;
|
|||
|
|
final bool isLoading;
|
|||
|
|
final String? error;
|
|||
|
|
|
|||
|
|
LearningProgressState({
|
|||
|
|
this.progressList = const [],
|
|||
|
|
this.isLoading = false,
|
|||
|
|
this.error,
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
LearningProgressState copyWith({
|
|||
|
|
List<LearningProgress>? progressList,
|
|||
|
|
bool? isLoading,
|
|||
|
|
String? error,
|
|||
|
|
}) {
|
|||
|
|
return LearningProgressState(
|
|||
|
|
progressList: progressList ?? this.progressList,
|
|||
|
|
isLoading: isLoading ?? this.isLoading,
|
|||
|
|
error: error,
|
|||
|
|
);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// 学习进度Notifier
|
|||
|
|
class LearningProgressNotifier extends StateNotifier<LearningProgressState> {
|
|||
|
|
final LearningProgressService _service = LearningProgressService();
|
|||
|
|
|
|||
|
|
LearningProgressNotifier() : super(LearningProgressState());
|
|||
|
|
|
|||
|
|
/// 加载学习进度
|
|||
|
|
Future<void> 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<void> 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<LearningProgressNotifier, LearningProgressState>(
|
|||
|
|
(ref) => LearningProgressNotifier(),
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
/// 学习进度列表Provider(便捷访问)
|
|||
|
|
final learningProgressListProvider = Provider<List<LearningProgress>>((ref) {
|
|||
|
|
return ref.watch(learningProgressProvider).progressList;
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
/// 学习进度加载状态Provider
|
|||
|
|
final learningProgressLoadingProvider = Provider<bool>((ref) {
|
|||
|
|
return ref.watch(learningProgressProvider).isLoading;
|
|||
|
|
});
|