Improved json auto save & budget mobile UI
This commit is contained in:
@@ -55,6 +55,7 @@ class AccountBloc extends Bloc<AccountEvent, AccountState> {
|
||||
on<AccountEditLabel>(_onAccountEditLabel);
|
||||
on<AccountEditSaving>(_onAccountEditSaving);
|
||||
on<AccountEditColor>(_onAccountEditColor);
|
||||
on<ClearData>(_onClearData);
|
||||
|
||||
_metadataRepository
|
||||
.getAccountsStream()
|
||||
@@ -209,4 +210,9 @@ class AccountBloc extends Bloc<AccountEvent, AccountState> {
|
||||
_metadataRepository.saveAccounts(accounts);
|
||||
return accounts;
|
||||
}
|
||||
|
||||
FutureOr<void> _onClearData(ClearData event, Emitter<AccountState> emit) {
|
||||
_metadataRepository.deleteMetadata();
|
||||
_transactionsRepository.deleteTransactions();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,6 +7,10 @@ sealed class AccountEvent extends Equatable {
|
||||
List<Object> get props => [];
|
||||
}
|
||||
|
||||
final class ClearData extends AccountEvent {
|
||||
const ClearData();
|
||||
}
|
||||
|
||||
final class AccountImportCSV extends AccountEvent {
|
||||
const AccountImportCSV();
|
||||
}
|
||||
|
||||
@@ -226,10 +226,14 @@ class BudgetBloc extends Bloc<BudgetEvent, BudgetState> {
|
||||
|
||||
BudgetState _computeState(List<Budget> budgets, double? initialBudget) {
|
||||
final compareResult = _computeCompareBudget(state.budgets, state.compareYear, state.compareMonth);
|
||||
|
||||
final budgetValues = budgets.map((budget) => budget.value);
|
||||
final budgetReducedValues = budgetValues.isEmpty ? 0 : budgetValues.reduce((value, element) => value + element);
|
||||
|
||||
return state.copyWith(
|
||||
budgets: budgets,
|
||||
initialBudget: (initialBudget ?? state.initialBudget),
|
||||
remainingBudget: (initialBudget ?? state.initialBudget) - budgets.map((budget) => budget.value).reduce((value, element) => value + element),
|
||||
remainingBudget: (initialBudget ?? state.initialBudget) - budgetReducedValues,
|
||||
compareBudgets: compareResult.$1,
|
||||
otherBudgets: compareResult.$2,
|
||||
);
|
||||
|
||||
36
lib/domains/settings/settings_bloc.dart
Normal file
36
lib/domains/settings/settings_bloc.dart
Normal file
@@ -0,0 +1,36 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:tunas/repositories/metadata/metadata_repository.dart';
|
||||
import 'package:tunas/repositories/metadata/models/settings.dart';
|
||||
|
||||
part 'settings_event.dart';
|
||||
part 'settings_state.dart';
|
||||
|
||||
class SettingsBloc extends Bloc<SettingsEvent, SettingsState> {
|
||||
final MetadataRepository _metadataRepository;
|
||||
|
||||
SettingsBloc({required MetadataRepository metadataRepository}) : _metadataRepository = metadataRepository, super(const SettingsState()) {
|
||||
on<SettingsLoad>(_onSettingsLoad);
|
||||
on<SetThemeMode>(_onSetThemeMode);
|
||||
|
||||
_metadataRepository
|
||||
.getSettingsStream()
|
||||
.listen((settings) => add(SettingsLoad(settings)));
|
||||
}
|
||||
|
||||
FutureOr<void> _onSettingsLoad(SettingsLoad event, Emitter<SettingsState> emit) {
|
||||
emit(state.copyWith(
|
||||
themeMode: event.settings.themeMode,
|
||||
));
|
||||
}
|
||||
|
||||
FutureOr<void> _onSetThemeMode(SetThemeMode event, Emitter<SettingsState> emit) {
|
||||
_metadataRepository.saveSettings(Settings(themeMode: event.themeMode));
|
||||
emit(state.copyWith(
|
||||
themeMode: event.themeMode,
|
||||
));
|
||||
}
|
||||
}
|
||||
20
lib/domains/settings/settings_event.dart
Normal file
20
lib/domains/settings/settings_event.dart
Normal file
@@ -0,0 +1,20 @@
|
||||
part of 'settings_bloc.dart';
|
||||
|
||||
sealed class SettingsEvent extends Equatable {
|
||||
const SettingsEvent();
|
||||
|
||||
@override
|
||||
List<Object> get props => [];
|
||||
}
|
||||
|
||||
final class SettingsLoad extends SettingsEvent {
|
||||
final Settings settings;
|
||||
|
||||
const SettingsLoad(this.settings);
|
||||
}
|
||||
|
||||
final class SetThemeMode extends SettingsEvent {
|
||||
final ThemeMode themeMode;
|
||||
|
||||
const SetThemeMode(this.themeMode);
|
||||
}
|
||||
17
lib/domains/settings/settings_state.dart
Normal file
17
lib/domains/settings/settings_state.dart
Normal file
@@ -0,0 +1,17 @@
|
||||
part of 'settings_bloc.dart';
|
||||
|
||||
class SettingsState {
|
||||
final ThemeMode themeMode;
|
||||
|
||||
const SettingsState({
|
||||
this.themeMode = ThemeMode.system,
|
||||
});
|
||||
|
||||
SettingsState copyWith({
|
||||
ThemeMode? themeMode,
|
||||
}) {
|
||||
return SettingsState(
|
||||
themeMode: themeMode ?? this.themeMode,
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user