Untitled
unknown
plain_text
a year ago
6.4 kB
7
Indexable
import 'package:flutter/cupertino.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:woozy_search/woozy_search.dart';
import '../../../../src/find/domain/entities/charger.dart';
import '../../../../src/find/domain/entities/charger_station.dart';
import '../../../../src/find/domain/entities/filter.dart';
class ChargeStationsProvider extends ChangeNotifier {
List<ChargeStation>? _favoriteChargeStations;
List<ChargeStation>? _chargeStations;
List<ChargeStation>? _filteredChargeStations;
final Woozy<ChargeStation> _searcher = Woozy<ChargeStation>();
List<ChargeStation>? get chargeStations =>
_filteredChargeStations ?? _chargeStations;
List<ChargeStation>? get favoriteChargeStations => _favoriteChargeStations;
void initChargeStations(List<ChargeStation> chargeStations) {
_chargeStations = chargeStations;
_filteredChargeStations = chargeStations;
notifyListeners();
_searcher
.setEntries(chargeStations.map((station) => station.name).toList());
notifyListeners();
}
void initFavoriteChargeStations(List<ChargeStation> favoriteChargeStations) {
if (_favoriteChargeStations != favoriteChargeStations) {
_favoriteChargeStations = favoriteChargeStations;
}
notifyListeners();
}
set favoriteChargeStations(List<ChargeStation>? favoriteChargeStations) {
if (_favoriteChargeStations != favoriteChargeStations) {
_favoriteChargeStations = favoriteChargeStations;
Future.delayed(Duration.zero, notifyListeners);
}
}
ChargeStation? _favoriteChargeStationItem;
ChargeStation? get favoriteChargeStationItem => _favoriteChargeStationItem;
void selectFavoriteChargeStation(ChargeStation? favoriteChargeStationItem) {
_favoriteChargeStationItem = favoriteChargeStationItem;
notifyListeners();
}
set favoriteChargeStationItem(ChargeStation? favoriteChargeStationItem) {
if (_favoriteChargeStationItem != favoriteChargeStationItem) {
_favoriteChargeStationItem = favoriteChargeStationItem;
Future.delayed(Duration.zero, notifyListeners);
}
}
bool isFavoriteChargeStations(ChargeStation chargerStation) {
if (_favoriteChargeStations != null) {
for (var favoriteChargeStation in _favoriteChargeStations!) {
if (favoriteChargeStation == chargerStation) {
return true;
}
}
}
return false;
}
void addFavoriteChargeStations(String chargerStationId) {
try {
final ChargeStation chargerStation = _chargeStations!.firstWhere(
(element) => element.id == chargerStationId,
);
_favoriteChargeStations!.add(chargerStation);
} catch (e) {
return;
}
notifyListeners();
}
void deleteFavoriteChargeStations(String chargerStationId) {
try {
final ChargeStation chargerStation = _favoriteChargeStations!.firstWhere(
(element) => element.id == chargerStationId,
);
_favoriteChargeStations!.remove(chargerStation);
} catch (e) {
return;
}
notifyListeners();
}
void toggleFavoriteStatus(ChargeStation chargerStation) {
if (isFavoriteChargeStations(chargerStation)) {
deleteFavoriteChargeStations(chargerStation.id);
} else {
addFavoriteChargeStations(chargerStation.id);
}
notifyListeners();
}
ChargeStation? _chargeStationItem;
ChargeStation? get chargeStationItem => _chargeStationItem;
void selectChargeStation(ChargeStation? chargerStationItem) {
_chargeStationItem = chargerStationItem;
notifyListeners();
}
set chargeStationItem(ChargeStation? chargerStationItem) {
if (_chargeStationItem != chargerStationItem) {
_chargeStationItem = chargerStationItem;
Future.delayed(Duration.zero, notifyListeners);
}
}
Set<Marker> _markers = {};
Set<Marker> get markers => _markers;
void initMarkers(Set<Marker> markers) {
if (_markers != markers) {
_markers = markers;
}
notifyListeners();
}
// Function to get charger types and their counts
Map<String, int> getChargerTypeCounts(List<Charger> chargers) {
Map<String, int> chargerTypeCounts = {};
for (var charger in chargers) {
if (chargerTypeCounts.containsKey(charger.chargerType)) {
chargerTypeCounts[charger.chargerType] =
chargerTypeCounts[charger.chargerType]! + 1;
} else {
chargerTypeCounts[charger.chargerType] = 1;
}
}
return chargerTypeCounts;
}
// Search functionality using Woozy
void searchChargeStations(String query) {
if (query.isEmpty) {
_filteredChargeStations = _chargeStations; // Show all if query is empty
} else {
final results = _searcher.search(query);
_filteredChargeStations = results
.map((result) => _chargeStations!
.firstWhere((station) => station.name == result.text))
.toList();
}
notifyListeners();
}
Filter _filter = const Filter(
minimumPower: 0,
connectors: [],
chargeStations: [],
);
Filter get filter => _filter;
void setFilter(Filter filter) {
_filter = filter;
notifyListeners();
}
List<ChargeStation>? _filterListChargeStations;
List<ChargeStation>? get filterListChargeStations =>
_filterListChargeStations;
void setFilterListChargeStations(List<ChargeStation> chargeStations) {
_filterListChargeStations = chargeStations;
notifyListeners();
}
set filterListChargeStations(List<ChargeStation>? filterListChargeStations) {
if (_filterListChargeStations != filterListChargeStations) {
_filterListChargeStations = filterListChargeStations;
Future.delayed(Duration.zero, notifyListeners);
}
}
// void filterChargeStations(int minimumPower, List<String> selectedConnectors) {
// _filteredChargeStations = _chargeStations!
// .where((station) {
// return station.chargers.any((charger) {
// final matchesPower = charger.power <= minimumPower;
// final matchesConnector = selectedConnectors.contains(charger.chargerType);
// return matchesPower && matchesConnector;
// });
// })
// .toList();
// notifyListeners();
// }
}
Editor is loading...
Leave a Comment