1
+ import 'dart:developer' ;
2
+
1
3
import 'package:flutter/material.dart' ;
2
4
import 'package:diacritic/diacritic.dart' ;
3
5
import 'package:draggable_scrollbar/draggable_scrollbar.dart' ;
@@ -20,23 +22,28 @@ class AllStopsPage extends StatefulWidget {
20
22
class _AllStopsState extends State <AllStopsPage > {
21
23
List <Stop > stops = List <Stop >();
22
24
List <Stop > saved = List <Stop >();
25
+ List <Stop > favorites = List <Stop >();
23
26
List <Stop > _stopsForDisplay = List <Stop >();
24
27
List <Stop > _savedForDisplay = List <Stop >();
28
+ List <Stop > _favoritesForDisplay = List <Stop >();
25
29
File stopsFile;
26
30
File savedFile;
31
+ File favoritesFile;
27
32
Directory dir;
28
33
String stopsFileName = 'stops.json' ;
29
34
String savedFileName = 'saved.json' ;
35
+ String favoritesFileName = 'favorites.json' ;
30
36
bool stopsExists = false ;
31
37
bool savedExists = false ;
38
+ bool favoritesExists = false ;
32
39
bool _isLoading = true ;
33
40
bool _networkStatus = false ;
34
41
35
42
final ScrollController _scrollController = ScrollController ();
36
43
final TextEditingController _textController = TextEditingController ();
37
44
38
45
Future <List <Stop >> fetchStops () async {
39
- var url = 'https://api.magicsk.eu/stops2 ' ;
46
+ var url = 'https://api.magicsk.eu/stops ' ;
40
47
var response = await http.get (url);
41
48
42
49
var _stops = List <Stop >();
@@ -70,18 +77,33 @@ class _AllStopsState extends State<AllStopsPage> {
70
77
savedExists = savedFile.existsSync ();
71
78
if (savedExists) {
72
79
print ('saved.json exists' );
73
- var _saved = List <Stop >();
74
- var savedFileJson = json.decode ((savedFile.readAsStringSync ()));
75
- for (var saveFileJson in savedFileJson) {
76
- _saved.add (Stop .fromJson (saveFileJson));
80
+ savedFile.delete ();
81
+ print ('saved.json deleted' );
82
+ }
83
+ favoritesFile = new File (dir.path + '/' + favoritesFileName);
84
+ favoritesExists = favoritesFile.existsSync ();
85
+ if (favoritesExists) {
86
+ print ('favorites.json exists' );
87
+ var _favorites = List <Stop >();
88
+ var favoritesFileJson = json.decode ((favoritesFile.readAsStringSync ()));
89
+ for (var favoritesFileJson in favoritesFileJson) {
90
+ _favorites.add (Stop .fromJson (favoritesFileJson));
91
+ }
92
+ favorites.addAll (_favorites);
93
+ print ('favorites loaded' );
94
+ // favorites.sort((a, b) {
95
+ // return a.name.toLowerCase().compareTo(b.name.toLowerCase());
96
+ // });
97
+ int i, s;
98
+ for (i = 0 ; i < favorites.length; i++ ){
99
+ for (s = 0 ; s < stops.length; s++ ){
100
+ if (favorites[i].id == stops[s].id) {
101
+ _favoritesForDisplay.add (stops[s]);
102
+ }
103
+ }
77
104
}
78
- saved.addAll (_saved);
79
- print ('saved loaded' );
80
- saved.sort ((a, b) {
81
- return a.name.toLowerCase ().compareTo (b.name.toLowerCase ());
82
- });
83
105
setState (() {
84
- _savedForDisplay = saved ;
106
+ _favoritesForDisplay = favorites ;
85
107
});
86
108
}
87
109
stopsFile = new File (dir.path + '/' + stopsFileName);
@@ -95,66 +117,66 @@ class _AllStopsState extends State<AllStopsPage> {
95
117
}
96
118
stops.addAll (_stops);
97
119
int i, s;
98
- for (s = 0 ; s < saved .length; s ++ ) {
99
- for (i = 0 ; i < stops.length; i ++ ) {
100
- if (saved[s].name == stops[i].name ) {
101
- stops.remove (stops[i ]);
120
+ for (i = 0 ; i < favorites .length; i ++ ) {
121
+ for (s = 0 ; s < stops.length; s ++ ) {
122
+ if (favorites[i].id == stops[s].id ) {
123
+ stops.remove (stops[s ]);
102
124
}
103
125
}
104
126
}
105
127
print ('stops cleared' );
106
- stops.sort ((a, b) {
107
- return a.name.toLowerCase ().compareTo (b.name.toLowerCase ());
108
- });
109
- print ('stops sorted' );
128
+ // stops.sort((a, b) {
129
+ // return a.name.toLowerCase().compareTo(b.name.toLowerCase());
130
+ // });
131
+ // print('stops sorted');
110
132
setState (() {
111
133
_stopsForDisplay = stops;
112
134
_isLoading = false ;
113
135
});
114
- } else {
115
- checkNetworkStatus ().then ((status) {
116
- if (status) {
117
- fetchStops ().then ((value) {
118
- setState (() {
119
- stops.addAll (value);
120
- getApplicationDocumentsDirectory ().then ((Directory directory) {
121
- File file = new File (directory.path + "/" + stopsFileName);
122
- file.createSync ();
123
- file.writeAsStringSync (json.encode (stops));
124
- print ('stops saved' );
125
- int i, s;
126
- for (s = 0 ; s < saved.length; s++ ) {
127
- for (i = 0 ; i < stops.length; i++ ) {
128
- if (saved[s].name == stops[i].name) {
129
- stops.remove (stops[i]);
130
- }
131
- }
136
+ }
137
+ checkNetworkStatus ().then ((status) {
138
+ if (status) {
139
+ fetchStops ().then ((value) {
140
+ setState (() {
141
+ stops.removeRange (0 , stops.length);
142
+ stops.addAll (value);
143
+ int i, s;
144
+ for (i = 0 ; i < favorites.length; i++ ) {
145
+ for (s = 0 ; s < stops.length; s++ ) {
146
+ if (favorites[i].id == stops[s].id) {
147
+ stops.remove (stops[s]);
132
148
}
133
- print ('stops cleared' );
134
- stops.sort ((a, b) {
135
- return a.name.toLowerCase ().compareTo (b.name.toLowerCase ());
136
- });
137
- print ('stops sorted' );
138
- setState (() {
139
- _stopsForDisplay = stops;
140
- _isLoading = false ;
141
- });
142
- });
149
+ }
150
+ }
151
+ print ('stops cleared' );
152
+ getApplicationDocumentsDirectory ().then ((Directory dir) {
153
+ File file = new File (dir.path + "/" + stopsFileName);
154
+ file.createSync ();
155
+ file.writeAsStringSync (json.encode (stops));
156
+ print ('stops saved' );
157
+ });
158
+ // stops.sort((a, b) {
159
+ // return a.name.toLowerCase().compareTo(b.name.toLowerCase());
160
+ // });
161
+ // print('stops sorted');
162
+ setState (() {
163
+ _stopsForDisplay = stops;
164
+ _isLoading = false ;
143
165
});
144
166
});
145
- }
146
- });
147
- }
167
+ });
168
+ }
169
+ });
148
170
});
149
171
});
150
172
super .initState ();
151
173
}
152
174
153
175
File createFile () {
154
- File file = new File (dir.path + "/" + savedFileName );
176
+ File file = File (dir.path + "/" + favoritesFileName );
155
177
file.createSync ();
156
- file.writeAsStringSync (json.encode (saved ));
157
- print ('saved ' );
178
+ file.writeAsStringSync (json.encode (favorites ));
179
+ print ('favorites created ' );
158
180
return file;
159
181
}
160
182
@@ -191,9 +213,9 @@ class _AllStopsState extends State<AllStopsPage> {
191
213
child: ListView .builder (
192
214
controller: _scrollController,
193
215
scrollDirection: Axis .vertical,
194
- itemCount: _savedForDisplay .length + _stopsForDisplay.length,
216
+ itemCount: _favoritesForDisplay .length + _stopsForDisplay.length,
195
217
itemBuilder: (context, index) {
196
- return index < _savedForDisplay .length ? _listSavedItem (index) : _listItem (index);
218
+ return index < _favoritesForDisplay .length ? _listFavoritesItem (index) : _listItem (index);
197
219
},
198
220
))),
199
221
);
@@ -221,7 +243,7 @@ class _AllStopsState extends State<AllStopsPage> {
221
243
var stopName = removeDiacritics (stop.name).toLowerCase ();
222
244
return stopName.contains (text);
223
245
}).toList ();
224
- _savedForDisplay = saved .where ((stop) {
246
+ _favoritesForDisplay = favorites .where ((stop) {
225
247
var stopName = removeDiacritics (stop.name).toLowerCase ();
226
248
return stopName.contains (text);
227
249
}).toList ();
@@ -241,7 +263,7 @@ class _AllStopsState extends State<AllStopsPage> {
241
263
var stopName = removeDiacritics (stop.name).toLowerCase ();
242
264
return stopName.contains (text);
243
265
}).toList ();
244
- _savedForDisplay = saved .where ((stop) {
266
+ _favoritesForDisplay = favorites .where ((stop) {
245
267
var stopName = removeDiacritics (stop.name).toLowerCase ();
246
268
return stopName.contains (text);
247
269
}).toList ();
@@ -252,7 +274,7 @@ class _AllStopsState extends State<AllStopsPage> {
252
274
}
253
275
254
276
_listItem (index) {
255
- index = index - _savedForDisplay .length;
277
+ index = index - _favoritesForDisplay .length;
256
278
return FlatButton (
257
279
onPressed: () {
258
280
Navigator .push (context, MaterialPageRoute (builder: (context) => StopWebView (_stopsForDisplay[index])));
@@ -276,17 +298,17 @@ class _AllStopsState extends State<AllStopsPage> {
276
298
icon: Icon (Icons .star_border),
277
299
onPressed: () {
278
300
setState (() {
279
- saved .add (_stopsForDisplay[index]);
301
+ favorites .add (_stopsForDisplay[index]);
280
302
stops.remove (_stopsForDisplay[index]);
281
- saved .sort ((a, b) {
303
+ favorites .sort ((a, b) {
282
304
return a.name.toLowerCase ().compareTo (b.name.toLowerCase ());
283
305
});
284
306
var text = _textController.text;
285
307
_stopsForDisplay = stops.where ((stop) {
286
308
var stopName = removeDiacritics (stop.name).toLowerCase ();
287
309
return stopName.contains (text);
288
310
}).toList ();
289
- _savedForDisplay = saved .where ((stop) {
311
+ _favoritesForDisplay = favorites .where ((stop) {
290
312
var stopName = removeDiacritics (stop.name).toLowerCase ();
291
313
return stopName.contains (text);
292
314
}).toList ();
@@ -305,10 +327,10 @@ class _AllStopsState extends State<AllStopsPage> {
305
327
));
306
328
}
307
329
308
- _listSavedItem (index) {
330
+ _listFavoritesItem (index) {
309
331
return FlatButton (
310
332
onPressed: () {
311
- Navigator .push (context, MaterialPageRoute (builder: (context) => StopWebView (_savedForDisplay [index])));
333
+ Navigator .push (context, MaterialPageRoute (builder: (context) => StopWebView (_favoritesForDisplay [index])));
312
334
},
313
335
child: Column (
314
336
children: < Widget > [
@@ -321,7 +343,7 @@ class _AllStopsState extends State<AllStopsPage> {
321
343
Padding (
322
344
padding: const EdgeInsets .only (left: 16.0 ),
323
345
child: Text (
324
- _savedForDisplay [index].name,
346
+ _favoritesForDisplay [index].name,
325
347
style: TextStyle (fontSize: 17.5 , fontWeight: FontWeight .normal),
326
348
),
327
349
),
@@ -334,8 +356,8 @@ class _AllStopsState extends State<AllStopsPage> {
334
356
color: Colors .yellow[800 ],
335
357
onPressed: () {
336
358
setState (() {
337
- stops.add (_savedForDisplay [index]);
338
- saved .remove (_savedForDisplay [index]);
359
+ stops.add (_favoritesForDisplay [index]);
360
+ favorites .remove (_favoritesForDisplay [index]);
339
361
stops.sort ((a, b) {
340
362
return a.name.toLowerCase ().compareTo (b.name.toLowerCase ());
341
363
});
@@ -344,7 +366,7 @@ class _AllStopsState extends State<AllStopsPage> {
344
366
var stopName = removeDiacritics (stop.name).toLowerCase ();
345
367
return stopName.contains (text);
346
368
}).toList ();
347
- _savedForDisplay = saved .where ((stop) {
369
+ _favoritesForDisplay = favorites .where ((stop) {
348
370
var stopName = removeDiacritics (stop.name).toLowerCase ();
349
371
return stopName.contains (text);
350
372
}).toList ();
0 commit comments