instruction_app/lib/providers/worker_provider.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();
}
}
}