84 lines
1.8 KiB
Dart
84 lines
1.8 KiB
Dart
import 'package:flutter/foundation.dart';
|
|
import '../data/interface/IRepository.dart';
|
|
import '../models/worker.dart';
|
|
|
|
class WorkerProvider extends ChangeNotifier {
|
|
final Repository<Worker> _repository;
|
|
List<Worker> _workers = [];
|
|
bool _isLoading = false;
|
|
String? _error;
|
|
|
|
WorkerProvider(this._repository);
|
|
|
|
List<Worker> get workers => _workers;
|
|
bool get isLoading => _isLoading;
|
|
String? get error => _error;
|
|
|
|
Future<void> loadWorkers() async {
|
|
_isLoading = true;
|
|
_error = null;
|
|
notifyListeners();
|
|
|
|
try {
|
|
_workers = await _repository.load();
|
|
} catch (e) {
|
|
_error = e.toString();
|
|
} finally {
|
|
_isLoading = false;
|
|
notifyListeners();
|
|
}
|
|
}
|
|
|
|
Future<void> addWorker(Worker worker) async {
|
|
_isLoading = true;
|
|
_error = null;
|
|
notifyListeners();
|
|
|
|
try {
|
|
final newWorker = await _repository.add(worker);
|
|
_workers.add(newWorker);
|
|
} catch (e) {
|
|
_error = e.toString();
|
|
} finally {
|
|
_isLoading = false;
|
|
notifyListeners();
|
|
}
|
|
}
|
|
|
|
Future<void> updateWorker(Worker worker) async {
|
|
_isLoading = true;
|
|
_error = null;
|
|
notifyListeners();
|
|
|
|
try {
|
|
await _repository.update(worker);
|
|
final index = _workers.indexWhere((w) => w.id == worker.id);
|
|
if (index != -1) {
|
|
_workers[index] = worker;
|
|
}
|
|
} catch (e) {
|
|
_error = e.toString();
|
|
} finally {
|
|
_isLoading = false;
|
|
notifyListeners();
|
|
}
|
|
}
|
|
|
|
Future<void> deleteWorker(String? id) async {
|
|
if (id == null) return;
|
|
|
|
_isLoading = true;
|
|
_error = null;
|
|
notifyListeners();
|
|
|
|
try {
|
|
await _repository.delete(id);
|
|
_workers.removeWhere((worker) => worker.id == id);
|
|
} catch (e) {
|
|
_error = e.toString();
|
|
} finally {
|
|
_isLoading = false;
|
|
notifyListeners();
|
|
}
|
|
}
|
|
} |