import 'package:flutter/material.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 HomeViewModel extends ChangeNotifier { HomeViewModel({required BalRepository balRepository}) : _balRepository = balRepository { load = Command0(_load)..execute(); } final BalRepository _balRepository; /* * ================= * =====[ BAL ]===== * ================= */ List _bals = []; List get bals => _bals; Bal? _currentBal; Bal? get currentBal => _currentBal; Future> createBal(String name) async { final result = await _balRepository.addBal(name); switch (result) { case Ok(): final result2 = await _balRepository.getBals(); switch (result2) { case Ok(): _bals = result2.value..sort((a, b) => a.compareTo(b)); break; case Error(): debugPrint("\n\n\n\n${result2.error.toString()}\n\n\n\n"); return result2; } break; case Error(): return result; } notifyListeners(); return result; } /* * ================================= * =====[ COMMAND AND LOADING ]===== * ================================= */ late final Command0 load; bool isLoaded = false; Future> _load() async { final result2 = await _loadBal(); isLoaded = true; notifyListeners(); return result2; } Future> _loadBal() async { final result = await _balRepository.getBals(); switch (result) { case Ok(): _bals = result.value..sort((a, b) => a.compareTo(b)); _currentBal = _bals .where((bal) => bal.state == BalState.ongoing) .firstOrNull; break; case Error(): return result; } return result; } }