Files
sendico/frontend/pweb/lib/providers/wallets.dart
2025-11-13 15:06:15 +03:00

126 lines
3.0 KiB
Dart

import 'package:flutter/material.dart';
import 'package:pweb/models/wallet.dart';
import 'package:pweb/services/wallets.dart';
class WalletsProvider with ChangeNotifier {
final WalletsService _service;
WalletsProvider(this._service);
List<Wallet>? _wallets;
bool _isLoading = false;
String? _error;
Wallet? _selectedWallet;
bool _isHidden = true;
List<Wallet>? get wallets => _wallets;
bool get isLoading => _isLoading;
String? get error => _error;
Wallet? get selectedWallet => _selectedWallet;
bool get isHidden => _isHidden;
void selectWallet(Wallet wallet) {
_selectedWallet = wallet;
notifyListeners();
}
Future<void> loadData() async {
_isLoading = true;
_error = null;
notifyListeners();
try {
_wallets = await _service.getWallets();
} catch (e) {
_error = e.toString();
} finally {
_isLoading = false;
notifyListeners();
}
}
Future<Wallet?> getWalletById(String walletId) async {
_isLoading = true;
_error = null;
notifyListeners();
try {
final wallet = await _service.getWallet(walletId);
return wallet;
} catch (e) {
_error = e.toString();
return null;
} finally {
_isLoading = false;
notifyListeners();
}
}
void updateName(String walletRef, String newName) {
final index = _wallets?.indexWhere((w) => w.id == walletRef);
if (index != null && index >= 0) {
_wallets![index] = _wallets![index].copyWith(name: newName);
notifyListeners();
}
}
void updateBalance(String walletRef, double newBalance) {
final index = _wallets?.indexWhere((w) => w.id == walletRef);
if (index != null && index >= 0) {
_wallets![index] = _wallets![index].copyWith(balance: newBalance);
notifyListeners();
}
}
Future<void> updateWallet(Wallet wallet) async {
try {
await _service.updateWallet();
final index = _wallets?.indexWhere((w) => w.id == wallet.id);
if (index != null && index >= 0) {
_wallets![index] = wallet;
notifyListeners();
}
} catch (e) {
_error = e.toString();
notifyListeners();
}
}
Future<void> addWallet(Wallet wallet) async {
try {
final newWallet = await _service.createWallet(); // Pass the wallet parameter
_wallets = [...?_wallets, ]; // Add the new wallet
notifyListeners();
} catch (e) {
_error = e.toString();
notifyListeners();
}
}
Future<void> deleteWallet(String walletId) async {
try {
await _service.deleteWallet(); // Pass the walletId parameter
_wallets?.removeWhere((w) => w.id == walletId);
notifyListeners();
} catch (e) {
_error = e.toString();
notifyListeners();
}
}
void toggleVisibility(String walletId) {
final index = _wallets?.indexWhere((w) => w.id == walletId);
if (index != null && index >= 0) {
final wallet = _wallets![index];
_wallets![index] = wallet.copyWith(isHidden: !wallet.isHidden);
notifyListeners();
}
}
}