import 'package:stacked/stacked.dart'; import 'package:stacked_services/stacked_services.dart'; import 'package:yimaru_app/app/app.router.dart'; import 'package:yimaru_app/models/learn_program.dart'; import '../../../app/app.locator.dart'; import '../../../models/user.dart'; import '../../../services/api_service.dart'; import '../../../services/authentication_service.dart'; import '../../../services/status_checker_service.dart'; import '../../common/enmus.dart'; class LearnProgramViewModel extends ReactiveViewModel { // Dependency injection final _apiService = locator(); final _statusChecker = locator(); final _navigationService = locator(); final _authenticationService = locator(); @override List get listenableServices => [_authenticationService]; // Current user User? get _user => _authenticationService.user; User? get user => _user; // Learn programs List _learnPrograms = []; List get learnPrograms => _learnPrograms; // Navigation Future navigateToLearnCourse(int id) async => _navigationService.navigateToLearnCourseView(id: id); // Remote api call // Learn programs Future getLearnPrograms() async => await runBusyFuture(_getLearnPrograms(), busyObject: StateObjects.learnPrograms); Future _getLearnPrograms() async { if (_learnPrograms.isEmpty) { if (await _statusChecker.checkConnection()) { _learnPrograms = await _apiService.getLearnPrograms(); _learnPrograms .sort((a, b) => (a.sortOrder ?? 0).compareTo(b.sortOrder ?? 0)); } } } }