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

@@ -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,
));
}
}

View 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);
}

View 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,
);
}
}