import 'package:flutter/material.dart'; import '../../model/location.dart'; import '../../model/repositories/interfaces/location_repository.dart'; class LocationController extends ChangeNotifier { LocationController(LocationRepository repository) : _repository = repository { _loadLocations(); } final LocationRepository _repository; final List _locations = []; List get locations => _locations; Future addLocation(Location location) { _locations.add(location); notifyListeners(); return _repository.createLocation(location); } Future deleteLocation(Location location) { _locations.remove(location); notifyListeners(); return _repository.deleteLocation(location); } Future updateLocation(Location oldLocation, Location newLocation) { final index = _locations.indexOf(oldLocation); _locations.remove(oldLocation); _locations.insert(index, newLocation); notifyListeners(); return _repository .deleteLocation(oldLocation) .whenComplete(() => _repository.createLocation(newLocation)); } Future _loadLocations() { _locations.clear(); return _repository.loadLocations().then( (value) => _locations.addAll(value), ); } }