import 'dart:io'; import 'package:kalodings/food_entry_bloc.dart'; import 'package:path_provider/path_provider.dart'; class FoodStorage { static late FoodStorage _instance; late String path; FoodStorage._create(); static Future create() async { var storage = FoodStorage._create(); var directory = await getApplicationCacheDirectory(); storage.path = directory.path; _instance = storage; return _instance; } static FoodStorage getInstance() => _instance; Future> getEntriesForDate(DateTime date) async { List entries = []; var filePath = '$path/${date.year}/${date.month}/${date.day}'; var file = File(filePath); var exists = await file.exists(); if (!exists) return []; var lines = await file.readAsLines(); for (var line in lines) { var fields = line.split(','); var entry = FoodEntry( name: fields[1], mass: double.parse(fields[2]), kcalPerMass: double.parse(fields[3])); entries.add(entry); } return entries; } Future writeEntriesForDate( DateTime date, List foodEntries) async { var filePath = '$path/${date.year}/${date.month}/${date.day}'; var file = File(filePath); var exists = await file.exists(); if (!exists) { await file.create(recursive: true); } String fullString = ''; for (var entry in foodEntries) { fullString += '${entry.toString()}\n'; } await file.writeAsString(fullString); } Future updateLimit(double limit) async { var filePath = '$path/limit'; var file = File(filePath); var exists = await file.exists(); if (!exists) { await file.create(); } await file.writeAsString(limit.toString()); } Future readLimit() async { var filePath = '$path/limit'; var file = File(filePath); var exists = await file.exists(); if (!exists) { return 2000; } var line = await file.readAsLines(); double limit; try { limit = double.parse(line[0]); } catch (e) { limit = 2000; } return limit; } }