-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathstation_viewmodel.dart
73 lines (62 loc) · 1.71 KB
/
station_viewmodel.dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import 'package:flutter/material.dart';
import 'package:via_mallorca/apis/local_storage.dart';
import 'package:mallorca_transit_services/mallorca_transit_services.dart';
class StationSheetViewModel extends ChangeNotifier {
final Station station;
StationSheetViewModel(this.station);
bool isFavourite = false;
List<Departure>? departures;
bool isLoading = true;
bool hasError = false;
final int numberOfDepartures = 10;
Future<void> initialize() async {
await _loadFavouriteStatus();
await fetchDepartures();
}
Future<void> _loadFavouriteStatus() async {
final favourites = await LocalStorageApi.getFavouriteStations();
isFavourite = favourites.contains(station.code.toString());
if (!_isDisposed) {
notifyListeners();
}
}
Future<void> toggleFavourite() async {
final favourites = await LocalStorageApi.getFavouriteStations();
if (isFavourite) {
favourites.remove(station.code.toString());
} else {
favourites.add(station.code.toString());
}
await LocalStorageApi.setFavouriteStations(favourites);
isFavourite = !isFavourite;
if (!_isDisposed) {
notifyListeners();
}
}
Future<void> fetchDepartures() async {
try {
isLoading = true;
hasError = false;
if (!_isDisposed) {
notifyListeners();
}
departures = await Departures.getDepartures(
stationCode: station.code,
numberOfDepartures: numberOfDepartures,
);
} catch (e) {
hasError = true;
} finally {
isLoading = false;
if (!_isDisposed) {
notifyListeners();
}
}
}
bool _isDisposed = false;
@override
void dispose() {
_isDisposed = true;
super.dispose();
}
}