Improved json auto save & budget mobile UI
This commit is contained in:
@@ -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,
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -2,16 +2,19 @@ import 'package:tunas/repositories/metadata/models/budget.dart';
|
||||
import 'package:tunas/repositories/metadata/models/category.dart';
|
||||
import 'package:tunas/repositories/json/models/json.dart';
|
||||
import 'package:tunas/repositories/metadata/models/account.dart';
|
||||
import 'package:tunas/repositories/metadata/models/settings.dart';
|
||||
|
||||
class Metadata implements Json {
|
||||
List<Budget> budgets;
|
||||
List<Category> categories;
|
||||
List<Account> accounts;
|
||||
Settings settings;
|
||||
|
||||
Metadata({
|
||||
this.budgets = const [],
|
||||
this.categories = const [],
|
||||
this.accounts = const [],
|
||||
this.settings = const Settings(),
|
||||
});
|
||||
|
||||
@override
|
||||
|
||||
19
lib/repositories/metadata/models/settings.dart
Normal file
19
lib/repositories/metadata/models/settings.dart
Normal file
@@ -0,0 +1,19 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class Settings {
|
||||
final ThemeMode themeMode;
|
||||
|
||||
const Settings({
|
||||
this.themeMode = ThemeMode.system,
|
||||
});
|
||||
|
||||
factory Settings.fromJson(Map<String, dynamic> json) {
|
||||
return Settings(
|
||||
themeMode: ThemeMode.values.byName(json['themeMode']),
|
||||
);
|
||||
}
|
||||
|
||||
Map<String, String> toJson() => {
|
||||
'themeMode': themeMode.name,
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user