Improved json auto save & budget mobile UI

This commit is contained in:
2024-03-03 17:14:00 +01:00
parent f86c4cd18b
commit fc6f64a271
20 changed files with 570 additions and 168 deletions

View File

@@ -4,6 +4,7 @@ import 'package:tunas/repositories/metadata/models/budget.dart';
import 'package:tunas/repositories/metadata/models/category.dart';
import 'package:tunas/repositories/metadata/models/account.dart';
import 'package:tunas/repositories/metadata/models/metadata.dart';
import 'package:tunas/repositories/metadata/models/settings.dart';
class MetadataRepository {
@@ -11,6 +12,7 @@ class MetadataRepository {
final _categoriesController = BehaviorSubject<List<Category>>.seeded(const []);
final _budgetController = BehaviorSubject<List<Budget>>.seeded(const []);
final _accountController = BehaviorSubject<List<Account>>.seeded(const []);
final _settingsController = BehaviorSubject<Settings>.seeded(const Settings());
MetadataRepository({
required jsonRepository,
@@ -40,6 +42,14 @@ class MetadataRepository {
return _accountController.asBroadcastStream();
}
Settings getSettings() {
return _settingsController.value;
}
Stream<Settings> getSettingsStream() {
return _settingsController.asBroadcastStream();
}
void loadMetadata() async {
Metadata metadata = await _jsonRepository.loadJson(Metadata(), MetadataFactory());
_broadcastMetadata(metadata);
@@ -69,6 +79,14 @@ class MetadataRepository {
return accounts;
}
Settings saveSettings(Settings settings) {
Metadata metadata = _constructMetadataFromControllers();
metadata.settings = settings;
_jsonRepository.saveJson(metadata);
_settingsController.add(settings);
return settings;
}
void deleteMetadata() {
Metadata metadata = Metadata();
_jsonRepository.saveJson(metadata);
@@ -79,6 +97,7 @@ class MetadataRepository {
_categoriesController.add(metadata.categories);
_budgetController.add(metadata.budgets);
_accountController.add(metadata.accounts);
_settingsController.add(metadata.settings);
}
Metadata _constructMetadataFromControllers() {
@@ -86,6 +105,7 @@ class MetadataRepository {
categories: _categoriesController.value,
budgets: _budgetController.value,
accounts: _accountController.value,
settings: _settingsController.value,
);
}
}