import 'package:flutter/widgets.dart'; import 'package:seshat/data/repositories/bal_repository.dart'; import 'package:seshat/domain/models/bal.dart'; import 'package:seshat/utils/command.dart'; import 'package:seshat/utils/result.dart'; class BalViewModel extends ChangeNotifier { BalViewModel({required BalRepository balRepository, required this.id}) : _balRepository = balRepository { load = Command0(_load)..execute(); } final BalRepository _balRepository; Bal? _bal; int? id; Bal? get bal => _bal; bool isABalOngoing = false; Future> stopBal(int id) async { final result = await _balRepository.stopBal(id); switch (result) { case Ok(): _bal = result.value; notifyListeners(); break; default: } return result; } Future> startBal(int id) async { if (isABalOngoing) { return Result.error(Exception("Cannot have multiple BALs ongoing !")); } final result = await _balRepository.startBal(id); switch (result) { case Ok(): _bal = result.value; notifyListeners(); break; default: } return result; } Future> editBal( int id, String name, DateTime start, DateTime end, ) async { final result = await _balRepository.editBal(id, name, start, end); switch (result) { case Ok(): debugPrint("\n\n\n\nDID EDIT\n\n\n\n"); _bal = result.value; notifyListeners(); break; case Error(): debugPrint("\n\n\n\nERROR: ${result.error}"); break; } return result; } /* * ================================= * =====[ COMMAND AND LOADING ]===== * ================================= */ late final Command0 load; bool isLoaded = false; Future> _load() async { isABalOngoing = _balRepository.isABalOngoing(); final result1 = await _loadBal(); switch (result1) { case Ok(): isLoaded = true; break; default: break; } notifyListeners(); return result1; } Future> _loadBal() async { if (id == null) { return Result.error(Exception("No id given")); } final result = await _balRepository.balById(id!); switch (result) { case Ok(): _bal = result.value; break; case Error(): break; } return result; } }