calorimeter/lib/storage/storage.dart

97 lines
2.1 KiB
Dart
Raw Normal View History

2024-06-09 17:06:10 +00:00
import 'dart:io';
import 'package:calodiary/food_entry_bloc.dart';
2024-06-09 17:06:10 +00:00
import 'package:path_provider/path_provider.dart';
class FoodStorage {
static late FoodStorage _instance;
2024-06-09 17:06:10 +00:00
late String path;
FoodStorage._create();
static Future<FoodStorage> create() async {
var storage = FoodStorage._create();
var directory = await getApplicationCacheDirectory();
storage.path = directory.path;
_instance = storage;
2024-06-09 17:06:10 +00:00
return _instance;
2024-06-09 17:06:10 +00:00
}
static FoodStorage getInstance() => _instance;
2024-06-09 17:06:10 +00:00
Future<List<FoodEntry>> getEntriesForDate(DateTime date) async {
List<FoodEntry> 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<void> writeEntriesForDate(
DateTime date, List<FoodEntry> 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<void> 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<double> 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;
}
2024-06-09 17:06:10 +00:00
}