import 'dart:convert'; import 'dart:io'; import 'package:http/http.dart' as http; import 'package:shared_preferences/shared_preferences.dart'; class FetchMenu { static var lastFetch = DateTime.now(); static var fetched = false; static Future> get() async { List menus = []; if (!fetched || DateTime.now().difference(lastFetch).inHours >= 2) { menus = await fromRequest(); fetched = true; } else { menus = await fromCache(); } return menus; } static Future> fromCache() async { return await loadCache(); } static Future> fromRequest() async { List menus = []; http.Response resp = await http.get(Uri.parse( "https://www.swfr.de/essen/mensen-cafes-speiseplaene/mensa-loerrach")); var content = resp.body.split("

"); var innerContent = content[1].split("\n"); for (var s in innerContent) { if (s.contains("extra-text mb-15px")) { var name = (s.split("\">")[1].split("", " "); menus.add(name); } } await storeCache(menus); lastFetch = DateTime.now(); return menus; } static Future storeCache(List menus) async { var prefs = await SharedPreferences.getInstance(); for (var i = 0; i < 4; i++) { prefs.setString("menuCache$i", ""); if (i < menus.length) { prefs.setString("menuCache$i", menus[i]); } } } static Future> loadCache() async { var prefs = await SharedPreferences.getInstance(); List menus = []; for (var i = 0; i < 4; i++) { var curr = prefs.getString("menuCache$i"); if (curr != "") { menus.add(curr!); } } return menus; } }