import 'package:flutter/widgets.dart'; import 'package:mobile_scanner/mobile_scanner.dart'; import 'package:seshat/data/repositories/bal_repository.dart'; import 'package:seshat/domain/models/bal.dart'; import 'package:seshat/domain/models/book_instance.dart'; import 'package:seshat/utils/command.dart'; import 'package:seshat/utils/result.dart'; class SellViewModel extends ChangeNotifier { SellViewModel({required BalRepository balRepository}) : _balRepository = balRepository { load = Command0(_load)..execute(); } final BalRepository _balRepository; bool _showScan = false; bool get showScan => _showScan; set showScan(bool newValue) { _showScan = newValue; notifyListeners(); } /* * =============================== * =====[ BOOKS & INSTANCES ]===== * =============================== */ final List _scannedBooks = []; List get scannedBooks => _scannedBooks; void scanBook(BarcodeCapture barcode) { final addedBook = BookInstance( balId: 5, bookId: 5, id: _scannedBooks.length, ownerId: 5, price: 5, available: true, ); _scannedBooks.add(addedBook); notifyListeners(); } void sendSell() { _scannedBooks.clear(); notifyListeners(); } void deleteBook(int id) { _scannedBooks.removeWhere((book) => book.id == id); notifyListeners(); } /* * ================= * =====[ BAL ]===== * ================= */ Bal? _currentBal; get currentBal => _currentBal; /* * ================================= * =====[ COMMAND AND LOADING ]===== * ================================= */ late final Command0 load; bool isLoaded = false; Future> _load() async { final result1 = await _loadBal(); switch (result1) { case Ok(): isLoaded = true; break; default: break; } notifyListeners(); return result1; } Future> _loadBal() async { final result = await _balRepository.getBals(); switch (result) { case Ok(): _currentBal = result.value .where((bal) => bal.state == BalState.ongoing) .firstOrNull; break; case Error(): break; } return result; } }