fluffychat/lib/pangea/course_creation/course_search_provider.dart
ggurdin 3ed4add04e
feat: new onboarding flow (#4112)
* feat: new onboarding flow

* go to course details page on click course template in setup page

* update route redirects

* style tweaks
2025-09-25 11:09:55 -04:00

63 lines
1.7 KiB
Dart

import 'package:flutter/material.dart';
import 'package:fluffychat/pangea/course_plans/course_plan_model.dart';
import 'package:fluffychat/pangea/course_plans/course_plans_repo.dart';
import 'package:fluffychat/pangea/learning_settings/enums/language_level_type_enum.dart';
import 'package:fluffychat/pangea/learning_settings/models/language_model.dart';
mixin CourseSearchProvider<T extends StatefulWidget> on State<T> {
bool loading = true;
Object? error;
List<CoursePlanModel> courses = [];
LanguageLevelTypeEnum? languageLevelFilter;
LanguageModel? instructionLanguageFilter;
LanguageModel? targetLanguageFilter;
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback(
(_) => _loadCourses(),
);
}
CourseFilter get _filter {
return CourseFilter(
targetLanguage: targetLanguageFilter,
languageOfInstructions: instructionLanguageFilter,
cefrLevel: languageLevelFilter,
);
}
void setLanguageLevelFilter(LanguageLevelTypeEnum? level) {
languageLevelFilter = level;
_loadCourses();
}
void setInstructionLanguageFilter(LanguageModel? language) {
instructionLanguageFilter = language;
_loadCourses();
}
void setTargetLanguageFilter(LanguageModel? language) {
targetLanguageFilter = language;
_loadCourses();
}
Future<void> _loadCourses() async {
try {
setState(() {
loading = true;
error = null;
});
courses = await CoursePlansRepo.search(filter: _filter);
} catch (e, s) {
debugPrint("Failed to load courses: $e\n$s");
error = e;
} finally {
if (mounted) setState(() => loading = false);
}
}
}